Announcement

Collapse
No announcement yet.

Imagelist speichern und laden, wie?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Imagelist speichern und laden, wie?

    Hallo,

    ich möchte dynamisch Icons einer Imagelist hinzufügen. Diese soll dann gespeichert und natürlich auch wieder geladen werden können.

    Wie macht man das am besten?

    (Ich habe schon probiert, die Bilder einzeln auszulesen und in einer großen Bitmap zu speichern. Das geht, scheint mir aber umständlich.)

    Danke und Gruß Felix

  • #2
    Hallo Felix,<br>
    ich würde das Delphi interne Streaming nutzen und TImageList über<br>
    TStream.WriteComponent und TStream.ReadComponent in einen Stream speichern.<br>
    Hier ein rudimentäres Beispiel:<br>
    <pre>
    <font face="Verdana" size="1" color="#000000">unit Unit1;

    interface

    uses
    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
    Dialogs, ImgList, StdCtrls, Spin, ExtCtrls;

    type
    TForm1 = class(TForm)
    ImageList1: TImageList;
    Button1: TButton;
    Button2: TButton;
    Image1: TImage;
    SpinEdit1: TSpinEdit;
    procedure Button1Click(Sender: TObject);
    procedure SpinEdit1Change(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    private
    { Private-Deklarationen }
    public
    { Public-Deklarationen }
    end;

    var
    Form1: TForm1;

    implementation

    {$R *.dfm}

    procedure TForm1.Button1Click(Sender: TObject);
    var
    FS : TFileStream;
    Filename : String;
    AppPath : String;
    begin
    AppPath:=ExtractFilePath(ParamStr(0));
    AppPath:=IncludeTrailingBackSlash(AppPath);
    Filename:=AppPath+'ImgList.iml';
    FS:=TFileStream.Create(Filename,fmCreate);
    Try
    FS.WriteComponent(ImageList1);
    Finally
    FS.Free;
    end;
    end;

    procedure TForm1.SpinEdit1Change(Sender: TObject);
    begin
    ImageList1.GetBitmap(SpinEdit1.Value,Image1.Pictur e.Bitmap);
    Image1.Invalidate;

    end;

    procedure TForm1.Button2Click(Sender: TObject);
    var
    FS : TFileStream;
    Filename : String;
    AppPath : String;
    begin
    AppPath:=ExtractFilePath(ParamStr(0));
    AppPath:=IncludeTrailingBackSlash(AppPath);
    Filename:=AppPath+'ImgList.iml';
    FS:=TFileStream.Create(Filename,fmOpenRead);
    Try
    FS.ReadComponent(ImageList1);
    Finally
    FS.Free;
    end;
    end;

    end.</font>
    </pre&gt

    Comment


    • #3
      TImageList hat über .GetBitmap die Möglichkeit die kompletten Icons als eine Bitmap abzufragen. Damit kannst du also die komplette Imagelist als Bitmap speichern. Allerdings ist Jens Vorschlag besser da er eben auch die Properties der ImageList abspeichert. Nachteilig ist aber das nicht universelle Datenformat. Eine Bitmap kann man eben auch durch viele andere Programme direkt öffnen.<br>

      Gruß Hage

      Comment


      • #4
        Vielen Dank an euch beide!

        @Hagen: .GetBitmap habe ich schon entdeckt, aber wie lese ich die gespeicherte Bitmap wieder in eine imagelist ein?

        @Jens: danke für das ausgiebige Beispiel (da kriege ich ja ein ganz schlechtes Gewissen ;-). Wenn ich nun statt eines Filestream einen BlobStream erzeuge, kann ich das Ganze doch sicher auch in einer Datenbank speichern, oder?

        Gruß Feli

        Comment


        • #5
          Hallo Felix,<br>ja, wenn Du einen BlobStream verwendest kannst du es in einen Datenbank speichern

          Comment


          • #6
            Nochmal danke - klappt alles perfekt!

            Gruß Feli

            Comment

            Working...
            X