Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Проблема с отображением кнопок и не только. [Delphi]


Страницы:   1 2

xasha666 ©   (2007-05-06 17:50:00) 

Я пишу плагин для Total Commander'a, и вот возникла такая проблема c окошком настроек:
http://ex-ve.ucoz.ru/files/KOL.png

Я не могу понять, что с кнопками - что это за чёрная обводка вокруг них?
И почему после создания кнопок форма стаёт неактивной (работает только перемещение формы, а крестик не нажимается), хотя сами кнопки активны.

Программа вызывает это окошко через такую процедуру:
Procedure ConfigurePacker(Parent: HWND; DLLInstance: HINST);
begin
SGAOptionsDialogExecute(Parent);
end;


А вот мой код создания формы:

Function SGAOptionsDialogExecute(Parent: HWND): Boolean;
Var W: HWND; OkButton, CancelButton: PControl;
begin
Applet := NewApplet('');
W := HWND(Addr(Applet.Handle)^);
HWND(Addr(Applet.Handle)^) := Parent;
Dialog := NewForm(Applet, 'SGA Options');
Dialog.Width := 256;
Dialog.Height := 256;
Dialog.Left := (ScreenWidth - Dialog.Width) div 2;
Dialog.Top := (ScreenHeight - Dialog.Height) div 2;
Dialog.Style := WS_BORDER or WS_SYSMENU;
Dialog.ExStyle := WS_EX_TOOLWINDOW;
Dialog.Font.FontName := 'MS Sans Serif';
Dialog.Font.FontHeight := -11;
Dialog.Font.FontPitch := fpDefault;
Dialog.Font.FontStyle := [];
OkButton := NewButton(Dialog, 'OK').SetSize(70, 21);
OkButton.CreateWindow;
OkButton.Style := bs_center;
CancelButton := NewButton(Dialog, 'Cancel').SetSize(70, 21);
CancelButton.CreateWindow;
CancelButton.Style := bs_center;
OkButton.Left := (Dialog.Width - (OkButton.Width + 40 + CancelButton.Width)) div 2;
CancelButton.Left := OkButton.Left + OkButton.Width + 40;
OkButton.Top := Dialog.Height - 64;
CancelButton.Top := OkButton.Top;
OkButton.OnClick := TOnEvent(MakeMethod(NIL, @OkClick));
CancelButton.OnClick := TOnEvent(MakeMethod(NIL, @CancelClick));
OkButton.Visible := True;
CancelButton.Visible := True;
Applet.Enabled := False;
Result := Dialog.ShowModal = 1;
Applet.Enabled := True;
CancelButton.Free;
OkButton.Free;
Dialog.Free;
HWND(Addr(Applet.Handle)^) := W;
Applet.Free;
end;


  (2008-01-28 19:50:00) [1]

Удалено модератором


  (2008-01-28 13:53:00) [2]

Удалено модератором


  (2008-01-27 17:29:00) [3]

Удалено модератором


  (2008-01-16 21:45:00) [4]

Удалено модератором


  (2007-12-12 13:32:00) [5]

Удалено модератором


  (2007-12-12 06:42:00) [6]

Удалено модератором


  (2007-12-12 00:11:00) [7]

Удалено модератором


  (2007-12-12 00:11:00) [8]

Удалено модератором


Dawn-tn   (2007-11-27 07:08:00) [9]

Удалено модератором


  (2007-10-09 12:42:00) [10]

Удалено модератором


  (2007-10-03 10:21:00) [11]

Удалено модератором


  (2007-08-08 20:58:00) [12]

Удалено модератором


Vladimir Kladov   (2007-05-08 21:46:00) [13]

Внимательнее посмотрите. К контролам Add2Autofree как раз не применяется никогда.


Dmitry___   (2007-05-08 18:17:00) [14]

а, да... что-то я протормозил


AndreyRus   (2007-05-08 18:01:00) [15]

"KOLUnit1_1.inc" генерируется MCK!, а речь идет о коде который пишет программист.


Dmitry___   (2007-05-08 17:38:00) [16]


> Не надо делать вручную Add2Autofree к контролам.

Постойте. А как же в вашем демо в KOLUnit1_1.inc Add2Autofree применяется ко всем контролам. И ничего. Почему же тогда нельзя делать это вручную?


xasha666   (2007-05-07 14:04:00) [17]

Так вот. Чтобы не прибегать к подобным ухищрениям, нужно в КОЛ добавить функцию создания апплета на основе существующего окна. Было бы здорово.


Compiler   (2007-05-06 23:35:00) [18]

Когда-то тоже бился с этим. Получилось вроде этого:
var
 App:Pcontrol;
 wnd:HWND;
function OnShow( Sender:Pobj; var Msg: TMsg; var Rslt: Integer ): Boolean ;
begin
SetParent(App.Handle, wnd);
end;

Function SGAOptionsDialogExecute(Parent: HWND): Boolean;
Var
 Dialog,OkButton, CancelButton: PControl;
begin
wnd:=Parent;
app:=NewApplet('');
App.Visible:=False;
Dialog := NewForm(app, 'SGA Options');
Dialog.Width := 256;
Dialog.Height := 256;
Dialog.Left := (ScreenWidth - Dialog.Width) div 2;
Dialog.Top := (ScreenHeight - Dialog.Height) div 2;
Dialog.Style := WS_BORDER or WS_SYSMENU;
Dialog.ExStyle := WS_EX_TOOLWINDOW;
Dialog.Font.FontName := 'MS Sans Serif';
Dialog.Font.FontHeight := -11;
Dialog.Font.FontPitch := fpDefault;
Dialog.Font.FontStyle := [];
OkButton := NewButton(Dialog, 'OK').SetSize(70, 21);
OkButton.Style := OkButton.Style or  bs_center;
CancelButton := NewButton(Dialog, 'Cancel').SetSize(70, 21);
CancelButton.Style := CancelButton.Style or  bs_center;
OkButton.Left := (Dialog.Width - (OkButton.Width + 40 + CancelButton.Width)) div 2;
CancelButton.Left := OkButton.Left + OkButton.Width + 40;
OkButton.Top := Dialog.Height - 64;
CancelButton.Top := OkButton.Top;
//OkButton.OnClick := TOnEvent(MakeMethod(NIL, @OkClick));
//CancelButton.OnClick := TOnEvent(MakeMethod(NIL, @CancelClick));
Dialog.OnShow:=TOnEvent(MakeMethod(nil,@OnShow));
Dialog.Visible:=True;
Result := True;
Run(App);
end;

Может и смешно, но работает:)


xasha666   (2007-05-06 22:07:00) [19]

Так лучше и крестик стал работать, спасибо большое. :)
А вот мне интересно почему такой глюк был с этим крестиком?


Дмитрий К   (2007-05-06 21:55:00) [20]

А если написать
okbutton.Style := okbutton.Style orbs_center;
Cancelbutton.Style := Cancelbutton.Style orbs_center;
?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо