![]() |
Zur Laufzeit Bild in einem Stringgrid Ändern
Hallo, ich habe volgenes Problem, ich möchte ein Bild zur Laufzeit Ändern Lassen...
Die Bilder werden Volgendermaßen im Stringgrid Gezeichnet
Delphi-Quellcode:
Nun möchte ich bei einem Bestimmten Ereignis, das diese Procedure noch einmal durchläuft....
procedure Tstandart_frame_form.BuddyListDrawCell(Sender: TObject; ACol,
ARow: Integer; Rect: TRect; State: TGridDrawState); var Value_Split: TExplode_Array; begin // Bilder zeichnen setlength(Value_Split,length(Explode('<n|#|p>', my_buddies[ARow]))); Value_Split:= Explode('<n|#|p>', my_buddies[ARow]); if Acol = 0 then begin if Value_Split[2] = 'OFFLINE' then BuddyList.Canvas.Draw(Rect.Left+4,Rect.Top+2,offline_pic.Picture.Bitmap) else if Value_Split[2] = 'Abwesend' then BuddyList.Canvas.Draw(Rect.Left+4,Rect.Top+2,abwesend_pic.Picture.Bitmap) else if Value_Split[2] = 'Versteckt' then BuddyList.Canvas.Draw(Rect.Left+4,Rect.Top+2,offline_pic.Picture.Bitmap) else BuddyList.Canvas.Draw(Rect.Left+4,Rect.Top+2,online_pic.Picture.Bitmap); end; // Ende Bilder zeichnen end; nur weiß ich nicht wie ich es Bewerkstelligen soll. da diese Procedure ja viele werte hat oder kann mir jemand sagen, wie ich einfach nur ein bild in einer bestimmten Zelle zur laufzeit ändern kann, ohne das alles durchläuft. MfG Real_Thunder |
Re: Zur Laufzeit Bild in einem Stringgrid Ändern
Hallo Real_Thunder,
vielleicht hilft dir der folgende Code:
Delphi-Quellcode:
Mit der Prozedur kannst du eine beliebige Zelle eines Grids aktualisieren lassen.
procedure InvalidateGridCell (aGrid: TDrawGrid; aCol, aRow: Integer);
var lRect: TRect; begin if Assigned(aGrid) then begin lRect := aGrid.CellRect(aCol, aRow); if not IsRectEmpty(lRect) then InvalidateRect(aGrid.Handle, @lRect, False); end; end; Gruß Hawkeye |
Re: Zur Laufzeit Bild in einem Stringgrid Ändern
Noch ein paar Anregungen:
Eventuell ist auch bei euch die Methode InvalidateCell() implementiert? Die Images würde ich in einer ImageList vorhalten und die Buddies in einer TObjectList:
Delphi-Quellcode:
Freundliche Grüße vom marabu
type
TBuddyStatus = (bsUndefined, bsOffline, bsHidden, bsAbsent, bsOnline); TBuddy = class Nick: String; Status: TBuddyStatus; end; procedure TDemoForm.StringGridDrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); var Buddy: TBuddy; iLeft, iTop: Integer; bm: TBitmap; begin with Sender as TStringGrid do begin Buddy := BuddyList[ARow] as TBuddy; if ACol = 0 then begin iLeft := Rect.Left + 4; iTop := Rect.Top + 2; ImageList.GetBitmap(Ord(Buddy.Status), bm); Canvas.Draw(iLeft, iTop, bm); end; end; end; |
Re: Zur Laufzeit Bild in einem Stringgrid Ändern
Zitat:
Gruß Hawkeye |
Re: Zur Laufzeit Bild in einem Stringgrid Ändern
Könntest du mir die Procedur erklären ? was mit welchem befehl Gemeint ist ?
ich Steige da nicht richtig durch, und nur copy und paste, und ein wenig ändern, möchte ich nciht, da dies den lerneffect behindert Bin erst seit ca einem Monat mit Delphi am programmieren, und kenne bei weitem noch nicht alle Funktionen etc... |
Re: Zur Laufzeit Bild in einem Stringgrid Ändern
Zitat:
Wie Spreche ich die Procedure an ? also TDraw Grid, was muß ich übergeben ? also quasi
Delphi-Quellcode:
InvalidateGridCell ( ?????, 0, 0);
|
Re: Zur Laufzeit Bild in einem Stringgrid Ändern
So habe es nun soweit das er das Bild Ändert, nur sobald die procedure durch ist, geht das bild wieder in den Standart
habe es so gemacht:
Delphi-Quellcode:
procedure TStandart_frame_form.InvalidateGridCell (aGrid: TDrawGrid; aCol, aRow: Integer);
var lRect: TRect; Value_Split: TExplode_Array; begin if Assigned(aGrid) then begin lRect := aGrid.CellRect(aCol, aRow); if not IsRectEmpty(lRect) then begin InvalidateRect(aGrid.Handle, @lRect, False); BuddyList.Canvas.Draw(lRect.Left+4,lRect.Top+2,abwesend_pic.Picture.Bitmap); sleep(1000); // Um zu Sehen, das sich überhaupt was tut. end; end; end; procedure Tstandart_frame_form.Button1Click(Sender: TObject); begin InvalidateGridCell (Buddylist, 0, 0); end; |
Re: Zur Laufzeit Bild in einem Stringgrid Ändern
OK
danke für die Hilfe, hat geplappt, ich denke zwar das es nicht die sauberste lösung ist, was ich gemacht habe, aber besser als nichts ;) |
Re: Zur Laufzeit Bild in einem Stringgrid Ändern
Du störst den Ablauf der Dinge. Die Informationen, welche festlegen, was in deinem Grid angezeigt werden soll, befinden sich doch in deiner Buddy-Liste (my_buddies). Die Ausgabe der korrekten Daten und Bilder erledigt OnDrawCell(). Beim Drücken von Button1 musst du also die Daten wie gewünscht abändern und dann die Routine von Hawkeye aufrufen. Der Aufruf der Methode Draw() in InvalidateGridCell() muss weg.
Grüße vom marabu |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:25 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 by Thomas Breitkreuz