TFlowPanel und ScrollBy()

Rund um die LCL und andere Komponenten
Antworten
icho2099
Beiträge: 22
Registriert: Fr 21. Feb 2020, 19:17
OS, Lazarus, FPC: Win10/64
CPU-Target: 64 Bit
Wohnort: Osterholz-Scharmbeck

TFlowPanel und ScrollBy()

Beitrag von icho2099 »

Hallo,

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;            

Antworten