Autor Beitrag
Stefan-W
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 475

Win 7 SP1
D2005 PE
BeitragVerfasst: Sa 03.09.05 17:11 
Hi,

Ich möchte um die ladezeiten meines Programms kleinzuhalten einen IconCash erstellen.
es handelt sich um bis zu 30 Icons die wie folgt angeordnet sind

    XX XX XX XX XX XX
    XX XX XX XX XX XX
    XX XX XX XX XX XX
    XX XX XX XX XX XX
    XX XX XX XX XX XX
    XX XX XX XX XX XX

(jedes XX steht für ein Icon)

Es können aber auch Icons dazwischen fehlen so das diese dann einfach leergelassen sind.

(zum nutzen der Icons: auf jedem Icon wird dann mit einer bestimmten Funktion reagiert. was auch geht nur ist das Programm beim Start zulangsam, weil erst die vielen Icon geladen werden müssen)

Nun zu meiner Frage:

Wie kann ich die Icons alle in einer Datei speichern UND wieder auslesen

Ich habs schon mit einer Bitmap versucht (nur leider bekomme ich da Probleme mit der Transparenz). ich hab auch schon an einen Stream gedacht nur leider hab ich da keinerlei Ahnung von und find auch nix brauchbares wie ich mehrere Bilder in und aus einer Datei bring bzw hohle.

ich würde mich über ein paar Lösungsvorschläge freuen.

Tschau
LigH
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 239

Win98SE, Win2000SP4
D7
BeitragVerfasst: Sa 03.09.05 19:45 
Eventuell möchtest du gern "Icon Libraries" (*.icl) unterstützen? -- Da habe ich bei Torry z.B. "IconTools v.2.01" gefunden (Freeware + Source, frei für nichtkommerzielle Nutzung).
Lannes
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2352
Erhaltene Danke: 4

Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
BeitragVerfasst: Sa 03.09.05 23:20 
Titel: Re: Mehrere Icons in eine Datei Speichern und wieder auslese
Hallo,
user profile iconStefan-W hat folgendes geschrieben:
...Ich hab auch schon an einen Stream gedacht nur leider hab ich da keinerlei Ahnung von und find auch nix brauchbares wie ich mehrere Bilder in und aus einer Datei bring bzw hohle...


mal ein einfaches Beispiel ohne Try usw.:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
procedure TForm1.IcosSpeichern;
var Stream : TStream;
begin
  Stream := TFileStream.Create('C:\Temp\sammel.icons',fmCreate);
  Image1.Picture.LoadFromFile('C:\Temp\google.ico');
  Image1.Picture.Icon.SaveToStream(Stream);
  Image1.Picture.LoadFromFile('C:\Temp\gmx.ico');
  Image1.Picture.Icon.SaveToStream(Stream);
  //... weitere
  Stream.Free;
end;

procedure TForm1.IcosLaden;
var Stream : TStream;
begin
  Stream := TFileStream.Create('C:\Temp\sammel.icons',fmOpenRead);
  Image2.Picture.Icon.LoadFromStream(stream);
  Stream.Position := 878;//Größe der Datei 'google.ico';
  Image3.Picture.Icon.LoadFromStream(stream);
  //... weitere
  Stream.Free;
end;

_________________
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
Stefan-W Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 475

Win 7 SP1
D2005 PE
BeitragVerfasst: So 04.09.05 13:05 
erstmal Danke für die Vorschläge die ihr mir gemacht habt.

Ich hab nun am ende doch einen Stream genommen, nur hab ich nicht die Icons einzeln gespeichert sondern eine Array die die Icons enthält... da ich diese Intern sowieso verwende. das macht die arbeit mit dem Stream sehr viel kürzer :D

und dank user profile iconLannes hab ich das mit dem Stream sehr schnell begriffen.oder zumindest das was ich gebraucht hab ;-)

nochmal Danke euch beiden

Tschau
Stefan-W Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 475

Win 7 SP1
D2005 PE
BeitragVerfasst: So 04.09.05 13:33 
hi,hi :D
war ich mit meinen Tests mal wieder weng zuschnell :D war ja klar :oops:

jedenfalls gibt es keine Probleme solang ich das Programm zwischendurch nicht beende ... (sehr toll nichtwar) ... aber ich denk ich schaffs nun auchnoch das doch die Icons einzeln (wie oben vorgeschlagen wurde) in die Datei kommen
Stefan-W Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 475

Win 7 SP1
D2005 PE
BeitragVerfasst: So 04.09.05 14:26 
kann mir mal nochmal jemand das mit dem laden aus einem Stream erklähren?

das so wie oben steht bringt kein ergebnis (nichtmal ein Fehler)
Lannes
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2352
Erhaltene Danke: 4

Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
BeitragVerfasst: So 04.09.05 14:33 
Hallo,

bei mir läuft der Code, wird kein Icon angezeigt?
Sind die Icon-Größen angegeben? wenn nicht müsste eine Fehlermeldung kommen.

_________________
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
Stefan-W Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 475

Win 7 SP1
D2005 PE
BeitragVerfasst: So 04.09.05 14:42 
bei mir klappt nichtmal das:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
Procedure TForm1.Button1Click(Sender: TObject);
Var
    I, J, K: Integer;
    Len: Longint;
    Stream: TFileStream;
Begin
        Stream := TFileStream.Create(ExePfad.Arbeitsverzeichnis + '1.dat', fmCreate);
  Image1.Picture.Icon.SaveToStream(Stream);
  Stream.Free;
End;

Procedure TForm1.Button2Click(Sender: TObject);
Var
  I, J, K: Integer;
  Len: Longint;
  Stream: TFileStream;
Begin
  Stream := TFileStream.Create(ExePfad.Arbeitsverzeichnis + '1.dat', fmOpenRead);
  I_Button1.Picture.Icon.LoadFromStream(Stream);
  Stream.Free;
End;

keine Fehlermeldung nix
es scheint zwar gespeichert (Button1) worden zu sein
aber das laden ausm Stream geht nich (Button2)
Stefan-W Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 475

Win 7 SP1
D2005 PE
BeitragVerfasst: So 04.09.05 14:51 
ah gut... ich hatte was vergessen auszukomentieren.

jetzt zeigt er mir was an.

nur leider hat das nicht mehr das aussehen wie vorher. (vorher 32Bit farben jetzt 16 farben)
Stefan-W Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 475

Win 7 SP1
D2005 PE
BeitragVerfasst: So 04.09.05 15:44 
Kann ich delphi vorschreiben was für ein Icon (welche Qualität) es in den Stream schreibt?
(weil es die einfachste qualität in die Stream schreibt)
Lannes
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2352
Erhaltene Danke: 4

Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
BeitragVerfasst: So 04.09.05 23:57 
Hallo,

hab in dem Code zum Speichern der Icons in eine Datei, den Umweg über die Image, durch die Nutzung eines MemoryStreams ersetzt.
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
procedure IcosSpeichern;
var Stream : TStream;
    ms : TMemoryStream;
begin
  Stream := TFileStream.Create('C:\Temp\sammel.icons',fmCreate);
  ms := TMemoryStream.Create;
  ms.LoadFromFile('C:\Temp\google.ico');
  showmessage(IntToStr(ms.Size));//Dateigröße anzeigen
  ms.SaveToStream(Stream);
  ms.Clear;
  ms.LoadFromFile('C:\Temp\gmx.ico');
  showmessage(IntToStr(ms.Size));
  ms.SaveToStream(Stream);  //... weitere
  ms.Free;
  Stream.Free;
end;

Damit dürfte die Qualität der Icons unverändert bleiben, es werden ja nur Bytes zusammengesetzt.

_________________
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
Stefan-W Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 475

Win 7 SP1
D2005 PE
BeitragVerfasst: Mo 05.09.05 20:27 
gtu danke :-) ich werds nochmal testen :D

mein Vater wird sich freuen da er bis jetzt mit einer version leben muss die nicht so super aussieht
Stefan-W Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 475

Win 7 SP1
D2005 PE
BeitragVerfasst: Mi 07.09.05 17:37 
hi, also ich kann das nicht ganz so machen wie du oben (da das icon meist in einer EX, DLL oder ICL ist) und damit meine Versuche gescheitert sind. ich glaub ich bekomm das mit dem Stream und den Bildern nicht aus die Reihe... (allerdings hab ich gelernd dass man damit wunderbar daten speichern kann wie Strings etc...)

Ich werde das Problem auf eine Andere weise lösen und doch wieder eine Bitmap speichern allerdings werde ich den Hintergrung (der mir die Schwierigkeiten gemacht hat) mit hineinschreiben/malen und nicht wecklassen wie ich es eigentlich bis jetzt hatte.

Nochmal vielen dank für eure Vorschläge und deine Unterstützung mir dem Code Lannes.

Tschau
Sinspin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1335
Erhaltene Danke: 118

Win 10
RIO, CE, Lazarus
BeitragVerfasst: Mi 07.09.05 18:57 
hi,

wenn ich das ganze jetzt richtig verstanden habe dann hast du eine menge von icons die du in einem programm verwenden willst? sind die icons lose? also jedes in seiner datei oder noch irgendwo gebunden?
dürfen die icons fest in das program gebunden sein das sie verwendet?
wenn ja kann ich dir nur empfehlen sie über die komponente TImageList fest einzubinden.
falls das nicht der fall ist kannst du doch einfach ein verzeichnis verwenden in das du alle icons reinpackst und das mit der exe ausgeliefert wird. oder du fasst alle zu einem archive zusammen. der nötige zipper/unzipper ist ja bei delphi dabei.
Stefan-W Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 475

Win 7 SP1
D2005 PE
BeitragVerfasst: Mi 07.09.05 19:07 
ich arbeite an einem Schnellstart-Programm welches dann eine Liste mit den selbst gewählten Programmen anzeigt.

und das anzeigen der vielen Icons zu den einzelnen Programmen ist etwas langsam, also speichere ich die Icons alle in einer Datei dann muss ich nur die eine laden und nicht die Icons jedes mal aus den (bis zu 30) Programmpfaden einzeln holen

1 Bitmap ist wesendlich schneller geladen als die Daten die ich zum suchen der 30 Icons brauch aus der Ini zu holen und dann noch die Icons selber zu laden.

{
ich stell demnächst noch eine Version Online siehe später mal: "T-Run"
eine ältere Versin des Programmes (welche noch unter dem Namen: "Mausmenü" läuft findest du auch hier im Forum
}
Sinspin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1335
Erhaltene Danke: 118

Win 10
RIO, CE, Lazarus
BeitragVerfasst: Mi 07.09.05 19:21 
ist ja echt interessant, nur sehe ich unter win nicht so ganz den sinn dessen. unter DOS habe ich sowas auch mal gebaut weil mir der batchsalat auf den senkel gegangen ist.
du holst dir also die icons zusammen und speicherst sie als ein bitmap? gute idee! das farbenproblem hast du behoben bekommen? ansonsten, wieviele farben ein bitmap haben kann lässt sich ja auch erzwingen. TBitmap.pixelFormat - pf32Bit,...
Stefan-W Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 475

Win 7 SP1
D2005 PE
BeitragVerfasst: Mi 07.09.05 19:25 
ich hab nun den Hintergrund mit gespeichert. dadurch ist der Fehler (der komischerweise nur unter XP entstanden ist) weck :D