Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Rückgabewert von TSpeedButton.Glyph wenn undefiniert? Nil? (https://www.delphipraxis.net/129536-rueckgabewert-von-tspeedbutton-glyph-wenn-undefiniert-nil.html)

Schilly 20. Feb 2009 20:42


Rückgabewert von TSpeedButton.Glyph wenn undefiniert? Nil?
 
Ich will, dass das Bild nur geändert wird, wenn bisher nichts angezeigt wird. Ich will quasi zwischen zwei Zuständen wechseln: Bild/Kein Bild.
Bis jetzt hab ichs so gemacht:
Delphi-Quellcode:
var feld: array of array of TSpeedButton;

...

    if feld[X,Y].Glyph = nil then
      imagelist1.getbitmap(0, feld[X,Y].Glyph)
    else feld[X,Y].Glyph.Free;
aber beim ersten Klick passiert nichts und beim zweiten kommt ein EAccessViolation, also muss da oben wohl irgendwas falsch sein ^^
also wenn mir jemand helfen kann, wärs nett.

Gruß

jaenicke 20. Feb 2009 20:56

Re: Rückgabewert von TSpeedButton.Glyph wenn undefiniert? Ni
 
Erstens: Wenn du Glyph aus dem Speicher entfernst (Free), kannst du danach ja schlecht etwas hineinschreiben (GetBitmap).
Zweitens: Wenn du ohnehin ein Array benutzt, warum nicht auch eins um den Zustand zu speichern?
Drittens: Jede Komponente hat die Eigenschaft Tag, in der du einen benutzerdefinierten beliebigen Integerwert speichern kannst. Dort könntest du den Status auch ablegen.

Schilly 20. Feb 2009 20:59

Re: Rückgabewert von TSpeedButton.Glyph wenn undefiniert? Ni
 
gut das stimmt natürlich

wie mach ich denn, dass kein bild mehr angezeigt wird?

PS: ich benutz sowieso eine nachfahrklasse von TSpeedButton, das mit dem Status ist also kein Problem ... ich dachte nur, das ginge auch einfacher.

Hawkeye219 20. Feb 2009 21:12

Re: Rückgabewert von TSpeedButton.Glyph wenn undefiniert? Ni
 
Hallo,

wenn du das Bild nicht aus einer ImageList holst, sondern direkt in SpeedButton.Glyph ablegst, kannst du auch so umschalten:

Delphi-Quellcode:
procedure TForm1.SpeedButtonClick(Sender: TObject);
begin
  if (SpeedButton.Margin < 0) then
    SpeedButton.Margin := SpeedButton.Width
  else
    SpeedButton.Margin := -1;
end;
Gruß Hawkeye

himitsu 20. Feb 2009 21:14

Re: Rückgabewert von TSpeedButton.Glyph wenn undefiniert? Ni
 
Glyph existiert ja, nur ist halt kein Bild drin.

Delphi-Quellcode:
if feld[X,Y].Glyph.Witdh = 0 then
  ImageList1.GetBitmap(0, feld[X,Y].Glyph)
else feld[X,Y].Glyph.Witdh := 0;

Schilly 20. Feb 2009 21:16

Re: Rückgabewert von TSpeedButton.Glyph wenn undefiniert? Ni
 
ah klar das ist natürlich ne Möglichkeit

Vielen Dank euch

wobei: kann man auch zur Laufzeit ne leere TBitmap erstellen und damit das erste Bild überschreiben?

himitsu 20. Feb 2009 21:33

Re: Rückgabewert von TSpeedButton.Glyph wenn undefiniert? Ni
 
klar kannst du das ... du könntest dir aber auch ein "leeres" Bild in die ImageList laden


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