Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.12.12;
Скачать: CL | DM;

Вниз

Где найти модуль для модальных диалогов?   Найти похожие ветки 

 
Erik1 ©   (2004-10-29 11:44) [0]

В Delphi при создании модальных диалогов на самом деле создается форма. В некоторых случиях могут быть неприятные последствия перекрытия этого диалога другой формой. Причем фокус ввода останется на диалоге. Кроме того нужно изменить надписи на кнопках, поэтому стандартный диалог windows неподходит. Мои возможные кнопки (mbOk, mbYes, mbNo, mbAbort, mbRetry, mbIgnore, mbCancel, mbHelp). Я пробовал пользоватся MessageBoxEx(...,LANG_ESTONIAN) но чтото незаработало. Поэтому хочу использовать WinApi модальный диалог.


 
clickmaker ©   (2004-10-29 12:04) [1]

DialogBox()


 
Erik1 ©   (2004-10-29 12:46) [2]

А какже ресуры, цикл очереди сообщений и WindowProc? Наверника придется время подратить пока отладиш, а если учесть что кнопочки цинтровать надо... Я на для UI на чистом API никогда неписал, думаю наверника есть готовый модуль, челую библиотеку ради одного диалога скачивать нехочится.


 
clickmaker ©   (2004-10-29 13:03) [3]


> Я на для UI на чистом API никогда неписал, думаю наверника
> есть готовый модуль

Чистый апи на то и чистый, что там нет готовых модулей. Все ручками


 
Erik1 ©   (2004-10-29 14:58) [4]

А вот и нет, на C++ я уже нашол "универсальное диалоговое окно" http://rsdn.ru/article/ui/custombox.xml
Теперь надо на Delphi переделать, что ниукого примера нешащлось?


 
Erik1 ©   (2004-10-29 16:35) [5]

Как создать 32bit ресурсный фаил? Мнебы просто пример ресурса для диалогового окна с 6 кнопкам.


 
Ученик   (2004-10-30 22:43) [6]

Замена текста на кнопках стандартного MessageBox :-)


var
 hHook : THandle = 0;

procedure ChangeButtonCaption(Dialog : HWnd; ControlID : Integer;
                             const Caption : string);
begin
 SetWindowText(GetDlgItem(Dialog, ControlID), PChar(Caption))
end;

function ChangeCaptionsProc(nCode  : Integer;
                   wParam : WPARAM;
                   lParam : LPARAM) : LRESULT; stdcall;
begin
 Result := CallNextHookEx(hHook, nCode, wParam, lParam);
 if nCode = HCBT_ACTIVATE then begin
   ChangeButtonCaption(wParam, IDYES,    "Да");
   ChangeButtonCaption(wParam, IDNO,     "Нет");
   ChangeButtonCaption(wParam, IDCANCEL, "Отмена");
   UnhookWindowsHookEx(hHook)
 end
end;

function MessageBoxRus(hWnd: HWND; lpText, lpCaption: PChar; uType: UINT): Integer;
begin
 hHook := SetWindowsHookEx(WH_CBT, @ChangeCaptionsProc, hInstance, GetCurrentThreadID);
 Result := MessageBox(hWnd, lpText, lpCaption, uType);
end;



 
Игорь Шевченко ©   (2004-10-30 23:04) [7]

Ученик   (30.10.04 22:43) [6]

А я форму честно сделал в свое время. Которая по CreateMessageDialog из dialogs.pas создается :)


 
GuAV ©   (2004-10-30 23:41) [8]

Игорь Шевченко ©   (30.10.04 23:04) [7]
А я форму честно сделал в свое время. Которая по CreateMessageDialog из dialogs.pas создается :)


Так там Ваш код ? :)


 
Игорь Шевченко ©   (2004-10-31 00:13) [9]

GuAV ©   (30.10.04 23:41) [8]

>
> Так там Ваш код ? :)


Нет, я примерно такой код писал :)


const
 SMsgDlgYes      = "Да";
 SMsgDlgNo       = "Нет";

function hs_MessageDlgPos(const Msg: string; DlgType: TMsgDlgType;
 Buttons: TMsgDlgButtons; HelpCtx: Longint): Integer;
begin
 with CreateMessageDialog(Msg, DlgType, Buttons) do
   try
     Caption := Application.Title;
     HelpContext := HelpCtx;
     Position := poMainFormCenter;
     (FindComponent("Yes") as TButton).Caption:=SMsgDlgYes;
     (FindComponent("No") as TButton).Caption:=SMsgDlgNo;
     Result := ShowModal;
   finally
     Free;
   end;
end;


 
GuAV ©   (2004-10-31 00:20) [10]

А смысл ? не легче ли было вызвать Application.MessageBox или исправить ресурсы ?


 
Игорь Шевченко ©   (2004-10-31 13:29) [11]

GuAV ©   (31.10.04 00:20) [10]

Не легче. Application.MessageBox, равно, как и Windows.MessageBox еще и звук играет, а мне это не требуется.


>  или исправить ресурсы ?


А это еще нафига ?


 
Игорь Шевченко ©   (2004-10-31 13:30) [12]

Забыл добавить: MessageBox показывает надписи на кнопках в соответствии с конкретной локализацией Windows, а у меня стояла задача, чтобы надписи показывались на русском вне зависимости от локализации Windows.


 
GuAV ©   (2004-10-31 13:41) [13]

понял.


 
Erik1 ©   (2004-11-01 10:34) [14]

to Ученик
Большое спасибо, в принципе я даже нидел пример на C++, но думал что затраты на написание будут больше. А получилось очень просто!


 
Erik1 ©   (2004-11-01 10:39) [15]

Удалено модератором
Примечание: Дубль



Страницы: 1 вся ветка

Текущий архив: 2004.12.12;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.024 c
14-1100948044
Progh
2004-11-20 13:54
2004.12.12
Подскажите ХОРОШУЮ статью перехвата WIN API с примерами на Delphi


14-1100753467
Megabyte-CeerCop
2004-11-18 07:51
2004.12.12
Зацените кто не видел. Написано на Delphi.


3-1100174069
Layner
2004-11-11 14:54
2004.12.12
При вставке новой строки в DBGrid, при переходе на рядом


1-1101745712
Islander
2004-11-29 19:28
2004.12.12
Как вытащить определенную иконку из ICO-файла?


1-1101368057
Дядя
2004-11-25 10:34
2004.12.12
TwordApplication для разных версий Worda