Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi labels abspeichern (https://www.delphipraxis.net/138108-labels-abspeichern.html)

tabl 3. Aug 2009 20:53


labels abspeichern
 
ich will ne menge labels abspeichern übern 2 arrays.
aber irgenwie will er die labels wenn er sie geladen hat nicht akktualisren bzw überschreiben. warum?
zuständiger quelltext ausschnitt:

Delphi-Quellcode:
procedure TForm2.saveClick(Sender: TObject);
var
  datei : file of tlabel;
  i :integer;
begin
  try
   if savedialog.Execute then
  begin
    assignfile(datei,savedialog.FileName);
    rewrite(datei);
    for i := 0 to 12 do
      write(datei,mainunit.lblarray[i]);
    for i := 0 to 19 do
      write(datei,mo1);

  end;
  finally
  closefile(datei);end;
end;

procedure TForm2.LadenClick(Sender: TObject);
var datei : file of tlabel;
    i : integer;
begin
  try
  if opendialog.Execute then
  begin
    assignfile(datei,opendialog.FileName);
    reset(datei);
    for i:=0 to 12 do
      read(datei,lblarray[i]);
    for i := 0 to 19 do
      read(datei,mo1);
  end;
  finally
  closefile(datei);
  end;
end;

mkinzler 3. Aug 2009 20:54

Re: labels abspeichern
 
Bei Klassen geht das so nicht.

himitsu 3. Aug 2009 20:55

Re: labels abspeichern
 
array of tlabel enthält nur die Objekt-intstanz-variablen ... du mußt schon den Inhalt der Labels speichern.

Muetze1 3. Aug 2009 21:03

Re: labels abspeichern
 
Dein try/finally ist gefährlich gebaut und kann zu undefiniertem Verhalten führen!

Hintergrund: datei ist eine lokale Variable und enthält somit zufällige Werte. Die Wahrscheinlichkeit, dass der in der Struktur enthaltene FileHandle Member ungleich INVALID_HANDLE_VALUE ist, ist sehr hoch. Dadurch wird mit dem CloseFile() im Fehlerfall (vor dem Öffnen) bzw. wenn SaveDialog abgebrochen wird ein ganz anderes File Handle geschlossen.

Das try vom try/finally muss immer nach dem AssignFile() erscheinen, da AssignFile() die Struktur komplett initialisiert.

tabl 3. Aug 2009 21:10

Re: labels abspeichern
 
ich brauch eig nur die farbe und die caption von den label. kann ich in ein "file of tlabel" die eigenschfaten einfach so reinspeichern? glaube ich zwar nicht aber frage ist es wert^^.
welche anderen möglichkeiten gibt es?

@muetze1. das try is im nur eingebaut um zu sehen, ob er zwinschen durch abbricht ohne das es angezeigt wird. wird also noch verbessert.


(sry war eben nicht ganz dabei^^)

mkinzler 3. Aug 2009 21:13

Re: labels abspeichern
 
@tabl: Welche Sprache ist das bitte? Lese den Beitrag noch einmal durch und korrigiere ihn so, das ein normaler Leser ihn auch verstehen kann.

himitsu 3. Aug 2009 21:35

Re: labels abspeichern
 
möglichkeiten: http://www.delphipraxis.net/internal...t.php?t=162239

tabl 3. Aug 2009 21:46

Re: labels abspeichern
 
danke für den link
werde warscheinlich auf die ini zurück greifen, scheint mir am einfachsten.

ps: das blöde an der suchfunktion ist das einen die richtigen suchwörter fehlen^^

edit: mir ist grad ne eigene idee gekommen. könnete ich eine klasse oder record basteln die die eigensachaften hat die ich brauch und die dann auf den oben geposten weg speichern?

himitsu 3. Aug 2009 22:03

Re: labels abspeichern
 
Zitat:

Zitat von tabl
edit: mir ist grad ne eigene idee gekommen. könnete ich eine klasse oder record basteln die die eigensachaften hat die ich brauch und die dann auf den oben geposten weg speichern?

ja, solange in dem Record nichts drin ist, was über einen "Zeiger" referenziert wird.
> also String und Co. (abgesehn von statschem Char-Array und ShortStrin), dynamische Arrays, Objekte müssen extra behandelt werden.

tabl 3. Aug 2009 22:06

Re: labels abspeichern
 
edit1:
für alle die die das gleiche problem wie ich haben eine mogliche lösung(über einen hilfrecord:

Delphi-Quellcode:
...
type
  thilflabel = record // definiren des hilfrecord mit den nötigen eigenschaften
    caption : string[100]; // darf kein dynamischer string sein, da sonst ein fehler entsteht
    color : tcolor; // sollte klar sein
  end;
...

var
  hilflblarray : array[0..19] of thilflblarray; //array defeniren, damit man nicht für jedes label einen neuen machen muss
  lblarray2 : array[0..19] of tlabel; // zuweisung sollte klar sein und erspart eine menge schreib arbeit^^
...

procedure TForm2.saveClick(Sender: TObject);
var datei : file of thilflabel;
    i :integer;
begin
  if savedialog.Execute then
  begin
    assignfile(datei,savedialog.FileName);
    try
      rewrite(datei);
      for i:=0 to 19 do
      begin
        hilflblarray[i].caption := lblarray2[i].Caption; // werte in den record übergeben
        hilflblarray[i].color := lblarray2[i].Color;
        write(datei,hilflblarray[i]); // und anschliessen sepichern
      end;
    finally
      closefile(datei);
    end;
  end;
end;

procedure TForm2.LadenClick(Sender: TObject);
var datei : file of thilflabel;
    i :integer;
begin
  if opendialog.Execute then
  begin
    assignfile(datei,opendialog.FileName);
    try
      reset(datei);
      for i := 0 to 19 do
      begin
        read(datei,hilflblarray[i]); // hier das genaze umgekehrt erst in den recor lesen
        lblarray2[i].Caption := hilflblarray[i].caption; // und auf label übertragen
        lblarray2[i].Color := hilflblarray[i].color;
      end;
    finally
      closefile(datei);
    end;
  end;
end;


ps: ich glaub mann braucht kein array sondern kann den record einfach überschreiben^^

edit2: ps2 wenn morgen ans drucken geht fällt mir bestimmt auch nch en prob ein, also stellt euch schonmal drauf ein^^


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:01 Uhr.
Seite 1 von 2  1 2      

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