Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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 ? then


if 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
15-1238018281
Юрий
2009-03-26 00:58
2009.05.31
С днем рождения ! 26 марта 2009 четверг


15-1237592324
Kerk
2009-03-21 02:38
2009.05.31
Посоветуйте чего посмотреть


3-1221485321
Jeer
2008-09-15 17:28
2009.05.31
DBExpress.CleanupIntance;


15-1238431132
Хибл Герзмаев
2009-03-30 20:38
2009.05.31
Патч MS 08-067


9-1179831261
Jkot
2007-05-22 14:54
2009.05.31
Луч и треугольник.





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский