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

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.015 c
14-1133154091
Antonn
2005-11-28 08:01
2005.12.18
Поздравьте меня, у меня сестренка родилась!


1-1132672356
DelphiLexx
2005-11-22 18:12
2005.12.18
Изменить высоту Canvas a


14-1133005560
Хинт
2005-11-26 14:46
2005.12.18
P-Cad и K155


1-1132560985
GenieTM
2005-11-21 11:16
2005.12.18
Как получить текст из TDateTimePicker ( но не через DateTime!!)


1-1131827370
Manufel
2005-11-12 23:29
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский