AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi bild in draw- oder stringgrid laden
Thema durchsuchen
Ansicht
Themen-Optionen

bild in draw- oder stringgrid laden

Offene Frage von "michback"
Ein Thema von Dragonhunter1720 · begonnen am 1. Apr 2008 · letzter Beitrag vom 20. Sep 2008
Antwort Antwort
Seite 2 von 3     12 3      
Dragonhunter1720
(Gast)

n/a Beiträge
 
#11

Re: bild in draw- oder stringgrid laden

  Alt 1. Apr 2008, 23:16
OK
nur noch eins

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

  Mit Zitat antworten Zitat
taaktaak

Registriert seit: 25. Okt 2007
Ort: Radbruch
1.990 Beiträge
 
Delphi 7 Professional
 
#12

Re: bild in draw- oder stringgrid laden

  Alt 1. Apr 2008, 23:21
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!
Ralph
  Mit Zitat antworten Zitat
Dragonhunter1720
(Gast)

n/a Beiträge
 
#13

Re: bild in draw- oder stringgrid laden

  Alt 1. Apr 2008, 23:34
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
  Mit Zitat antworten Zitat
Dragonhunter1720
(Gast)

n/a Beiträge
 
#14

Re: bild in draw- oder stringgrid laden

  Alt 1. Apr 2008, 23:35
gut nacht
bis morgen und THX schon mal
  Mit Zitat antworten Zitat
taaktaak

Registriert seit: 25. Okt 2007
Ort: Radbruch
1.990 Beiträge
 
Delphi 7 Professional
 
#15

Re: bild in draw- oder stringgrid laden

  Alt 2. Apr 2008, 08:35
Moin, Moin dragonhunter!

Sehr schön, dann bist du ja jetzt einen Schritt weiter. Ich möchte folgende Aussage noch einmal wiederholen:
Zitat:
Die Methode "DrawGriddhDrawCell" wird für jede Zelle einzeln aufgerufen. Die Parameter ARow,ACol zeigen dir bei jedem Aufruf, welche Zelle gezeichnet werden soll.
Du darfst also in der Methode nur EIN Icon zeichnen! Aus den Werten von ARow und ACol musst du dir den IconIndex der jeweiligen Zelle ermitteln und an die Zeichenfunktion übergeben. Die Ermittlung des Indexwertes ist abhängig von der Sortierung der Icons in der Liste, da kann ich nur ein Beispiel geben:

Ansatz könnte sein:

Delphi-Quellcode:
var Idx : Integer;
//..
Idx:=ARow*DrawGrid1.ColCount+ACol;
ImageList1.Draw(DrawGrid1.Canvas,Rect.Left,Rect.Top,Idx);
//..
Im obigen Beispiel würde der Index zeilenweise über alle Spalten "laufen", also z.B. so
0..3
4..7
8..11
Ralph
  Mit Zitat antworten Zitat
Dragonhunter1720
(Gast)

n/a Beiträge
 
#16

Re: bild in draw- oder stringgrid laden

  Alt 2. Apr 2008, 19:59
so...
ich habe noch bis gestern abend / heute früh um 2 uhr probiert
und nun geht es
vielleicht nicht sauber programmiert, aber für meine zwecke reicht es

Delphi-Quellcode:
//------------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;
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)

Delphi-Quellcode:
//--------------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;
THX für deine hilfe, sonst wär ich noch nicht so weit
  Mit Zitat antworten Zitat
michback

Registriert seit: 23. Nov 2007
35 Beiträge
 
#17

Re: bild in draw- oder stringgrid laden

  Alt 23. Jul 2008, 10:32
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 ?
  Mit Zitat antworten Zitat
Erlkönig

Registriert seit: 20. Dez 2006
19 Beiträge
 
Delphi 5 Professional
 
#18

Re: bild in draw- oder stringgrid laden

  Alt 17. Sep 2008, 16:05
genau das problem hab ich auch... wenn jdm ne hilfe weiß...
es gibt keine lösung, zu der es kein problem gibt
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.464 Beiträge
 
Delphi 12 Athens
 
#19

Re: bild in draw- oder stringgrid laden

  Alt 18. Sep 2008, 17:22
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:
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;
Dann benötigt man die Information, welches Bild in welcher Zelle angezeigt werden soll.
In diesem Beispiel in einem zweidimensional dynamischen Array abgebildet:

Delphi-Quellcode:
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;
Im eigentlichen DrawCell wird von uns nur verlangt eine einzelne Zelle zu zeichnen.
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;
  Mit Zitat antworten Zitat
Erlkönig

Registriert seit: 20. Dez 2006
19 Beiträge
 
Delphi 5 Professional
 
#20

Re: bild in draw- oder stringgrid laden

  Alt 18. Sep 2008, 23:19
danke für die antwort. Ich habs auf nen andern weg gelöst bekommen
es gibt keine lösung, zu der es kein problem gibt
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 23:33 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