|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
22.06.2007, 21:16 | #1 |
Форумчанин
Регистрация: 26.04.2007
Сообщений: 440
|
Теоритические вопросы
Cобственно, тут вопросов немного. Они по большей части действительно теоритические. Я буду очень благодарен всем кто откликнется.
P.s Извините за корявое описание. Оно иногда имеет место быть... 1. чем отличаются свойства компонентов items и lines (если брать например memo и listbox) (я имею ввиду почему назвали items хотя они имеют те же свойства что и lines) 2. При динамическом созданни кнопки(with tbutton.create(self)) мы указываем что хотим создавать себя (буквальный перевод self). А есть ли какие-либо другие параметры отвечающие требованию AOwner:TComponent и если есть то какие? 4. Можно как нибудь динамически изменять стиль закрашиваемой линий-я имею ввиду нарисовал элипс\прямоугольник, нажал на него- выбрал пунктир-линия стала пунктирной. Может это реализовать как нибудь с помощью собственно напсанной процедуры? Просто не приходит в голову как это реализовать. 5. А что из себя представляют ini и dat файлы? Так как класс tinifile пошел от tobject то можно ли там хранить описания компонентов или их самих(типа with tbutton.create do begin ...) 6. один ворос посвящееный 3ds max и delphi. Вот часто пишут: движок поддерживает фотореалистичную воду или её создание(ну что то типа этого). То есть получается движок создает эту фотореалитичную воду там где надо программисту. А для чего тогда её создание в 3ds max(или других 3д редакторах)? тое сть получается что я могу только создать берега и потом сделать воду с помощью движка. Я просто немного не понимаю этот процесс. Если я ошибся то поравьте меня. 7. А можно как нибудь запихнуть в процедуру (её потом в dll) код чтения из файла или его открытия. Типа if opendialog1.execute (открыт) then .... или assignfile(f,'c\programmers.txt') далее reset(f) ... ? 8. Тут такая проблемка. Был код который успешно работал: for i:=length(s) downto 1 do if (s[i]=c) and(q<1) then begin q:=q+1; e:=i;end; delete(s,1,e); Я его запихнул в функцию а её в dll файл. Но после этого пошли странные ошибки. Может это ошибки компилятора, а может мои. Я просто не понимаю в чем проблема. сам dll файл: //////////////////////////////////////////////////////////// library Project1; uses SysUtils,Classes; function formcaption1 (sy:string):string;stdcall; var e,i,q:integer;c:char;df:string; begin q:=0;c:='\';e:=0; df:=sy; for i:=length(df) downto 1 do if (df[i]=c) and(q<1) then begin q:=q+1; e:=i;end; delete(df,1,e); result:=df; end; exports formcaption1 index 13; {$R *.res} begin end. ////////////////////////////////////////////////////////////////// а теперь ошибка(дословно): \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ \\\\\\\\\\\\\\\\\ Project 'project.exe' raised exception class eaccessviolation with message 'access violation at adress 00401cae in module 'project.exe' write of adress 676e6y74. Process stopped. use step or run continue. \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ \\\\\\\\\\\\\\\ Кстати, в самом dll файле делфи сообщала что типа shellctrls находится на платформе(to platform). 9. Фленов описывает dll файлы как модальные или немодальные. По нему получается что прога не может узнать где конец программы(формы запихнутой в dll файл-модальное окно) и поэтому не освобождает память. Но с другой стороны он же сам писал form1.showmodal а потом по оканчанию form1.free.Но получается что это free никогда не выполняется т.к прога не узнает что мы закрыли эту форму. Да и вообще почему эти окна(модальное и немодальное) так называются. Я просто большой разницы не вижу между ними. Мы ведь писали потом просто другую процедуру которая также освобождала память. К тому же те примеры которые он привел к немодальным окнам плохо работают. То ограничение if f>0 then ....Free не работает хоть я присваиваю form1.oncreate f:=0; переменой ф значение 0. Я посмотрел и его иходники. Там такая же ошибка. Халтурит Фленов, однако.... 10. А как делать описания типов файла(сделать новый формат-например типа jpeg)? Я просто мне надо сделать а никогда в жизни с этим не встречался. Это нужно для мого компонента на базе timage. Там должен быть и gif. jpeg 2000 и.т.д. Я уже перерыл все существуюшщие у меня книги, но инфы как это делать нет. Я был бы благодарен за хоть какой-нибудь простой пример описания(точнее создания нового формата-любого). Последний раз редактировалось bill; 22.06.2007 в 21:30. |
23.06.2007, 13:53 | #2 | ||
Форумчанин
Регистрация: 31.05.2007
Сообщений: 486
|
Цитата:
Цитата:
Если создается сама форма то в качестве владельца указывается экземпляр приложения, т.е. Application который создается автоматически: MyForm := TForm.Create(Application); |
||
23.06.2007, 14:20 | #3 | ||
Форумчанин
Регистрация: 31.05.2007
Сообщений: 486
|
Цитата:
Цитата:
Ini-файлы (в "классическом" виде) - обычные текстовые файлы, имеют определенную структуру (секции/параметры/значения). Хранить в них можно что угодно, в том числе и свойства/описания компонентов. Например, для каждого компонента создать секцию с именем этого компонента, а для каждого свойства - отдельный параметр. В dll можно размещать не только это, но и целые формы со всеми нужными элементами. |
||
23.06.2007, 15:49 | #4 | |||
Форумчанин
Регистрация: 31.05.2007
Сообщений: 486
|
Цитата:
Цитата:
Цитата:
2. Разница между модальным и немодальным окном в том, что модальное окно не дает работать с другими окнами (в рамках одной программы), т.е. пока его не закроешь, другие окна недоступны (для пользователя). А обычное (немодальное) окно позволяет переключаться на любые другие окна. Иногда все это имеет очень важное значение. Например диалоговые окна практически всегда делают модальными. Представь, что диалог немодальный - пользователь открыл это окно, затем случайно щелкнул по главной форме, программа переключилась на нее, диалог остался "висеть" за главным окном, его не видно, пользователь растерян (куда делось окно?) и даже его повторный вызов (скажем из меню) может ничего не дать - оно и так открыто, просто осталось невидимо. Еще хуже, если такое окно создается динамически - первое еще не уничтожилось, а пользователь запустил второе (третье...), а ведь все эти диалоги будут пытаться работать с одними и теми же данными и изменять их (в произвольные моменты). С модальным таких проблем не возникнет - пока не закроешь, не вернешься назад и с программной точки зрения легче. Код:
3. Халтурит Фленов или нет - еще неизвестно. Это может быть и добросовестное заблуждение и случайная опечатка и ошибка наборщика в типографии. Тем более не приведено никакого конкретного кода. 4. Много я здесь просто не понял. Например, "прога не может узнать где конец программы(формы запихнутой в dll файл-модальное окно)" - не разобрал эту фразу. |
|||
23.06.2007, 20:18 | #5 |
Форумчанин
Регистрация: 26.04.2007
Сообщений: 440
|
1. Да, Jeni , это была дейтсвительно опечатка.
2. Про формы я знаю. Я просто в dll никогда не запихивал именно процедуры открытия файлов. 3. Код Фленова предоставил. Во-первых этот "неработающий код" один и тот же и в книге и на диске. Но даже несмория на такой промах я считаю книгу фленова одной из лучших книг про программированию. С этим многие могут не согласиться, но это мое мнение. 4. А почему модуль ShareMem должен быть первым по списку а не вторым хотя бы? Я понимаю что он не может быть на последнем месте, но все-таки? 5. Jeni, огромное спасибо!!!! Извини за корявые описания. Просто когда меня перполняют чувства,эмоции, мысли и всё и вся я могу иногда выдавать подобные фразы. Я конечно каждый свой текст читаю не 1 раз на проверку таких вот выражений, но иногда они проскакивают. Я все таки расшифрую фразу: " прога не может узнать где конец программы(формы запихнутой в dll файл-модальное окно)" . Основной здесь смысл стоит в - прога не может узнать где конец программы. А в скобках идет пояснение- форма запихнута в dll файл-модальное окно. Последний раз редактировалось bill; 07.10.2007 в 12:39. |
23.06.2007, 23:35 | #6 | |
Форумчанин
Регистрация: 31.05.2007
Сообщений: 486
|
Цитата:
2. С точки зрения системы нет особой разницы, где выполняется код - в библиотеке или в "нормальной" программе. Есть ньюансы в обработке ошибок, но, в целом, можно использовать любой код и там и там. 4. Как минимум это гарантирует, что в других модулях строки не начнут использоваться раньше, чем пройдет инициализация в модуле ShareMem (вероятно там как-то модифицируется менеджер управления строками). 5. Если честно - я так и не понял "пояснений" (в пояснении написано то же самое, что я не понял!). |
|
24.06.2007, 22:57 | #7 |
Форумчанин
Регистрация: 26.04.2007
Сообщений: 440
|
прога не может узнать где конец программы. А дальше я пишу что другая форма(мы говорили про формы модальные\немодальные использующиеся в программе) которая
запихнута в dll файл - это модальное окно. Поэтому итог: прога использует модальное окно(ту форму которая как раз у меня нахожится в dll файле). Вот это я примерно и пытался описать, не знаю конечно, как это у меня получилось... P.s Надеюсь у меня с русским все ХАРАШО!!! |
25.06.2007, 13:10 | #8 |
Форумчанин
Регистрация: 31.05.2007
Сообщений: 486
|
С русским всё нормально, а вот с объяснениями... Постараюсь объяснить что я не понял в "объяснении".
Вот например фраза: "прога не может узнать где конец программы". 1. Какой программы: самой себя? Или библиотеки? 2. Что значит "конец"? Не может узнать конечный адрес программы (где, кстати, в памяти, на диске)? Или не может отследить факт завершения программы? Или еще что-то? Первоначальная фраза "прога не может узнать где конец программы (формы запихнутой в dll файл-модальное окно)" ничем не лучше. Здесь понятие программы и формы используется как синонимы, а ведь это совершенно разные понятия, с технической точки зрения не имеющие ничего общего. Возможно (но это уже мои домыслы) имелось ввиду, что программа не может отследить факт закрытия формы, вызванной из библиотеки. Или, что программа не может освободить эту форму (через Free). Если так - то это уже совсем другая песня. |
25.06.2007, 18:50 | #9 |
Форумчанин
Регистрация: 26.04.2007
Сообщений: 440
|
1. Да, самой себя.
2. Да, факт завершения программы. Вы правы, с этим дейтвительно возникают иногда проблемы. |
26.06.2007, 12:10 | #10 |
Форумчанин
Регистрация: 26.04.2007
Сообщений: 440
|
1. Jeni, нет, все таки, не работает у эта функция, которую я запихнул в dll файл, даже с подключением модуля ShareMem.
Вот эти проги. В новая папка2 -сама программа. В function and procedure сама библиотека. Прога выдает ошибку:Project Project1.exe raised exception class EInvalidPointer with message 'Invalid pointer operation '. Process stopped Use Step or Run continue. 2. Я хочу делать новый компонент на базе image-а. Там он будет сможет открывать и gif-анимацию и файлы фотошопа. Но проблема в том что я никогда не описыва новые форматы. Мне это сделаьб также как описание типа или нет? И еще. Откуда можно взять инфу о самом типе(например надо описать формат gif - а как?Мне как раз нужна инфа о том что он из себя представляет). Заранее благодарен за ответ. Последний раз редактировалось bill; 07.10.2007 в 12:39. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Вопросы по реестру | Titan123 | Общие вопросы Delphi | 5 | 02.07.2008 13:44 |
Простые вопросы по C++ | ERASERROR | Помощь студентам | 3 | 24.03.2008 16:58 |
Вопросы по WEB | Elm0 | Свободное общение | 12 | 20.02.2008 02:40 |
вопросы | MAcK | Win Api | 7 | 21.07.2007 18:08 |