Autor Beitrag
Gortchak
Hält's aus hier
Beiträge: 3

WinXP
D6 Pers
BeitragVerfasst: Mo 21.11.05 02:15 
Hallo allerseits
Ich habe ein Problem mit meiner Imagelist, es wäre sehr praktisch wenn ich den Inhalt während das Programm läuft ändern könnte.
Für meinen Leveleditor lade ich in der Imagelist eine Bitmap, die dann auch brav in beispielsweise 480 Teile zerlegt wird die dann mein Drawgrid mit 30x16 Feldern füllen - zumindest wenn ich es im Editor per Doppelklick auf die Imagelist lade.
Dann zeigt er auch die korrekte Anzahl der einzelnen Teile an wenn ich diese per .count testweise anzeigen lasse.

Wie kann ich ein solches Bildladen nun während das Programm läuft abhandeln?
Alle bisherigen Versuche sind dahingehend gescheitert dass immer nur die erste Zeile des Drawgrid gefüllt wurde mit der ersten Pixelreihe des Bitmaps. Auch wenn ich nun per count nachsehe hat die Imagelist nur 30 Einträge statt kompletter 480, nämlich nur die der ersten Zeile.
Läd zum Bleistift nur die erste Zeile:
ausblenden Quelltext
1:
2:
ImageList1.AddMasked(bmp,clNone);
//bmp enthält die Bitmap

Oder muss man die Imagelist mittels einer Schleife füllen damit auch die restlichen Zeilen korrekt ausgefüllt werden, und wenn ja, wie stelle ich das an?
Für einen Tipp wie ich die Imagelist komplett füllen kann wäre ich sehr dankbar :)
Lannes
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2352
Erhaltene Danke: 4

Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
BeitragVerfasst: Mo 21.11.05 13:09 
Hallo,

richtig, mit einer Schleife :wink: , brauchst aber nicht jedes Bild einzeln zu adden, denn eine Reihe liest er ja korrekt ein.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
var bmp,bmpTmp : TBitmap;
    z,x : Integer;
begin
  bmp := TBitmap.Create;
  bmpTmp := TBitmap.Create;
  bmp.LoadFromFile('C:\benutzer\test.bmp');
  bmpTmp.Height := 16;
  x := bmp.Width;
  bmpTmp.Width := x;
  for z := 0 to Round(bmp.Height/16)-1 do
    begin
    bmpTmp.Canvas.CopyRect(Rect(0,0,x,16),
                           bmp.Canvas,
                           Rect(0,z*16,x,(z+1)*16-1));
    ImageList1.AddMasked(bmpTmp,clNone);
    end;
  bmp.Free;
  bmpTmp.Free;


so müsste es eigentlich passen :?

_________________
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
Gortchak Threadstarter
Hält's aus hier
Beiträge: 3

WinXP
D6 Pers
BeitragVerfasst: Mo 21.11.05 14:06 
Das ist genial, genau das was ich brauchte! Vielen vielen Dank! :D