ich habe ein tFlowPanel FP1 und füge in dieses dynamisch tFrames ein. Die Frames haben alle die selbe Höhe und Breite.
Die Anordnung der Frames erfolgt in einer Spalte untereinander.
Wenn mehr Frames eingefügt werden als sichtbar Platz ist, erscheint ein vertikaler Scrollbar und man kann damit auch scrollen.
Soweit alles hübsch.
Nun muss aber ein bestimmtes Frame per Programm in den sichtbaren Bereich gescrollt werden. Ich dachte, dass das mit
ScrollBy() einfach zu machen wäre. Der Code läuft fehlerfrei, aber scrollen tut sich nichts. Das FlowPanel reagiert auf ScrollBy() schlicht nicht.
Hat jemand dazu einen Vorschlag?
Code: Alles auswählen
Procedure tFrmMain.OnPIChanged(Sender : tFrameMyJob);
Var GUID : String;
i : Integer;
FR : tFrameMyJob;
dy : Integer; //Scrollhöhe in Pixel
begin
GUID := Sender.MyJob.MyPI.PlanGUID;
ShowJobList; //erzeugt die Frames und bildet sie im FlowPanel ab.
//versuchen inView zu scrollen.... Früher gab es mal so etwas wie ScrollInView...
//Die Frames sind jetzt alle neu, Sender können wir nicht mehr benutzen
//welches Frame enthält jetzt die GUID ?
dy := 0;
For i := 0 to FP1.ControlCount-1 do begin
If FP1.Controls[i] IS tFrameMyJob then begin
FR := tFrameMyJob(FP1.Controls[i]);
//hat dieses Frame die GUID ???
If FR.MyJob.MyPI.PlanGUID = GUID then begin
//das ist er, den müssen wir nach oben scrollen
FP1.ScrollBy(0 , dy);
Exit;
end;
//Scrollhöhe um Frame-Höhe erhöhen
dy := dy + FR.Height;
end; //Frame ist vom richtigen Typ
end; //alle Frames
end;