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.