AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Bilder in einer Liste

Ein Thema von tobi1701 · begonnen am 16. Okt 2005 · letzter Beitrag vom 17. Okt 2005
Antwort Antwort
tobi1701

Registriert seit: 16. Okt 2005
30 Beiträge
 
#1

Bilder in einer Liste

  Alt 16. Okt 2005, 20:25
hallo,

ich bin gerade dabei eine kleine datenbank für mich zu erstellen, ich habe eine lange pause in der programmierung hinter mir und nutze das auch, um wieder "reinzukommen".

so, ich habe folgendes problem. ich habe ein record erstellt (der datenbankeintrag), der text und bilder enthalten soll.

Delphi-Quellcode:
type
  pGameEntry = ^BasicGameEntry;
  BasicGameEntry = record
   Name,Genre,Rompath,Manualpath,System,Publisher: string;
   Description: TMemo;
   Rating,Published: byte;
   Picture: Array[1..4] of TPicture;
  end;


public
    GameEntry: pGameEntry;
    GameList: tList;

so. ich habe mir jetzt einen dialog erstellt, in dem ich die daten eintragen kann und bei klick auf "ok" werden sie der liste hinzugefügt.
das problem ist aber, dass die einträge ja nur pointer sind, also gar keine daten enthalten.
in dem dialog wähle ich bilder aus, die ich ja nicht so hinzufügen kann:
Delphi-Quellcode:
  new(Form1.GameEntry);
  Form1.GameEntry^.Name:=Edit1.Text;
  Form1.GameEntry^.Genre:=ComboBox1.Text;
  Form1.GameEntry^.System:=ComboBox2.Text;
  Form1.GameEntry^.Picture[1]:=Image1.Picture;
  Form1.GameEntry^.Picture[2]:=Image2.Picture;
  Form1.GameList.Add(Form1.GameEntry);
denn sobald sich das Image im dialog ändert, ändert sich natürlich auch das bild im eintrag der liste, da es ja nur ein zeiger darauf ist (merkwürdigerweise allerdings nicht der text, obwohl das ja auch ein pointer ist).

meine konkrete frage ist jetzt endlich: wie kann ich das realisieren?
wenn ich eine TImageList nehme, habe ich ja das problem mit der sortiereung. wenn ich meine liste nach namen, genre, oder jahr sortiere, ändert sich ja die reihenfolge der einträge (oder wenn ich einen eintrag entferne...). nicht aber die reihenfolge der einträge in der ImageList.

kann mir da bitte jemand helfen?

danke, tobias.

ps: ich benutze delphi 6.0 personal

[edit=Admin]Code in Delphi-Tags gesetzt. Künftig bitte selber machen, danke. Mfg, Daniel[/edit]
  Mit Zitat antworten Zitat
Niko

Registriert seit: 23. Jun 2003
416 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Bilder in einer Liste

  Alt 16. Okt 2005, 21:51
Hi,

willkommen in der Delphi-Praxis!

Dein Problem kannst du lösen, indem du die Grafik beim Speichern kopierst:
Delphi-Quellcode:
Form1.GameEntry^.Picture[1] := TPicture.Create;
Form1.GameEntry^.Picture[1].Assign(Image1.Picture);
Zitat von tobi1701:
merkwürdigerweise allerdings nicht der text, obwohl das ja auch ein pointer ist
Strings werden in Delphi als Werttypen behandelt und somit bei einer Zuweisung kopiert.

Im Übrigen ist mir noch aufgefallen, dass du für Description ein TMemo verwendest. Hier wäre TStrings wohl günstiger.
"Electricity is actually made up of extremely tiny particles called electrons, that you cannot see with the naked eye unless you have been drinking." (Dave Barry)
  Mit Zitat antworten Zitat
tobi1701

Registriert seit: 16. Okt 2005
30 Beiträge
 
#3

Re: Bilder in einer Liste

  Alt 16. Okt 2005, 22:22
super, dankeschön. das werde ich gleich mal ausprobieren.
den tip mit tStrings werde ich auch gleich verwenden, ich habe vor 5 oder 6 jahren zuletzt programmiert und erinnere mich nur sehr langsam wieder an die ganzen sachen. das tMemo hatte ich da wohl reingetan, da ich ein Memo im dialog verwendet habe...

ist denn der ansatz soweit ok, oder gibt es auch hier noch eine bessere lösung?
wie man vielleicht leicht erkennen kann, will ich eine datenbank für mich schreiben, um spielereviews für mich zu verwalten. es gibt zwar viele datenbanken, aber ich möchte eine haben, die nur einträge und informationen enthält, die für mich auch interessant sind.

eine letzte frage noch (ohne das ich mich damit jetzt selbst schon beschäftigt habe):
wie speicher ich denn am besten diese liste?

ich bräuchte sowas wie List.SaveToFile(name:string);
aber das muss ich ja wohl per hand erstellen, also alle items der liste einzeln in eine datei schreiben.
was wäredenn da die beste lösung?
  Mit Zitat antworten Zitat
Niko

Registriert seit: 23. Jun 2003
416 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Bilder in einer Liste

  Alt 16. Okt 2005, 23:04
Zitat von tobi1701:
ist denn der ansatz soweit ok, oder gibt es auch hier noch eine bessere lösung?
Wenn die Datenbank nicht allzu groß werden soll ist der Ansatz in Ordnung. Alternativ könnte man natürlich auch eine "richtige" Datenbank wie Paradox oder Access verwenden, was sich aber kaum lohnt, wenn die Datenstrukturen einfach sind. Der Programmieraufwand hängt hier stark von der verwendeten Delphi-Variante ab (ab Professional aufwärts wird's einfacher).

Zum Speichern deiner Liste wäre wohl XML das Beste. Wenn du dich darin einarbeiten willst, gibt's hier ein gutes Tutorial. Das Speichern von Bildern in XML ist nicht ganz so einfach, aber da könntest du alternativ auch nur den Pfad in die XML-Datei aufnehmen.

Noch ein Tipp: Wenn du dir sicher bist, dass alle deine Bilder Bitmaps sind (und keine Vektorgrafiken), kannst du in deinem Record gleich Verweise auf TBitmap statt auf TPicture speichern und damit ein bisschen overhead einsparen.
"Electricity is actually made up of extremely tiny particles called electrons, that you cannot see with the naked eye unless you have been drinking." (Dave Barry)
  Mit Zitat antworten Zitat
tobi1701

Registriert seit: 16. Okt 2005
30 Beiträge
 
#5

Re: Bilder in einer Liste

  Alt 16. Okt 2005, 23:56
mit xml kenne ich mich absolut überhaupt nicht aus, genau genommen weiss ich auch gar nicht was das ist. ich wusste noch nicht einmal, dass das in delphi "drin" ist.

kann ich denn nicht eine schleife beginnen und jedes item der liste einzeln in einen stream speichern?
.Item[i].Name.SaveToStream
.Item[i].Genre.SaveToStream
usw.?

edit: und access und andere datenbankprogramme kommen für mich aus zwei gründen nicht in frage:
1. will ich meine eigene (kleine) datenbank haben, die ich auch selbst layouten möchte. ausserdem sollen da noch weitere funktionenrein, als die hier genannte liste.
2. will ich mal wieder was mit delphi machen, denn schliesslich ist es nicht nur eine übung, sondern macht mir auch noch spass. manchmal zumindest
  Mit Zitat antworten Zitat
Niko

Registriert seit: 23. Jun 2003
416 Beiträge
 
Delphi 2006 Professional
 
#6

Re: Bilder in einer Liste

  Alt 17. Okt 2005, 17:04
Zitat von tobi1701:
kann ich denn nicht eine schleife beginnen und jedes item der liste einzeln in einen stream speichern?
Das geht auch. Du musst aber darauf achten, dass die gespeicherten Texte jeweils die gleiche Länge haben müssen oder die Länge entsprechend mitspeichern (dazu gibt's hier im Forum Beispiele), da du sonst beim Auslesen das Ende nicht mehr findest. Inwieweit TBitmap.LoadFromStream in der Lage ist, die größe des Bildes selbst zu erkennen weiß ich nicht. Aber das kann man ja einfach ausprobieren.

Zitat von tobi1701:
und access und andere datenbankprogramme kommen für mich aus zwei gründen nicht in frage
War vielleicht ein bisschen unklar ausgedrückt: Ich meine nicht mit den Datenbankprogrammen zu arbeiten, sondern mit Delphi die Daten in einer entsprechenden Datenbank abzulegen.
"Electricity is actually made up of extremely tiny particles called electrons, that you cannot see with the naked eye unless you have been drinking." (Dave Barry)
  Mit Zitat antworten Zitat
Antwort Antwort


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 13:59 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