Главная страница
    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.004 c
6-1203404629
stupido
2008-02-19 10:03
2009.05.31
Apache shared module


2-1239869866
CodeMaster
2009-04-16 12:17
2009.05.31
Winamp - Visual API


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


8-1194612023
NaRuTo
2007-11-09 15:40
2009.05.31
Как реализовать спектральный анализатор!


4-1210534264
Игорь
2008-05-11 23:31
2009.05.31
Как в Windows Vista программно уменьшить громкость





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