Форум: "Прочее";
Текущий архив: 2006.11.19;
Скачать: [xml.tar.bz2];
ВнизИщу книги с примерами форм в dll Найти похожие ветки
← →
Leonid Troyanovsky © (2006-10-26 23:38) [0]Hi, All.
Кто может снабдить ссылками (библиографическими, иными)
на книги, описывающие создание форм в dll.
(Безо всяких там bpl, IUnknown и проч. премудростей.
И, особенно, немодальных форм).
Желательно, (пере)изданных за пару последних лет.
Можно на lv.t@rambler.ru
Заранее признателен,
результатами (если будут)поделюсь с общественностью.
--
Regards, LVT.
← →
Игорь Шевченко © (2006-10-26 23:39) [1]Тейксейра, Пачеко - Delphi 5, руковдоство разработчика.
← →
Игорь Шевченко © (2006-10-26 23:40) [2]
> руковдоство
"И все равно на обложке было написано: Британская энциклопудия".
(с) Илья Ильф
← →
DrPass © (2006-10-26 23:49) [3]Книг не видел, но, сполна получив по лбу всеми возможными граблями, года три-четыре назад сделал нормально работающее приложение с формами в плагинах DLL. Все как полагается - немодальными, и с докингом на главную форму, и без всяких премудростей (если не считать "ручную" передачу многих сообщений от главной формы дочерним)
← →
Leonid Troyanovsky © (2006-10-26 23:59) [4]
> Игорь Шевченко © (26.10.06 23:39) [1]
> Тейксейра, Пачеко
Странно, Xavi тусовался в nntp.borland
Неужель там оскомину не набил?
Или тоже, не читатель.
--
Regards, LVT.
← →
Leonid Troyanovsky © (2006-10-27 00:01) [5]
> DrPass © (26.10.06 23:49) [3]
> граблями, года три-четыре назад сделал нормально работающее
> приложение с формами в плагинах DLL. Все как полагается
> - немодальными, и с докингом на главную форму, и без всяких
Ну, а книгу-то будешь писать?
А то, давай, и тебя включим (в план).
--
Regards, LVT.
← →
Gero © (2006-10-27 00:06) [6]> [5] Leonid Troyanovsky © (27.10.06 00:01)
> А то, давай, и тебя включим (в план).
На отстрел?
← →
DrPass © (2006-10-27 00:24) [7]Придется писать. А то расстреляют :)
← →
Leonid Troyanovsky © (2006-10-27 00:25) [8]
> Gero © (27.10.06 00:06) [6]
> > А то, давай, и тебя включим (в план).
> На отстрел?
{Тсс.. Распугаешь авторов}
Нет, конечно, просто поставим отметочку, мол, планируется к выходу.
--
Regards, LVT.
← →
Lamer@fools.ua © (2006-10-27 01:39) [9]>Нет, конечно, просто поставим отметочку, мол, планируется к выходу.
"Правильно, товарищи. Сбрить усы... и расстрелять." ©
← →
Leonid Troyanovsky © (2006-10-27 22:39) [10]
> Leonid Troyanovsky © (26.10.06 23:38)
На данный момент в списке:
Тейксейра, Пачеко
Михаил Голованов
Фаронов
Вообще-то, удивляет, что столь уважаемые люди
отметились в оном (я, б, конечно, мог и вспомнить
пару-тройку других имен, но, это могло б быть полезно
лишь для архивариусов).
Ес-но, для каждого можно представить и оправдания
(1 придется, видимо, изучать в выходные).
--
Regards, LVT.
← →
guav © (2006-10-27 23:49) [11]common dialogs - это модальные "формы" в обычной dll.
common controls - это вообще контролы в dll.
и что ?
← →
Leonid Troyanovsky © (2006-10-28 12:03) [12]
> guav © (27.10.06 23:49) [11]
> и что ?
"формы" vs TForm
контролы vs TControl
--
Regards, LVT.
← →
guav © (2006-10-28 13:30) [13]> [12] Leonid Troyanovsky © (28.10.06 12:03)
> "формы" vs TForm
> контролы vs TControl
Если всё взаимодейсвие исключительно в стиле API, без передачи классов и строк, то различие не должно проявлятся.
← →
Adder © (2006-10-28 13:42) [14]Марко Кэнту.
Delphi 7. Для профессионалов.
ISBN 5-94723-593-5
СПб.: Питер, 2004
← →
Leonid Troyanovsky © (2006-10-28 13:44) [15]
> guav © (28.10.06 13:30) [13]
> Если всё взаимодейсвие исключительно в стиле API, без передачи
> классов и строк, то различие не должно проявлятся.
Если dll сделана в стиле API, то, конечно.
Просто там и не будет никаких TForm.
--
Regards, LVT.
← →
Leonid Troyanovsky © (2006-10-28 13:47) [16]
> Adder © (28.10.06 13:42) [14]
> Марко Кэнту.
А не затруднит кусочек кода оттуда?
Можно и на lv.t@rambler.ru
А то мне еще Тейксейра, Пачеко читать.
Заранее признателен.
--
Regards, LVT.
← →
Adder © (2006-10-28 14:13) [17]Есть только от "предыдущего выпуска" ("Mastering Delphi 6", Sybex) - думаю, разницы нет.
http://www.almar.net.ru/files/temp/FormDll.zip (7k)
← →
Leonid Troyanovsky © (2006-10-28 14:24) [18]
> Adder © (28.10.06 14:13) [17]
Тейксейра, Пачеко
Михаил Голованов
Фаронов
Марко Кэнту
Как все запущено, даже не ожидал.
Публикации-то, IMHO, не самые малочитаемые.
--
Regards, LVT.
← →
Adder © (2006-10-28 14:29) [19]
> Adder © (28.10.06 14:13) [17]
К сожалению, файл сейчас не доступен (провайдер "лёг", пишу через gprs). Доступ будет, но позже. (как только, так сразу....).
← →
Leonid Troyanovsky © (2006-10-28 14:40) [20]
> Leonid Troyanovsky © (28.10.06 13:47) [16]
> А то мне еще Тейксейра, Пачеко читать.
Нет, читать не буду.
Хватило того, что было в borland.public.delphi
Хорошо, зал славы нам, собс-но, и не нужен.
Причины заблуждения ясны.
Каналы распространения также очевидны.
Вопрос в том, что делать.
Видимо, проще всего дать правильное направление.
Т.е., что именно надо писать страдальцам, если не dll.
Скажем, пример диалога в dll я указать могу.
А вот, скажем, про плагины - ничего конкретного,
потому как не интересовался.
Может лучше собирать правильные ссылки?
--
Regards, LVT.
← →
Leonid Troyanovsky © (2006-10-28 14:41) [21]
> Adder © (28.10.06 14:29) [19]
> через gprs). Доступ будет, но позже. (как только, так сразу.
> ...).
А я успел :)
Спасибо.
--
Regards, LVT.
← →
Adder © (2006-10-28 15:38) [22]
> Спасибо.
Не за что.
Только вот вопрос не совсем понятен -(
> (Безо всяких там bpl, IUnknown и проч. премудростей.
> И, особенно, немодальных форм).
Что требуется - без немодальных форм или лучше всего именно с немодальными формами?
Если с немодальными формами - этот пример тоже есть.
Все три примера форм в dll от М.Кэнту:
http://www.almar.net.ru/files/temp/Cantu.zip (22K)
← →
Adder © (2006-10-28 15:55) [23]Пояснения к примерам:
A Modeless Form in a DLL
The second subroutine of the FormDLL example uses a different approach. As mentioned, it
receives three parameters: the color, the handle of the main form, and the message number for
notification when the color changes. These values are stored in the private data of the form:
procedure ShowColor (Col: LongInt;
FormHandle: THandle; MsgBack: Integer); stdcall;
var
FormScroll: TFormScroll;
begin
FormScroll := TFormScroll.Create (Application);
try
// initialize the data
FormScroll.FormHandle := FormHandle;
FormScroll.MsgBack := MsgBack;
FormScroll.SelectedColor := Col;
// show the form
FormScroll.Show;
except
on E: Exception do
begin
MessageDlg (‘Error in FormDLL: ‘ + E.Message, mtError, [mbOK], 0);
FormScroll.Free;
end;
end;
end;
When the form is activated, it checks to see if it was created as a modal form (simply testing
the FormHandle field). In this case, the form changes the caption and the behavior of the
OK button, as well as the overall style of the Cancel button (you can see the modified buttons
in Figure 12.5):
procedure TFormScroll.FormActivate(Sender: TObject);
begin
// change buttons for modeless form
if FormHandle <> 0 then
begin
BitBtn1.Caption := ‘Apply’;
BitBtn1.OnClick := ApplyClick;
BitBtn2.Kind := bkClose;
end;
end;
The ApplyClick method I’ve manually added to the form simply sends the notification
message to the main form, using one of the parameters to send back the selected color:
SendMessage (FormHandle, MsgBack, SelectedColor, 0);
Finally, the form’s OnClose event destroys the form object, by setting the Action parameter
to caFree. Now let’s move back to the demo program. The second button of the UseForm
example’s form has the following code:
procedure TForm1.BtnSelectClick(Sender: TObject);
var
Col: LongInt;
begin
Col := ColorToRGB (Color);
ShowColor (Col, Handle, wm_user);
end;
The form also has a message-handling method, connected with the wm_user message. This
method reads the value of the parameter corresponding to the color and sets it:
procedure TForm1.UserMessage(var Msg: TMessage);
begin
Color := Msg.WParam;
end;
Running this program produces some strange effects. Basically, the modeless form and the
main form are not synchronized, so they both show up in the Windows Taskbar; and when
you minimize the main form, the other one remains on the screen. The two forms behave as
if they were part of separate applications, because two Delphi programs (the DLL and the
EXE) have two separate global Application objects, and only the Application object of the
executable file has an associated window.
To test this situation, I’ve added a button to both the main form and the DLL form, showing
the numeric value of the Application object’s handle. Here is the code for one of them:
ShowMessage (‘Application Handle: ‘ + IntToStr (Application.Handle));
For the form in the DLL, you’ll invariably get the value 0, while for the form in the executable
you get a numeric value determined each time by Windows.
To fix the problem we can add to the DLL an initialization function that passes the handle
of the application window to the library. In practice, we copy the Handle of the executable’s
Application object to the same property of the DLL’s Application object. This is enough to
synchronize the two Application objects and make the two forms behave as in a simple
Delphi program. Here is the code of the function in the DLL:
procedure SyncApp (AppHandle: THandle); stdcall;
begin
Application.Handle := AppHandle;
end;
And here is the call to it in the executable file:
procedure TForm1.BtnSyncClick(Sender: TObject);
begin
SyncApp (Application.Handle);
BtnSync.Enabled := False;
end;
NOTE Assigning the handle of the application object of the DLL is not a work-around for a bug but a
documented operation required by the VCL. The VCL Application object supports assignment
to its Handle property (unlike most other Handle properties of the VCL) specifically to
allow programmers to tie DLL-based forms into the environment of a host application.
I’ve connected this code to a button, instead of executing it automatically at startup, to let
you test the behavior in the two different cases. Before you click the Sync App button, the
secondary modeless form behaves oddly. If you close it, synchronize the applications, and
then create another instance of the modeless form, it will behave almost correctly. The only
visible problem is that the flat speed buttons of the modeless form won’t be highlighted when
the mouse moves over them. We’ll see how to fix this problem using run-time packages at the
end of the chapter.
NOTE Technically this behavior of the speed buttons depends on the fact that the controls in the DLL
form don’t receive the cm_MouseEnter and cm_MouseLeave messages, because the DLL’s
Application.Idle method is never called. The DLL’s Application object, in fact, is not running
the application’s message loop. You can activate it by exporting from the DLL a function
that calls the internal Application.Idle routine, and call that function from the host application
when its message loop goes idle. As I’ve mentioned, however, all these problems (and a
few others) can be better solved by using run-time packages.
Copyright ©2001 SYBEX, Inc., Alameda, CA www.sybex.com
Выделение - моё.
← →
Leonid Troyanovsky © (2006-10-28 15:59) [24]
> Adder © (28.10.06 15:38) [22]
> > (Безо всяких там bpl, IUnknown и проч. премудростей.
> > И, особенно, немодальных форм).
> Что требуется - без немодальных форм или лучше всего именно
> с немодальными формами?
Вообще-то, требуется несколько другое.
Т.е., предостеречь начинанающих плагинописателей от
порочной практики.
Каждый раз приводить аргументы, почему нельзя делать
формы в dll мне, в общем-то, затруднительно.
Особенно, если рекомендации делать обратное исходят,
как оказалось, от весьма читаемых авторов.
Ну, а степень модальности форм в вопросе есть
лишь степень ошибочности предлагаемого (авторами).
Т.е., если модальная форма - то это не очень большой грех.
Скажем, 4кб утечки при динамической загрузке/выгрузке.
А немодальная - это уже ни в какие ворота.
Ну, а ограничения "без премудростей", чтобы отсеять
те способы, которые являются потециально правильными
(которые, видимо, появились в результате безуспешных
попыток запуздырить форму в длл)
--
Regards, LVT.
← →
Leonid Troyanovsky © (2006-10-28 16:08) [25]
> Adder © (28.10.06 15:55) [23]
> Пояснения к примерам:
Да, пояснения, конечно, полезные.
Хотя, я и не собирался винить в чем-то всех отмеченных авторов.
Но, волей или неволей, они способствуют распространению
этого заблуждения.
В общем, сейчас нам нужны примеры как правильно.
--
Regards, LVT.
Страницы: 1 вся ветка
Форум: "Прочее";
Текущий архив: 2006.11.19;
Скачать: [xml.tar.bz2];
Память: 0.53 MB
Время: 0.05 c