![]() |
Re: bild in draw- oder stringgrid laden
OK
nur noch eins :oops: meine bilder bzw. icons sind alle in einem ordner wie bekomme ich sie jetzt in einer ImageList und kann ich damit (ImageList.Draw(StringGrid.Canvas,Rect.Left,Rect.T op,0);) die einzelnen zellen des stringgrids ansteuern? weil ich seh da nur eine zahl (0) oder ist schon die für das col :gruebel: |
Re: bild in draw- oder stringgrid laden
Hm, hab jetzt Delphi nicht mehr laufen.
Die ImageList hat mit Sicherheit eine Methode "LoadFromFile" >> gehe mit dem Cursor auf das TImageList und drücke F1, dann weiter in der Hilfe nachschauen. Die Methode "DrawGriddhDrawCell" wird für jede Zelle einzeln aufgerufen. Die Parameter ARow,ACol zeigen dir bei jedem Aufruf, welche Zelle gezeichnet werden soll. In Rect wird das rechteck der aktuell zu zeichnenden Zelle übergeben. Du bekommst also alle Informationen bereitgestellt. edit: So, jetzt erst einmal Gute Nacht! |
Re: bild in draw- oder stringgrid laden
also
ImageList1.Draw(DrawGriddi.Canvas,Rect.Left,Rect.T op,20); damit bekomme ich hin dass alle 36 felder mit dem 20. icon aus der imagelist ausgestattet werden for index:=0 to 36 do ImageList1.Draw(DrawGriddi.Canvas,Rect.Left,Rect.T op,index); nun werden alle felder mit dem 36 icon aus der imagelist versehen --> aber wie bekomme ich hin, dass feld[0] := icon0 ....... feld[36]:= icon36 :?: :?: oder stell ich mich einfach mal wieder zu dumm an ;) |
Re: bild in draw- oder stringgrid laden
gut nacht
bis morgen :hi: und THX schon mal |
Re: bild in draw- oder stringgrid laden
Moin, Moin dragonhunter!
Sehr schön, dann bist du ja jetzt einen Schritt weiter. Ich möchte folgende Aussage noch einmal wiederholen: Zitat:
Ansatz könnte sein:
Delphi-Quellcode:
Im obigen Beispiel würde der Index zeilenweise über alle Spalten "laufen", also z.B. so
var Idx : Integer;
//.. Idx:=ARow*DrawGrid1.ColCount+ACol; ImageList1.Draw(DrawGrid1.Canvas,Rect.Left,Rect.Top,Idx); //.. 0..3 4..7 8..11 |
Re: bild in draw- oder stringgrid laden
so...
ich habe noch bis gestern abend / heute früh um 2 uhr probiert :coder: und nun geht es :bounce2: vielleicht nicht sauber programmiert, aber für meine zwecke reicht es
Delphi-Quellcode:
und nun kann ich während das programm läuft noch die felder ermitteln und dei bilder / icons in ein image laden vergrößerte ansicht)
//------------DrawGridDesktopIcon DrawCell--------------------------------------
procedure TForm1.DrawGridDIDrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); var i: integer; begin for i:=0 to 36 do if ACol=i then ImageList1.Draw(DrawGriddi.Canvas,Rect.Left,Rect.Top,i); end; //-------------StringGridDesktopHintergrund DrawCell---------------------------- procedure TForm1.StringGridDHDrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); var Bild: TImage; FileProject: string; begin FileProject:=ExtractFilePath(Application.ExeName); case ACol of 0: begin Bild := Timage.Create(self); Bild.Picture.LoadFromFile(FileProject+'bilder\hintergrundbilder\hintergrund1.jpg'); StringGridDH.Canvas.StretchDraw(rect, bild.Picture.Graphic); end; 1: begin Bild := Timage.Create(self); Bild.Picture.LoadFromFile(FileProject+'bilder\hintergrundbilder\hintergrund2.jpg'); StringGridDH.Canvas.StretchDraw(rect, bild.Picture.Graphic); end; 2: begin Bild := Timage.Create(self); Bild.Picture.LoadFromFile(FileProject+'bilder\hintergrundbilder\hintergrund3.bmp'); StringGridDH.Canvas.StretchDraw(rect, bild.Picture.Graphic); end; end; end;
Delphi-Quellcode:
THX für deine hilfe, sonst wär ich noch nicht so weit :cheers:
//--------------Desktopicon auswählen-------------------------------------------
procedure TForm1.DesktopiconauswaehlenClick(Sender: TObject); var i: integer; FileProject: string; begin FileProject:=ExtractFilePath(Application.ExeName); for i:=0 to 36 do begin if DrawGridDI.Col=i then pfaddesicons.text:=FileProject+'bilder\icons\Icon'+inttostr(i)+'.ico'; end; iconvorschau.Picture.loadfromfile(pfaddesicons.text) end; //--------------Desktopicon auswählen------------------------------------------- procedure TForm1.DesktophintergrundauswaehlenClick(Sender: TObject); var FileProject: string; begin FileProject:=ExtractFilePath(Application.ExeName); case StringGridDH.Col of 0: pfaddesbildes.Text:=FileProject+'bilder\hintergrundbilder\hintergrund1.jpg'; 1: pfaddesbildes.Text:=FileProject+'bilder\hintergrundbilder\hintergrund2.jpg'; 2: pfaddesbildes.Text:=FileProject+'bilder\hintergrundbilder\hintergrund3.bmp'; end; vorschau.Picture.LoadFromFile(pfaddesbildes.Text); vorschauSch.Stretch:=true; end; |
Re: bild in draw- oder stringgrid laden
Delphi-Quellcode:
Bild := Timage.Create(self);
Bild.Picture.LoadFromFile('papa.jpg'); StringGrid1.Canvas.StretchDraw(rec ,bild.Picture.Graphic); Und wie bekomme ich jetzt das bild in eine bestimmte zelle des grid ? |
Re: bild in draw- oder stringgrid laden
genau das problem hab ich auch... wenn jdm ne hilfe weiß...
|
Re: bild in draw- oder stringgrid laden
Das Hauptproblem ist zu verstehen, wie das Bild überhaupt in das Grid gelangt.
taaktaak hat schon weiter oben versucht dies zu erklären. Das Bild wird nicht in das Grid geladen, denn das DrawGrid hat nicht die Möglichkeit Bilder oder überhaupt Daten zu verwalten. Zuerst benötigt man eine Liste die alle Bilder aufnimmt, die überhaupt angezeigt werden sollen. Dies kann zum Beispiel eine TImageList sein oder eine TObjectList. Hier ein kleines Beispiel mit TObjectList:
Delphi-Quellcode:
Dann benötigt man die Information, welches Bild in welcher Zelle angezeigt werden soll.
type
TForm1 = class(TForm) {...} private FBilder: TObjectList; procedure AddBild(AFilename: String); end; implementation procedure TForm1.FormCreate(Sender: TObject); begin {Die Bilderliste erzeugen} FBilder := TObjectList.Create; AddBild('Bild1.jpg'); AddBild('Bild2.jpg'); AddBild('Bild3.jpg'); {...} InitGrid; {wird gleich erklärt} end; procedure TForm1.FormDestroy(Sender: TObject); begin {Die Bilderliste und alle enthaltenen Bilder löschen} FBilder.Free; end; procedure TForm1.AddBild(AFilename: String); var Bild: TPicture; begin Bild := TPicture.Create; try Bild.LoadFromFile(AFilename); {die Liste übernimmt die Verwaltung der Bilder und ist für die Freigabe des Speichers verantwortlich, wenn diese nicht mehr benötigt werden} FBilder.Add(Bild); except Bild.Free; {... Fehlermeldung oder ähnliches} end; end; In diesem Beispiel in einem zweidimensional dynamischen Array abgebildet:
Delphi-Quellcode:
Im eigentlichen DrawCell wird von uns nur verlangt eine einzelne Zelle zu zeichnen.
type
TForm1 = class(TForm) {...} private FBilder: TObjectList; FCellBild: array of array of TPicture; procedure AddBild(AFilename: String); procedure InitGrid; end; implementation procedure TForm1.InitGrid; var x, y: Integer; begin SetLength(FCellBild, DrawGrid.Rowcount); for y := 0 to DrawGrid.Rowcount - 1 do begin SetLength(FCellBild[y], DrawGrid.Colcount); {Wir weisen einfach jeder Zelle ein zufälliges Bild aus unserer Liste zu. Wichtig: Für das Array werden keine Kopien erzeugt, sondern hier wird nur auf die Bilder aus der Liste verwiesen.} for x := 0 to DrawGrid.Colcount - 1 do FCellBild[y][x] := FBilder[Random(FBilder.Count)] as TPicture; end; end; Welches Bild in welche Zelle gehört, haben wir schon vorher festgelegt:
Delphi-Quellcode:
procedure TForm1.DrawGridDrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState); var Bild: TPicture; begin {Das Grid ruft diese Methode für jede Zelle jedesmal auf, wenn diese neu gezeichnet werden muss.} Bild := FCellBild[ARow][ACol]; if Assigned(Bild) then DrawGrid.Canvas.Draw(Rect.Left, Rect.Top, Bild.Graphic); end; |
Re: bild in draw- oder stringgrid laden
danke für die antwort. Ich habs auf nen andern weg gelöst bekommen
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01: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