AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Zur Laufzeit Bild in einem Stringgrid Ändern

Ein Thema von Real_Thunder · begonnen am 30. Mai 2006 · letzter Beitrag vom 31. Mai 2006
Antwort Antwort
Real_Thunder

Registriert seit: 25. Apr 2006
197 Beiträge
 
#1

Zur Laufzeit Bild in einem Stringgrid Ändern

  Alt 30. Mai 2006, 18:39
Hallo, ich habe volgenes Problem, ich möchte ein Bild zur Laufzeit Ändern Lassen...

Die Bilder werden Volgendermaßen im Stringgrid Gezeichnet

Delphi-Quellcode:
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] = 'OFFLINEthen BuddyList.Canvas.Draw(Rect.Left+4,Rect.Top+2,offline_pic.Picture.Bitmap)
    else if Value_Split[2] = 'Abwesendthen BuddyList.Canvas.Draw(Rect.Left+4,Rect.Top+2,abwesend_pic.Picture.Bitmap)
    else if Value_Split[2] = 'Verstecktthen 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;
Nun möchte ich bei einem Bestimmten Ereignis, das diese Procedure noch einmal durchläuft....
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
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#2

Re: Zur Laufzeit Bild in einem Stringgrid Ändern

  Alt 30. Mai 2006, 19:39
Hallo Real_Thunder,

vielleicht hilft dir der folgende Code:

Delphi-Quellcode:
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;
Mit der Prozedur kannst du eine beliebige Zelle eines Grids aktualisieren lassen.

Gruß Hawkeye
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#3

Re: Zur Laufzeit Bild in einem Stringgrid Ändern

  Alt 30. Mai 2006, 19:50
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:
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;
Freundliche Grüße vom marabu
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#4

Re: Zur Laufzeit Bild in einem Stringgrid Ändern

  Alt 30. Mai 2006, 20:20
Zitat von marabu:
Eventuell ist auch bei euch die Methode InvalidateCell() implementiert?
Das war auch mein erster Gedanke. Leider steht die Methode im protected-Bereich, damit ist sie nur über einen "class hack" zu erreichen (überprüft bei D6 und D2006).

Gruß Hawkeye
  Mit Zitat antworten Zitat
Real_Thunder

Registriert seit: 25. Apr 2006
197 Beiträge
 
#5

Re: Zur Laufzeit Bild in einem Stringgrid Ändern

  Alt 31. Mai 2006, 00:22
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...
  Mit Zitat antworten Zitat
Real_Thunder

Registriert seit: 25. Apr 2006
197 Beiträge
 
#6

Re: Zur Laufzeit Bild in einem Stringgrid Ändern

  Alt 31. Mai 2006, 00:37
Zitat von Hawkeye219:
procedure InvalidateGridCell (aGrid: TDrawGrid; aCol, aRow: Integer);

Wie Spreche ich die Procedure an ? also TDraw Grid, was muß ich übergeben ?

also quasi
InvalidateGridCell ( ?????, 0, 0);
  Mit Zitat antworten Zitat
Real_Thunder

Registriert seit: 25. Apr 2006
197 Beiträge
 
#7

Re: Zur Laufzeit Bild in einem Stringgrid Ändern

  Alt 31. Mai 2006, 01:02
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;
  Mit Zitat antworten Zitat
Real_Thunder

Registriert seit: 25. Apr 2006
197 Beiträge
 
#8

Re: Zur Laufzeit Bild in einem Stringgrid Ändern

  Alt 31. Mai 2006, 02:59
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
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#9

Re: Zur Laufzeit Bild in einem Stringgrid Ändern

  Alt 31. Mai 2006, 07:01
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
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:13 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz