Форум: "Начинающим";
Текущий архив: 2009.05.31;
Скачать: [xml.tar.bz2];
ВнизРаспознавание Sender Найти похожие ветки
← →
mnj (2009-04-14 13:35) [0]Не могу найти как распознать посыльщика события, знаю, что есть в недрах, но не могу найти
Мне нужно узнать какой из визуальных элементов на форме получил клик мыши:
procedure TfmMain.FormMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if Sender ? then
begin
.....
end;
end;
← →
Palladin © (2009-04-14 13:39) [1]With (Sender as TComponent) Do
ShowMessage(Name+":"+ClassName);
← →
Ega23 © (2009-04-14 13:47) [2]
> if Sender ? thenif Sender is TButton then
begin
if TButton(Sender)=Button1 then
begin
end
else
.......
end
else
....
← →
Игорь Шевченко © (2009-04-14 14:45) [3]
> procedure TfmMain.FormMouseUp(Sender: TObject; Button: TMouseButton;
>
> Shift: TShiftState; X, Y: Integer);
у этой процедуры sender-ом будет скорее всего fmMain
← →
Анна (2009-04-14 15:22) [4]
> Игорь Шевченко © (14.04.09 14:45) [3]
не скорее всего, а именно только fmMain и будет sender-ом
← →
Palladin © (2009-04-14 15:25) [5]
> Анна (14.04.09 15:22) [4]
ух ты какие мы умные нарисовались :)procedure TForm1.FormCreate(Sender: TObject);
begin
Button1.OnMouseUp:=FormMouseUp;
end;
или ты никогда стрелочку вниз не нажимало при назначении события компонентам? :)
← →
Kolan © (2009-04-14 15:26) [6]Анна, таки скорее всего...
begin
FormMouseUp(NotAfmMainObject, Button1, Shift, 100, 200);
end
← →
Игорь Шевченко © (2009-04-14 15:37) [7]
> не скорее всего, а именно только fmMain и будет sender-ом
нет, не только, но чаще всего именно fmMain
← →
Анна (2009-04-14 16:26) [8]
> Palladin © (14.04.09 15:25) [5]
Да ладно Вам.... Ошиблась. Наверное просто захотелось с кем-то словом перекинуться. Снег за окном валит не перставая сплошной стеной.
← →
mnj (2009-04-14 16:57) [9]Спасибо, но у меня все-таки случай сложнее: отлавливать Sender кнопок, созданных runtime (массив кнопок, расположенных внутри groupbox на панели). OnMouseUp или OnClick работает только на незанятом кнопками или другим дочерним компонентом пространстве формы и senderом объявляет себя. То же самое происходит и с панелью. Но мне нужно знать, какая в ней кнопка нажата.
результат пока никакой...
← →
Игорь Шевченко © (2009-04-14 16:59) [10]
> Спасибо, но у меня все-таки случай сложнее: отлавливать
> Sender кнопок, созданных runtime (массив кнопок, расположенных
> внутри groupbox на панели). OnMouseUp или OnClick работает
> только на незанятом кнопками или другим дочерним компонентом
> пространстве формы и senderом объявляет себя.
А можно немного пояснить ? А то не совсем понятно, что же все таки надо
← →
mnj (2009-04-14 23:30) [11]Спасибо за наводки, я уже нашел свою оплошность (не было присваивания процедуры клика при создании экземпляра кнопки). А отлов sender - все получилось хорошо.
← →
12 © (2009-04-15 09:13) [12]может так еще подойдет? не rtti, конечно
просто вел лог, а то звонят, говорят что программа не того, а я такого повторить не могу, а спрашиваешь что делали - толком ничего не говорят
procedure TfrmMain.ApplicationEvents1Message(var Msg: tagMSG; var Handled: Boolean);
var
PA:array[1..255] of char;
hwnd:tHandle;
s:string;
// i:integer;
// fMessage: TActionList2;
// Q:TdxFloatForm;
begin
{$IFDEF INLOG}
case MSG.message of
WM_LBUTTONDOWN,WM_RBUTTONDOWN:
begin
GetWindowText(GetForegroundWindow,@PA,255);
WriteToLog(\\\"Верхнее окно текст \\\"+strpas(pansichar(@PA)));
GetClassName(msg.hwnd,@PA,255);
s:=\\\"Клик по окну класса: \\\"+strpas(pansichar(@PA));
GetWindowText(MSG.hwnd,@PA,255);
s:=s+\\\"(текст: \\\"+strpas(pansichar(@PA))+\\\")<BR>\\\";
hwnd:=MSG.hwnd;
while (GetParent(hwnd)<>0) do begin
hwnd:=GetParent(hwnd);
if GetWindowTextLength(hwnd)>1
then begin
GetClassName(hwnd,@PA,255);
s:=s+\\\" подокно класса: \\\"+strpas(pansichar(@PA));
GetWindowText(hwnd,@PA,255);
s:=s+\\\"(текст: \\\"+strpas(pansichar(@PA))+\\\")<BR>\\\";
end;
end;
// GetWindowModuleFileName(msg.hwnd,@PA,255);
// s:=s+\\\" \\\"+ExtractFileName(strpas(pansichar(@PA)));
WriteToLog(s);
end;
WM_CHAR:
begin
GetWindowText(GetForegroundWindow,@PA,255);
WriteToLog(\\\"Верхнее окно текст \\\"+strpas(pansichar(@PA)));
GetClassName(msg.hwnd,@PA,255);
s:=\\\"Нажали кнопку \\\"\\\"+chr(msg.wParam)+\\\"\\\" в окне класса: \\\"+strpas(pansichar(@PA));
GetWindowText(MSG.hwnd,@PA,255);
s:=s+\\\"(текст: \\\"+strpas(pansichar(@PA))+\\\")<BR>\\\";
hwnd:=MSG.hwnd;
while (GetParent(hwnd)<>0) do
begin
hwnd:=GetParent(hwnd);
if GetWindowTextLength(hwnd)>1 then
begin
GetClassName(hwnd,@PA,255);
s:=s+\\\" подокно класса: \\\"+strpas(pansichar(@PA));
GetWindowText(hwnd,@PA,255);
s:=s+\\\"(текст: \\\"+strpas(pansichar(@PA))+\\\")<BR>\\\";
end;
end;
// GetWindowModuleFileName(msg.hwnd,@PA,255);
// s:=s+\\\" \\\"+ExtractFileName(strpas(pansichar(@PA)));
WriteToLog(s);
end;
end; // case MSG.message of
{$ENDIF}
end;
← →
Palladin © (2009-04-15 09:22) [13]прям, найди 10 различий
← →
Игорь Шевченко © (2009-04-15 11:19) [14]12 © (15.04.09 09:13) [12]
Пеши исчо
← →
12 © (2009-04-15 12:19) [15]не, ну чего вы сразу
написал на скорую руку, дабы воспроизвести действия..
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2009.05.31;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.032 c