Einzelnen Beitrag anzeigen

I.A

Registriert seit: 14. Jan 2007
83 Beiträge
 
#17

Re: RTTI - Typinformation kommt nicht am Ziel an

  Alt 21. Mär 2009, 00:58
Hallo,

leider muss ich Euch noch mal nerven.

Wenn ich die Eigenschaft

ActiveControl von Form1

des Formdesigners aus dem DemoSizeCtrl Projekt vom User _frank_ im Objektinspektor einstelle, klappt alles wie gewünscht.

Aber wenn ich ActiveControl durch Klicken in die Komponente finden will, klappt es nicht mehr.

Nach meinem Verständnis musste es so aussehen:
Delphi-Quellcode:
procedure TForm1.SizeCtrlMouseDown(Sender: TObject;
  Target: TControl; TargetPt: TPoint; var handled: boolean);
var
  i: integer;
begin
  //When clicking the PageControl, it's kind of nice to be able to change pages.
  //So, let's see if a new page needs to be displayed ...

  //##### Diese Zeile habe ich eigefügt #####
  ActiveControl := TWinControl( SizeCtrl.TargetCtrlFromPt(TargetPt) );

  if (Target is TPageControl) then
    with TPageControl(Target) do
    begin

      //We need the PageIndex of the tab being clicked. The following line
      //is fine in Delphi 7 but isn't available with older compilers ...
      // with TargetPt do i := PageControl1.IndexOfTabAt(X, Y);
      //Therefore, this is my workaround which works back to Delphi 3 ...
      with TargetPt do i := My_IndexOfTabAt(TPageControl(Target), X, Y);

      if (i >= 0) and ( ActivePage.PageIndex <> i) then
      begin
        //since further mouse handling stuff is not required ...
        handled := true;
        //Unregister from SizeCtrl all controls on the current page ...
        UnregComponents(PageControl1, SizeCtrl);
        //select the new page ...
        ActivePage := Pages[i];
        //finally, register controls on the new page...
        RegComponents(PageControl1, SizeCtrl);
      end;
    end;
end;
Habe soeben in TSizeCtrl.DoWindowProc folgendes gefunden. Werde als nächstes hier erweitern:

Delphi-Quellcode:
case Msg.Msg of
          WM_LBUTTONDOWN: PostMouseDownMessage(true, ssShift in ShiftState);

//ich werde das hier versuchen:
case Msg.Msg of
          WM_LBUTTONDOWN:
              begin
                CurrentControl := regCtrl; //was ich im OI sehen will
                PostMouseDownMessage(true, ssShift in ShiftState);
              end;
Fall das nicht klappt, frag ich mal, an welcher Stelle im Message Record vom Typ TMessage das gesuchte Control zu finden ist?

Das Musste ich ja denn anstelle von regCtrl zuweisen können.
  Mit Zitat antworten Zitat