Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - dynamisch erstellte Komponente beim Scrollen neuzeichnen


J.Borchert - Mo 26.09.11 17:53
Titel: dynamisch erstellte Komponente beim Scrollen neuzeichnen
Ich erstelle zur Laufzeit einige Panele auf einem StringGrid. Das klappt soweit ohne Probleme. Wenn ich jetzt an dem StringGrid scrolle, kommt die ganze Ansicht vollkommen durcheinander. Es handelt sich um einen Kalender, auf dem Informationen liegen. Pro Bildschirm ist etwa ein Monat sichtbar, deshalb möchte ich also scrollen.

Was muß ich tun, damit die Panele an ihrer originalen Stelle bleiben bzw. mitscrollen.
(also fest am StringGrid kleben ;-)


Martok - Di 27.09.11 01:21

Ich nehme an, du platzierst die Panels in den passenden CellRects?

Das Grid löst beim Scrollen das Ereignis OnTopLeftChanged aus, da kannst du dann die neuen Positionen ermitteln/setzen.

user profile iconJ.Borchert hat folgendes geschrieben Zum zitierten Posting springen:
Was muß ich tun, damit die Panele an ihrer originalen Stelle bleiben bzw. mitscrollen.
(also fest am StringGrid kleben ;-)
Das tun sie ja. Du willst, dass sie sich bewegen, nicht, dass sie kleben :P


J.Borchert - Di 27.09.11 20:26

Ja das habe ich versucht:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
procedure TForm1.sg4TopLeftChanged(Sender: TObject);
var i:integer; r:TRect;
begin
 for i:=1 to BitBtn77.Tag do // Anzahl der erstellten Panele
  begin r := sg4.CellRect( TPanel(sg4.FindComponent('pan'+IntToStr(i))).Tag,
                           TPanel(sg4.FindComponent('pank1'+IntToStr(i))).Tag );
        // in den Tags werden Original-Zellkoordinaten gespeichert
   with TPanel(sg4.FindComponent('pan'+IntToStr(i))) do
    begin Left := r.Left; Top := r.Top; end;
  end;
 sg4h.LeftCol:=sg4.LeftCol; // scrollen vom Header-Grid synchron
end;


Die Procedure arbeitet nicht so, wie es soll. Fehlt noch etwas ?