Autor Beitrag
lightswitch
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Di 15.03.05 15:12 
Hallihallo,

ich habe ein Problem und zwar:
Ich habe zwei Listboxen und kann zu beiden Einträge hinzufügen und auch löschen.
Diese Listen kann man dann speichern.

Wie mache ich es nun, dass das Programm erkennt, ob etwas geändert wurde und dann ein fenster erscheint "wollen Sie die Änderungen speichern?"?
Und wenn nichts geändert wurde, dann soll das Programm einfach schließen.

helft mir

lightswitch

PS:schon mal danke für die hilfe
WeBsPaCe
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 2322
Erhaltene Danke: 1

FireFox 3, Internet Explorer 6 SP1
D1, D3Prof, D6Pers, D7Pers+Indy, VisualStudio Express
BeitragVerfasst: Di 15.03.05 15:14 
:welcome: im DF!!! :D

Wenn mich nicht alles täuscht gibt es das OnChange Ereignis bei TListBox. Da schreibst du dir dann einfach irgendwie sowas rein, dass eine ganz normale Boolean-Variable (z.B. HasChanged) auf True gesetzt wird. Beim Beenden des Programms kannst du dann abfragen, ob HasChanged True ist oder False und dann dementsprechend handeln. ;)

//EDIT: Du kannst auch einfach mal deinen Code posten!! ;)
Karlson
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 2088



BeitragVerfasst: Di 15.03.05 15:33 
Ein solches Event gibt es nicht.
Da du ja ohnehin codegebunden mit der Listbox arbeiten musst.
Wenn jemand etwas löscht bzw. hinzufügt einfach die von Webspace angesprochene Variable benutzen, und im On Close derren Wert abfragen.

Du kannst jetzt zwar so argumentieren und sagen wenn jemand eine Zeile hinzufügt und genau diese dann löscht, dann hat sich der Inhalt der Listboxen zwar nicht verändert, aber der Speicherndialog kommt trotzdem.
Das ist allerdings in Ordnung, alle Programme mit dieser Funktion machen es genauso. Sobald du im QT Editor von Delphi irgendwo ein unwichtiges Leerzeichen einfügst wirst du gefragt ob abgespeichert werden soll.

Andere Wege wären völlig übertrieben. Schließlich speichert man lieber einmal zu oft als einmal zu wenig ab.
WeBsPaCe
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 2322
Erhaltene Danke: 1

FireFox 3, Internet Explorer 6 SP1
D1, D3Prof, D6Pers, D7Pers+Indy, VisualStudio Express
BeitragVerfasst: Di 15.03.05 15:39 
user profile iconKarlson hat folgendes geschrieben:
Ein solches Event gibt es nicht.

*mist*e!!
^^Und das steht eigentlich nicht so da, sondern ist zensiert!! :rofl:

user profile iconKarlson hat folgendes geschrieben:
Da du ja ohnehin codegebunden mit der Listbox arbeiten musst.
Wenn jemand etwas löscht bzw. hinzufügt einfach die von Webspace angesprochene Variable benutzen, und im On Close derren Wert abfragen.

Jo. Deshalb ja der Edit.. ;) Dann kannste ihm gleich sagen, wo's hinmuss, wenn er's nich weiß, wa?? :) Egal...

Was du ja auch machen kannst ist, dass du am Anfang deinen ListBox-Inhalt in ne Variable schreibst und dann am Ende abfragst, ob's das selbe ist... Aber das hast du mit "Andere Wege wären völlig übertrieben." gemeint, oder Karlson??

PS: Ist es euch zu viel, meinen Namen zu schreiben?? :rofl:
user profile iconKarlson hat folgendes geschrieben:
die von Webspace angesprochene
lightswitch
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 16.03.05 15:21 
ich habe jetzt das problem gelöst, dank eurer hilfe.

ich lese die einträge auch gleich in eine andere listbox ein und vergleiche dann die summe der strings beider listboxen.

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
procedure TForm1.Schliessen(Sender: TObject; var Action: TCloseAction);
var button,i:integer;
  zahl,zahlende: string;
begin

 zahlende:='';
        for i:=0 to Form1.Listbox1.Items.Count-1 do   //das ist die listbox, wo man hinzufüger und löschen kann.
        begin
         zahlende:=zahlende+Form1.Listbox1.Items[i];
        end;
      
     zahl:='';
        for i:=0 to Form4.Listbox1.Items.Count-1 do   //das ist die listbox die nicht verändert wird 
                                                      //und die anfangswerte aufweist
        begin
         zahl:=zahl+Form4.Listbox1.Items[i];
        end;
  
 if (zahlende<>zahl)                  //wenn die beiden werte ungleich sind, dann soll er nach dem speichern fragen
 then begin
button:=Application.messagebox(PChar('Wollen Sie die Liste vor dem Schließen speichern?'), 'Hinweis',Mb_YESNO);

        case button of

        IDYES:
           begin
                Speichern(Sender);
           end;

        end{of case}
       end

end;


und es funktioniert.
danke.

MFG lightswitch