TImage umschalten

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
DL3AD
Beiträge: 478
Registriert: Fr 13. Sep 2013, 12:07
OS, Lazarus, FPC: Debian Bullseye (L 2.2.0)
CPU-Target: 64Bit
Wohnort: Rügen

TImage umschalten

Beitrag von DL3AD »

Hallo,

ich möchte 8 Zustände signalisieren und habe dafür 8 Bildchen entworfen.
Mit einem TImage sollen die dann je nach Zustand geladen werden.
Wie macht man dass am besten - mit LoadFromFile oder gibt es da eine bessere Lösung die Bildchen anzeigen zu lassen ?

Gruß Frank

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2636
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: TImage umschalten

Beitrag von m.fuchs »

Du kannst eine TImageList verwenden und deine Bilder dort hineinladen. Sie müssen dafür alle gleich groß sein, aber das sollte ja kein Problem darstellen.

Dann kannst du zum Beispiel so auf ein beliebiges Canvas malen:

Code: Alles auswählen

ImageList1.Draw(Image1.Canvas, 0, 0, 3);

0, 0 geben die Koordinaten auf dem Canvas an wo das Zeichnen beginnt. 3 ist der Index des Bildes innerhalb der ImageList.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

DL3AD
Beiträge: 478
Registriert: Fr 13. Sep 2013, 12:07
OS, Lazarus, FPC: Debian Bullseye (L 2.2.0)
CPU-Target: 64Bit
Wohnort: Rügen

Re: TImage umschalten

Beitrag von DL3AD »

Danke - dass ist genau das richtige Lösung. :D

DL3AD
Beiträge: 478
Registriert: Fr 13. Sep 2013, 12:07
OS, Lazarus, FPC: Debian Bullseye (L 2.2.0)
CPU-Target: 64Bit
Wohnort: Rügen

TImageImageList Laden

Beitrag von DL3AD »

Hallo,

ich verwende 9 kleine Images von 21 x 15 Pixel Größe.
Nun möchte ich zwei Satz a 9 Images jeweils als Auswahl in die Imagelist laden.
Wie läd man Images in die Liste ?

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: TImage umschalten

Beitrag von wp_xyz »

Hast du die Add*-Methoden der ImageList schon probiert?

Code: Alles auswählen

type
  TCustomImageList = class(...)
    ...
    function Add(Image, Mask: TCustomBitmap): Integer;
    function AddIcon(Image: TCustomIcon): Integer;
    procedure AddImages(AValue: TCustomImageList);
    function AddMasked(Image: TBitmap; MaskColor: TColor): Integer;
    function AddLazarusResource(const ResourceName: string; MaskColor: TColor = clNone): integer;
    function AddResourceName(Instance: THandle; const ResourceName: string; MaskColor: TColor = clNone): integer;
  ...


Wichtig: Vor dem Hinzufügen der Bilder Width und Height der ImageList auf 21 bzw. 15 setzen!

DL3AD
Beiträge: 478
Registriert: Fr 13. Sep 2013, 12:07
OS, Lazarus, FPC: Debian Bullseye (L 2.2.0)
CPU-Target: 64Bit
Wohnort: Rügen

Re: TImage umschalten

Beitrag von DL3AD »

... sorry wenn ich wüste wie hätte ich nicht gefragt :( :shock:
Ich habe 9 PNGs

Green0.png ... Green8.png
Die liegen in einem Verzeichniss "Matrix"

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: TImage umschalten

Beitrag von wp_xyz »

DL3AD hat geschrieben:... sorry wenn ich wüste wie hätte ich nicht gefragt :( :shock:
Ich habe 9 PNGs

Green0.png ... Green8.png
Die liegen in einem Verzeichniss "Matrix"

Seltsame Antwort: Ist es jetzt klar oder nicht? Ich hatte das als Frage formuliert, weil selbst, wenn du die Methoden kennen würdest, es noch den einen oder anderen Fallstrick gibt.

Nur zur Sicherheit, falls du noch nicht weitergekommen bist, hier ein getesteter Code-Schnipsel:

Code: Alles auswählen

procedure TForm1.FormCreate(Sender: TObject);
var
  pic: TPicture;
begin
  pic := TPicture.Create;
  pic.LoadFromFile('C:\lazarus-trunk_fpc302\images\components\default.png');
  ImageList1.Add(pic.Bitmap, nil);
  pic.Free;
end;

Und die Verallgemeinerung von meinem Dateiverzeichnis und meinem Bildnamen auf dein "Matrix" und "Green0.png" wird du doch hinkriegen, oder?

DL3AD
Beiträge: 478
Registriert: Fr 13. Sep 2013, 12:07
OS, Lazarus, FPC: Debian Bullseye (L 2.2.0)
CPU-Target: 64Bit
Wohnort: Rügen

Re: TImage umschalten

Beitrag von DL3AD »

Hallo wp_xyz,

Danke für den Schnipsel - das hilft weiter.
Ich hatte mich in der Tat seltsam ausgedückt - Ich hatte die Methoden schon gefunden - wuste aber nicht wie ich die benutzen muss.
Bei Add z.B. TCustomBitmap habe ich nichts gefunden in verbindung mit PNG.
Habe seit 13:00 Uhr rumgesucht und nix passendes gefunden weder im Wiki , in der Hilfe oder bei Delphi.


wp_xyz hat geschrieben:Und die Verallgemeinerung von meinem Dateiverzeichnis und meinem Bildnamen auf dein "Matrix" und "Green0.png" wird du doch hinkriegen, oder?


:mrgreen: So doof bin ich dann doch nicht.

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: TImage umschalten

Beitrag von wp_xyz »

DL3AD hat geschrieben: :mrgreen: So doof bin ich dann doch nicht.

Sorry. Aber ich konnte nicht anders, nach dieser Antwort. Nix für ungut...

DL3AD
Beiträge: 478
Registriert: Fr 13. Sep 2013, 12:07
OS, Lazarus, FPC: Debian Bullseye (L 2.2.0)
CPU-Target: 64Bit
Wohnort: Rügen

Re: TImage umschalten

Beitrag von DL3AD »

...kein Problem.
Dieses Forum ist eines der besten die ich kenne - man bekommt fast immer vernünftige Antworten und Hinweise.

Gruß
Frank

Mathias
Beiträge: 6167
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: TImage umschalten

Beitrag von Mathias »

Dieses Forum ist eines der besten die ich kenne - man bekommt fast immer vernünftige Antworten und Hinweise.

Da bin ich voll deiner Meinung. :wink:

Zu deinem Thema zurück, dein Problem hätte man auch mit einer einfachen "Array of Bitmap" lösen können.
Der Vorteil dabei, die Bitmaps können unterschiedliche Grössen haben.
Aber wie man so was löst ist natürlich Geschmackssache. :wink:
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

DL3AD
Beiträge: 478
Registriert: Fr 13. Sep 2013, 12:07
OS, Lazarus, FPC: Debian Bullseye (L 2.2.0)
CPU-Target: 64Bit
Wohnort: Rügen

Re: TImage umschalten

Beitrag von DL3AD »

Hallo Mathias,

ich habe es so gelößt wie zuvor vorgeschlagen.
ABER da ich 9 PNG laden müsste lade ich nur eines.
ursprünglich benötigte ich 9 PNGs im Format 21x15 Pixel.
Ich habe mir ein PNG gebaut im Format 189x15 Pixel und lade nur dieses.
Die Imagelist habe ich dann auf 21x9 konfiguriert und lasse mir dann mit den Imageindex 0....8 die einzelnen Segmente welche dann den einzelnen PNGs entsprechen würden anzeigen.
So ist es auf einfachste Weise gelößt.

Gruß
Frank

Mathias
Beiträge: 6167
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: TImage umschalten

Beitrag von Mathias »

Ich habe mir ein PNG gebaut im Format 189x15 Pixel und lade nur dieses.

Dies finde ich auch eine sehr gute Lösung, somit wird dein Programm-Verzeichnis recht übersichtlich.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2636
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: TImage umschalten

Beitrag von m.fuchs »

Wenn du sie nicht im Programmablauf erst laden musst, kannst du auch einfach auf die ImageList doppelklicken.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

Antworten