![]() |
Stringgrid mit Bildern scrollen
Hi,
ich habe Delphi XE5. Ich habe ein Stringgrid in dem ich in Column 1 Bilder anzeige (siehe Code). var e1bilder: array[1..99999] of string; var e1bildnum: integer; procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); var r: TRect; var u: integer; var t: string; begin if ((ARow = 0) and (ACol = 0)) then begin StringGrid1.RowHeights[ARow]:=32; end else begin if ((ARow > 0) and (ACol = 0)) then begin if ((e1bildnum > 0) and (ARow <= e1bildnum)) then begin t:=e1bilder[ARow]; u:=1; if t <> '' then begin try Image1.Picture.LoadFromFile(t); except u:=0; end; if u = 1 then begin r.Left:=0; r.Right:=Image1.Picture.Width-1; r.Top:=0; r.Bottom:=Image1.Picture.Height-1; Rect.Left:=0; Rect.Right:=Image1.Picture.Width-1; Rect.Top:=32+(ARow-1)*80+ARow; Rect.Bottom:=Rect.Top+Image1.Picture.Height-1; StringGrid1.Canvas.CopyRect(Rect, Image1.Canvas, r); end; end; end; end; end; end; Das klappt auch ganz gut. Nur wenn mehr Zeilen im Stringgrid sind, als auf dem Bildschirm passen, und ich nun nach unten scrolle dann sind die Bilder unterhalb des 1. Bildschimes weg. Hat da jemand eine Idee. Es gibt leider kein Ereignis "OnScroll". Danke und Gruß Jürgen |
AW: Stringgrid mit Bildern scrollen
Ich hab mir erlaubt das etwas lesbarer zu gestalten:
Delphi-Quellcode:
var e1bilder: array[1..99999] of string;
var e1bildnum: integer; procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); var r: TRect; var u: integer; var t: string; begin if ((ARow = 0) and (ACol = 0)) then begin StringGrid1.RowHeights[ARow]:=32; end else begin if ((ARow > 0) and (ACol = 0)) then begin if ((e1bildnum > 0) and (ARow <= e1bildnum)) then begin t:=e1bilder[ARow]; u:=1; if t <> '' then begin try Image1.Picture.LoadFromFile(t); except u:=0; end; if u = 1 then begin r.Left:=0; r.Right:=Image1.Picture.Width-1; r.Top:=0; r.Bottom:=Image1.Picture.Height-1; Rect.Left:=0; Rect.Right:=Image1.Picture.Width-1; Rect.Top:=32+(ARow-1)*80+ARow; Rect.Bottom:=Rect.Top+Image1.Picture.Height-1; StringGrid1.Canvas.CopyRect(Rect, Image1.Canvas, r); end; end; end; end; end; end; |
AW: Stringgrid mit Bildern scrollen
Frage ist eigentlich:
wie kriegt man raus ob gescrollt wurde und auf welche Position gescrollt wurde. Dann könnte ich in TForm1.StringGrid1DrawCell reagieren. |
AW: Stringgrid mit Bildern scrollen
Problem gelöst.
Neuer Code: procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); var r: TRect; var u: integer; var t: string; var n: integer; var m: integer; begin if ((ARow = 0) and (ACol = 0)) then begin StringGrid1.RowHeights[ARow]:=32; end else begin if ((ARow > 0) and (ACol = 0)) then begin if ((e1bildnum > 0) and (ARow <= e1bildnum)) then begin for n:=1 to e1bildnum do begin t:=e1bilder[n]; u:=1; if t <> '' then begin try Image1.Picture.LoadFromFile(t); except u:=0; end; if u = 1 then begin r.Left:=0; r.Right:=Image1.Picture.Width-1; r.Top:=0; r.Bottom:=Image1.Picture.Height-1; Rect.Left:=0; Rect.Right:=Image1.Picture.Width-1; m:=0; if StringGrid1.TopRow > 1 then begin m:=(StringGrid1.TopRow-1)*81; end; Rect.Top:=32+(n-1)*81-m; Rect.Bottom:=Rect.Top+Image1.Picture.Height-1; if Rect.Top < StringGrid1.Height then begin if Rect.Bottom > StringGrid1.Height then Rect.Bottom:=StringGrid1.Height; StringGrid1.Canvas.CopyRect(Rect, Image1.Canvas, r); end; end; end; end; end; end; end; end; |
AW: Stringgrid mit Bildern scrollen
Tipp: im Nachrichten Editor hier gibt's so einen goldene Helm Button.
Diese das nächste mal benutzen wenn du Code einfügen willst. Dann sieht dein Beitrag schon gleich lesbarer aus... Grüße TurboMagic |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:33 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz