Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Problem mit ImageList.GetBitmap (https://www.delphipraxis.net/46810-problem-mit-imagelist-getbitmap.html)

Brainstalker 31. Mai 2005 23:49


Problem mit ImageList.GetBitmap
 
Ok ich hab ein Problem mit der TImageList Komponente.
Ich will ein Bild aus einer TImageList in ein TImage kopieren.
Delphi-Quellcode:
ilIcons.GetBitmap(Icon, iIcon.Picture.Bitmap);
Ich habe 4 Konstanten erstellt ähnlich:
BILD1 = 1;
BILD2 = 2;

Wenn ich in dem oben gezeigten Code Icon durch eine Zahl ersetze, oder eben eine Konstante funktioniert alles wunderbar.
Ich hab das ganze in eine procedur gepackt. Wenn ich nun eine Zahl für Icon übergebe funktioniert es, übergebe ich allerdings eine Konstante, funktioniert es nicht. Wieso funktioniert es nicht? Wo könnte der Fehler liegen?

Sharky 1. Jun 2005 06:49

Re: Problem mit ImageList.GetBitmap
 
Hai Brainstalker,

wenn ich es richtig sehe musst darfst Du doch nicht .Bitmap übergeben sondern .Icon.

Brainstalker 2. Jun 2005 22:34

Re: Problem mit ImageList.GetBitmap
 
Ne das mit .Bitmap ist schon richtig, da es sich hierbei um ein Bitmap handelt. Vielleicht haben dich die Variablennamen irritiert. Wie ich geschrieben habe, funktioniert es in drei von vier Fällen.

ilIcons: TImageList
iIcon: TImage

1. Fall (direkter Aufruf mit Zahl):
Delphi-Quellcode:
ilIcons.GetBitmap(2, iIcon.Picture.Bitmap);
Mir wird das richtige Bitmap angezeigt.

2. Fall (direkter Aufruf mit Konstante):
Delphi-Quellcode:
const
  I_ICON = 2;

  ilIcons.GetBitmap(I_ICON, iIcon.Picture.Bitmap);
Hier wird auch das richtige Icon angezeigt.

3. Fall (aufrufen der Funktion mit Zahl):
Delphi-Quellcode:
function blabla(Icon: integer);
begin
  ilIcons.GetBitmap(Icon, iIcon.Picture.Bitmap);
end;

blabla(2);
Funktioniert auch!

4. Fall (aufrufen der Funktion mit Zahl):
Delphi-Quellcode:
function blabla(Icon: integer);
begin
  ilIcons.GetBitmap(Icon, iIcon.Picture.Bitmap);
end;

blabla(I_ICON);
Funktioniert nicht!!!

Ich rufe die Funktion aus einer anderen Unit auf. Die Konstanten stehen in der Unit mit der Funktion. Warum zum :evil: funktioniert das nicht?

turboPASCAL 2. Jun 2005 23:02

Re: Problem mit ImageList.GetBitmap
 
So ein ähnliches Probl. hatte ich auch schon einmal, als ich verschiedene Bitmaps aus einer ImageList
in eine Listbox kopieren wollte. (schohn länger her) :gruebel:

Hatte dann folgende Lösung:

Delphi-Quellcode:
function GetFromImageList(AnyImageList: TImageList; IconIndex: Integer): TBitmap;
var Bmp: TBitmap;
begin
  Bmp := TBitmap.Create;
  AnyImageList.GetBitmap(IconIndex, Bmp);
  GetFromImageList := Bmp;
  Bmp.Free;
end;
...
for i:=0 to 10 do
  Dings[i].Bitmap := GetFromImageList(ImageList1, i);
...

alzaimar 3. Jun 2005 07:42

Re: Problem mit ImageList.GetBitmap
 
Grundsätzlich würde ich mich hüten, Veriablennamen mit reservierten Wörtern (wie Index) oder Schlagwörtern (wie 'Icon') zu benutzen. Wer weiss, was der Kompiler draus macht. Ich verwende z.B. 'aIcon' oder, grammatikalisch korrekt, 'anIcon', 'aBitmap', oder 'anIndex', 'aIndex' etc.
Klassen-Felder haben effs am Anfang ('fField','fData','fIndex').

Ich finde das Problem sehr komisch. Bringt es denn was, die Parameter umzubenennen? Kann ich mir zwar nicht vorstellen, aber wer weiss.

Dein 4.Fall: I_ICON ist eine Variable?, eine Konstante? oder was?

marabu 3. Jun 2005 07:54

Re: Problem mit ImageList.GetBitmap
 
@Brainstalker: bin auch der Meinung, dass du deine Konstanten überdeckst - code insight müsste dir bereits sagen, woher dein I_ICON genommen wird - wenn ich nicht irre.

[off-topic]
Zitat:

Zitat von alzaimar
Ich verwende z.B. 'aIcon' oder, grammatikalisch korrekt, 'anIcon', 'aBitmap', oder 'anIndex', 'aIndex' etc.

Das vorangestellte a steht historisch für Argument.

Grüße vom marabu

alzaimar 4. Jun 2005 18:43

Re: Problem mit ImageList.GetBitmap
 
Zitat:

Das vorangestellte a steht historisch für Argument.
Lustig, und ich dachte ehrlich, da erzählt jemand eine Geschichte:
Zitat:

DoSomethingWith (aValue, anIndex and aBitmap)
:zwinker:

marabu 5. Jun 2005 11:37

Re: Problem mit ImageList.GetBitmap
 
Hallo alzaimar,

danke für diesen Insider-Gag - werde ihn bei nächster Gelegenheit als spontane Eigen-Kreation verbauen.

marabu

Brainstalker 6. Jun 2005 15:06

Re: Problem mit ImageList.GetBitmap
 
Hab jetzt alles ausprobiert, aber nichts hat geholfen. Das mit der Namensgebung der Variablen werde ich mir zu Herzen nehmen, lag aber leider nicht daran.
Ich habs jetzt mit globalen und lokalen Konstanten probiert, auch da kein unterschied. Wie gesagt wenn ich ne Zahl übergebe gehts, bei ner Konstanten nicht.

marabu 7. Jun 2005 07:40

Re: Problem mit ImageList.GetBitmap
 
Zitat:

Zitat von Brainstalker
Wie gesagt wenn ich ne Zahl übergebe gehts, bei ner Konstanten nicht.

Hast du denn mal mit einem Breakpoint geprüft, dass der Wert der vermeintlichen Konstanten stimmt?

marabu


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:41 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