AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Tpanel+Tspeedbutton+Imagelist zu einer Komponente machen!
Thema durchsuchen
Ansicht
Themen-Optionen

Tpanel+Tspeedbutton+Imagelist zu einer Komponente machen!

Ein Thema von snow · begonnen am 11. Dez 2007 · letzter Beitrag vom 11. Dez 2007
Antwort Antwort
Seite 2 von 2     12   
snow

Registriert seit: 28. Jun 2007
277 Beiträge
 
#11

Re: Tpanel+Tspeedbutton+Imagelist zu einer Komponente machen

  Alt 11. Dez 2007, 18:39
hab was herausgefunden.

Ich hab derzeit folgenden Code.
Delphi-Quellcode:
uses
  SysUtils, Classes, Controls, Buttons, Graphics;

type
  TSpeedButton1 = class(TSpeedButton)
  private
  Fimageindex : Integer;
  tmpbmp : Tbitmap;

  procedure Setimage(Value: Integer);
    { Private-Deklarationen }
  protected
    { Protected-Deklarationen }
  public
  FImages : Timagelist;
    { Public-Deklarationen }
  published
  property Images : Timagelist read FImages write Fimages;
  property Imageindex : Integer read FImageindex write SetImage;
    { Published-Deklarationen }
  end;

Delphi-Quellcode:
procedure Tspeedbutton1.Setimage(Value: Integer);
begin
//
Fimages:= Timagelist.Create(nil);
Fimages.CreateSize(48,48);
Fimages.Clear;
tmpbmp:=tbitmap.Create;
//tmpbmp.LoadFromFile('i:/delphi/Buttons/button_play.bmp');
//Fimages.Add(tmpbmp,tmpbmp);
tmpbmp.Free;
FImages.GetBitmap(0,Glyph);
Fimages.Free;


end;

wenn ich in die FImages von einer datei lade, dann klappt alles prima.

Ich glaube das Fimages nicht richtig mit Images verknüft ist oder dass man das nicht mir Timagelist so machen darf.

Anscheinend ist die Fimages lehr.

Gruß snow


Zitat:
kommt der Fehler auch, wenn Du meine Variante, also direkt über Glyph, auch?
Ja Leider!
  Mit Zitat antworten Zitat
Benutzerbild von Kroko1999
Kroko1999

Registriert seit: 21. Apr 2005
Ort: Spremberg
455 Beiträge
 
Turbo Delphi für Win32
 
#12

Re: Tpanel+Tspeedbutton+Imagelist zu einer Komponente machen

  Alt 11. Dez 2007, 18:49
Ein paar Tipps und Hinweise
(a) nenne Die Klasse zBsp: TSpeedButtonEx mit den Zahlen kommst du früher oder später durcheinander
(b) verlagere FImages in den private Teil
(c) benenne die Setter-proc von SetImage in SetImageIndex um
(d) die ImageList musst Du von außen setzen
(e)
Delphi-Quellcode:
procedure TSpeedbutton1.SetImageIndex(Value: Integer);
begin
  if FImageIndex<>Value then
    begin
      FImageIndex := Value;
       if Assigned(FImages) then FImages.GetBitmap(FImageIndex,Glyph);
    end;
end;
{EDIT]
(f) muss ja kommen, da FImages=nil ist
Da sprach der Stumme zum Blinden: "Du wirst sehen ..."
oder
Wer lesen kann, ist klar im Vorteil!
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#13

Re: Tpanel+Tspeedbutton+Imagelist zu einer Komponente machen

  Alt 11. Dez 2007, 18:53
1. Nicht die Property enthält die Instanz sondern FImages
2. Zeichnet er bevor diese Zuweisung getätigt worden ist?
3. Warum fragst du nur mal zur Sicherheit ab, ob FImages <> nil ist?
4. Denkst du daran die Methode Delphi-Referenz durchsuchenNotification zu überschreiben um darin deine ImageList notfalls wieder auf nil zu setzen? Sonst knallts in deiner Komponente beim Zugriff auf die FImages, wenn diese von der Form gelöscht wurden...
5. Wenn du FImages von aussen les- und schreibbar machst, dann kann dir jeder in die Suppe spucken und dir einfach einen nil Zeiger unterschieben. Von daher hast du 2 Möglichkeiten: entweder du hast eine lokale ImageList und kopierst dir bei Zuweisung den Inhalt (schlechte Lösung) oder du hast intern immer nur eine Referenz auf eine ImageList. Dann gilt Punkt 4 und zusätzlich noch Punkt 6!
6. Wenn du dir von aussen eine TImageList zuweisen lässt, dann lege keine TImageList Instanz in deiner Komponente an und gebe sie auch nicht frei!
  Mit Zitat antworten Zitat
snow

Registriert seit: 28. Jun 2007
277 Beiträge
 
#14

Re: Tpanel+Tspeedbutton+Imagelist zu einer Komponente machen

  Alt 11. Dez 2007, 19:56
So ein erstes Bild.

Ich kann mit kroko1999's Code ein Bild auf den Button Zeichnen.

Ihc hab auf ner form meinen SPeedbutton und einen SpinEdit.


auf der ONChange-proc hab ich ein


Speedbutton.ImageIndex:=SpinEdit.value; So zwar zwar Kroko's code die Bmp korrect ein aber...

Nur ein mal. wenn ich also den spinbutton weiter erhöhe dann tut sich leider nix.

Obwohl Value korrekt übergeben wird.(als Caption:=inttostr(value)) klappts.

Gruß snow

(es ist mir eigendlich egal ob mir jemand in die suppe guggen kann, da der Quellcode sowiso veröffendlicht wird.


Edit:// es hat geklappt

man darf die Glyph nicht direkt aus der Imagelist laden, sondern muss den weg über eine lokale bmp machen.

dann zeigt sich nur ein sehr sehr merkwürdiger effekt.

Am anfang des programm sind die Images[0] und [1] übereinander auf dem glyph. sobalt man SpinEdit-changed ist nur noch das richtige da.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 10:52 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