Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2005.12.18;
Скачать: [xml.tar.bz2];

Вниз

MessageBox   Найти похожие ветки 

 
MakNik   (2005-12-02 11:28) [0]

Подскажите, пожалуйста, как отличить нажатие кнопки ОК в MessageBox от нажатия кнопки ОК с удерживанием при этом клавиши Alt или Ctrl или Shift  или любой другой клавиши?


 
ANB ©   (2005-12-02 12:18) [1]


> MakNik   (02.12.05 11:28)

А как ты вообще отличаешь, что это кнопка нажималась ?
Окно не твое - ничего ты в нем не сделаешь. Нарисуй свой MessageBox и в нем проверяй, что тебе надо.


 
han_malign ©   (2005-12-02 12:53) [2]

только по состоянию кнопки после выхода из диалога:
mres:= MessageBox(...);
if((mres = ID_OK)and(GetKeyState(VK_LSHIFT) and $8000 <> 0))then ...


 
han_malign ©   (2005-12-02 12:55) [3]

или, то-же самое - Application.KeyState


 
MakNik   (2005-12-02 15:11) [4]

Спасибо, работает... это то что нужно... но хотелось бы автоматизировать процесс... т.к. во всем приложении есть много MessageBox чтобы не переписовать всех их... подскажите еще, плз., как переопределить событие нажатия на кнопки MessageBox так, чтобы во всем приложении при вызове ф-ции MessageBox и нажатии на ОК (с удержанием при этом нажатой кнопки Shift) выполнялось определенное действие??


 
DiamondShark ©   (2005-12-02 15:32) [5]

Извиняюсь за оффтопик, но "просто интересно" (ц)
а на какого лешего понадобилось столь свежее интерфейсное решение?


 
han_malign ©   (2005-12-02 16:01) [6]


> Извиняюсь за оффтопик, но "просто интересно" (ц)

- обычная закладка(пасхальное яйцо)...


> подскажите еще, плз., как переопределить событие нажатия на кнопки

- не нужно ничего переопределять(да и не получится), делаешь функциональную обертку и везде используешь ее вместо MessageBox...

Примерно так:
unit MBShift;
interface
uses Windows;
const ID_LSHIFT_OK = $8000 + ID_OK;
function MessageBox(hWnd: HWND; lpText, lpCaption: PChar; uType: UINT): integer;
implementation
function MessageBox(hWnd: HWND; lpText, lpCaption: PChar; uType: UINT): integer;
begin
    Result:= Windows.MessageBox(hWnd, lpText, lpCaption, uType);
    if((Result = ID_OK)and(GetKeyState(VK_LSHIFT) and $8000 <> 0))then ...
end;
end.


При этом достаточно чтобы в uses - MBShift был после Windows.
Хотя этот пример не очень корректен, т.к. может привести к путаннице где какая функция используется и лучше ввести другое имя функции, например ShiftMessageBox.


 
MakNik   (2005-12-02 16:06) [7]

Это типа "дыры" для админа... в системе есть места, которые ограничены бизнеслогикой... в процессе работы под определенным пользователем возникает момент когда пользователю не хватает прав на выполнение определенного действия. В этот момент необходимо прервать работу диалога и вызвать окно изменения пользователя (или ввода пароля для выполнения определенного действия). .... в общем все запутано и запущенно... "это нельзя понять, это нужно запомнить" (С) ;) ... в общем теперь, когда этот вопрос назрел окончательно, уж больно лень переделывать все вызовы MessageBox для вставки туда проверки на удерживание клавиши... вот и хочется, если это возможно, переопределить событие нажатия на кнопки в MessageBox...


 
han_malign ©   (2005-12-02 16:13) [8]


> переопределить событие нажатия на кнопки в MessageBox...

- Windows в Uses обычно идет первым, если есть "твой" модуль который подключается во всех модулях, делаешь там как написано выше - чем перекрываешь область видимости Windows.MessageBox - и "Вот оно, счастье..."(с)


 
Leonid Troyanovsky ©   (2005-12-02 17:48) [9]


> MakNik   (02.12.05 16:06) [7]

> клавиши... вот и хочется, если это возможно, переопределить
> событие нажатия на кнопки в MessageBox...


На собственный поток ставится хук WH_CALLWNDPROC, в котором
отлавливается WM_DESTROY, и если оно пришло от окна класса #32770,
то, это был диалог. Там и можно определить состояние нажатых клавиш,
как было описано ранее.

--
Regards, LVT.



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

Форум: "Начинающим";
Текущий архив: 2005.12.18;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.014 c
14-1133048630
Fl@sh
2005-11-27 02:43
2005.12.18
PIC контроллеры + литература


1-1132748742
Mitchy
2005-11-23 15:25
2005.12.18
Как программно установить позицию ToolBar?


6-1125919503
ДимДимыч
2005-09-05 15:25
2005.12.18
TIdTCPServer &amp; TIdTCPClient <OnDisconnect>


2-1132956257
Gala_l
2005-11-26 01:04
2005.12.18
Naity simvol v faile


14-1132970523
Юрий Зотов
2005-11-26 05:02
2005.12.18
Просматривая...





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский