Autor Beitrag
polysign
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 37



BeitragVerfasst: Mo 21.11.05 18:47 
Hallo,

also ich hab folgendes realisiert: Ein StringGrid wird mit 2 Spalten initialisiert. Nun lade ich in die erste Spalte 30 Bilder und in die 2te Spalte den dazugehörigen Namen.

Das sieht dann folgendermassen aus:

|::::Spalte1:::: |::::Spalte2::::
|Bild1::::::::::: |Name des Bildes
|Bild2::::::::::: |Name des Bildes
.
.
.

Nun hab ich aber noch mit Hilfe von der Prozedur TextOut des TCanvas einen Text unter den "Namen des Bildes" geschrieben (Die grösse in Bytes). Das Problem hier ist nur das wenn ich mehr Reihen habe als es mir Anfangs angezeigt wird, und ich nach unten scrolle, darunter aber dieser TextOut nicht gemacht wird. Also wenn ich weiter runter Scrolle, dann steht dort wo die Grösse der Datei stehn soll, nicht da.

Jemand eine Idee wie ich es machen könnte, das der Text den ich mit TextOut zeichne, auch angezeigt wird wenn ich weiter runter Scrolle? Jemand eine Idee?

Danke

-poly
tgr
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 29

WIN 7, XP
D2010 Ent
BeitragVerfasst: Mo 21.11.05 19:11 
An welche Koordinaten gibst Du den Text aus?
polysign Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 37



BeitragVerfasst: Mo 21.11.05 19:59 
So:

ausblenden Delphi-Quelltext
1:
Canvas.TextOut(40,(ARow*38)+20,FileSizeBytes);					


Jede Zeile ist 38 Pixel hoch, und der Text kommt 40 Pixel von links gesehn stehn.
Das klappt ja auch ohne Probleme für alle Zeilen die angezeigt werden. Welche jedoch verborgen sind und man erst bis runter scrollen muss, bleiben leer wo FileSizeByte stehen kommen soll. Bilder werden aber richtig angezeigt.
tgr
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 29

WIN 7, XP
D2010 Ent
BeitragVerfasst: Mo 21.11.05 21:05 
Die Ausgabeposition muss immer relativ zum Zellrechtecks und nicht absolut ermittelt werden.
polysign Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 37



BeitragVerfasst: Di 22.11.05 00:02 
Du meinst also das sobald ich ein paar Zeilen nach unten Scrolle, meine erste Zeile die oberste, sichtbare Zeile ist?

Also wenn ich 2 Zeilen nach unten Scrolle, ist meine erste Zeile sozugagen die dritte?

Eine Idee wie ich es sonst lösen könnte? Also hab es so gemacht:

Hab ein Array von 1 bis 100. Für jeden Eintrag hab ich einen String mit dem Namen des Bildes. Soll ich dann am besten bei jedem OnDraw jede Zelle kucken was drin steht und dann durch das Array flitzen um den richtigen Eintrag zu finden?
polysign Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 37



BeitragVerfasst: Di 22.11.05 00:40 
Hi, hab hier noma mein Code um euch zu zeigen was nicht klappt ;)

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
  if ((ACol = 0AND (sgList.Cells[ACol+1,ARow] <> '')) then
    begin
      sgList.ColWidths[0] := 38;
      sgList.ColWidths[1] := 345;
      Tile := TImage.Create(Self);
      Tile.Picture.LoadFromFile(ExtractFileDir(Application.Exename)+'\Tiles\'+List[ARow+1].Name+'.bmp');
      sgList.Canvas.Draw(Rect.Left+3,Rect.Top+3, Tile.Picture.Bitmap);
      sgList.Canvas.TextRect(40,((ARow)*38)+20,List[ARow+1].Size)
    end;


Also den Draw für die Bilder klappen problemlos bis ans Ende der Liste. Auch wenn man weit runter scrollen muss. Nur das mit dem Textout klappt nicht. Da macht er die paar Einträge die sofort sichtbar sind sofort, aber nach scrollen geht nix mehr richtig. Dann fehlen die unteren Einträge oder kommen erst wieder wenn man die Zelle anklickt.

Gibt es da ne andere Möglichkeit um es anzustellen? Verzweifle bald ;)
tgr
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 29

WIN 7, XP
D2010 Ent
BeitragVerfasst: Di 22.11.05 11:17 
Das Bild wird von Dir relativ zum Zellen-Rechteck (Rect.Left+1,Rect.Top+3) ausgegeben!

-- sgList.Canvas.Draw(Rect.Left+3,Rect.Top+3, Tile.Picture.Bitmap);

Den Text gibst Du absolut aus (40,((ARow)*38)+20), das ist falsch!

-- sgList.Canvas.TextRect(40,((ARow)*38)+20,List[ARow+1].Size)


Der Text muss, wie das Bild, relativ ausgegeben werden, z.B. Rect.Left+10,Rect.Top+40.
polysign Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 37



BeitragVerfasst: Di 22.11.05 11:24 
Ok, Danke, ich werd es gleich mal testen. Sag dann bescheid ob es dann richtig geklappt hat.

Danke noma.

-poly