SynEdit vergleichen

Rund um die LCL und andere Komponenten
Antworten
Marcus
Beiträge: 5
Registriert: Sa 2. Dez 2006, 13:57

SynEdit vergleichen

Beitrag von Marcus »

Hallo,

ich hab vor nicht all zu langer Zeit mit Delphi angefangen. Genauer gesagt mit den schönen Lazarus, weil ich hauptsächlich unter Linux arbeite.

Nun hab ich folgendes problem:
ich wollte erstmal nen klienen Editor schreiben. Bei diesen wollte ich es schaffen, dass, wenn man eine offene datei ändert, man beim schließen oder den öffnen einer neuen Date darauf aufmerksam gemacht wird, das die Änderungen noch nicht gespeichert wurden. Ich habe dazu 2 synEdit verwendet. Die eine ist sichtbar und in ihr arbeitet man, die andere ist unsichtbar und enthält den ungeänderten Inhalt der ersten.
Um das zu realisieren hab ich schon was geschrieben:

Code: Alles auswählen

procedure TForm1.AenderungenSpeichern(Sender: TObject);
var i, Zeilenanzahl, Nachfrage: Integer;
    Speichernnotwendig: boolean;
begin
  if SynEdit1.Lines.Count < SynEdit2.Lines.Count then
  begin
    Zeilenanzahl := SynEdit2.Lines.Count - 1;
  end
  else
    Zeilenanzahl := SynEdit1.Lines.Count - 1;
 
  //Vergleichen der Textfelder
  for i := 0 to Zeilenanzahl do
  begin
    if SynEdit2.Lines[i] <> SynEdit1.Lines[i] then
    begin
       Speichernnotwendig := true;
       break;
    end;
  end;
 
  //Falls Notwendig Speichern
  if Speichernnotwendig = true then
  begin
    Nachfrage := Application.MessageBox('Wollen Sie die Änderungen speichern?', 'Ungespeicherte Änderungen!', MB_ICONINFORMATION+MB_YESNO);
    if Nachfrage = IDYES then
    begin
      //Ist die Datei schonmal gespeichert?
      if OffeneDatei <> '' then {ja}
      begin
        SpeichernItemClick(Sender);
      end
      else {nein}
      begin
        SpeichernUnterItemClick(Sender);
      end;
    end;
  end;
end;


nun leider geht das nicht so recht. Selbst wenn man nichts macht und ne datei öffnen will (dann wird u.a. die obenstehende Prozedur aufgerufen) kommt das Dialogfensterchen mit der Frage ob man die Änderungen speichern will, obwohl es da nix geändertes gibt.

Wo liegt mein Fehler???

Bin dankbar für jede antwort.

MfG Marcus

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Re: SynEdit vergleichen

Beitrag von theo »

Autsch!

Schon mal daran gedacht die Eigenschaft "modified" abzufragen?

Marcus
Beiträge: 5
Registriert: Sa 2. Dez 2006, 13:57

Beitrag von Marcus »

Ähm, nein. Wie gesagt ich habe erst vor nicht all zu langer Zeit mit Object Pascal angefangen.
Ich habe soeben meinen Fehler gefunden und muss sagen: "Man bin ich bescheuert!": ich habe vergessen die Variable Speichernnotwendig auf false zu setzen.

Danke Theo so geht es leichter. Ich kannte diese eigenschft noch nicht. Jedoch bekommt man auch wenn man etwas geändert und dann noch die Änderung rückgängig angezeit, das sich was geändert habe und das wollte ich vermeiden.

MfG Marcus

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Beitrag von theo »

Marcus hat geschrieben:Ähm, nein. Wie gesagt ich habe erst vor nicht all zu langer Zeit mit Object Pascal angefangen.


Auch wenn du der Eigenschaft modified nicht kennst, die Technik die du
anwendest mit dem unsichtbaren Synedit2 ist nicht gerade schlau.

Eigentlich bräuchtest Du nur einen String um die alte Version zu puffern, und dann kannst du vergleichen:

Geaendert:=Synedit1.Text<>OldText;
OldText:=Synedit1.Text;

Marcus hat geschrieben:Danke Theo so geht es leichter. Ich kannte diese eigenschft noch nicht. Jedoch bekommt man auch wenn man etwas geändert und dann noch die Änderung rückgängig angezeit, das sich was geändert habe und das wollte ich vermeiden.


Bei mir funktioniert das. Wenn ich alle Änderungen rückgängig mache (ctrl-Z) wird auch "modified" wieder false

Marcus
Beiträge: 5
Registriert: Sa 2. Dez 2006, 13:57

Beitrag von Marcus »

Danke für deine Hilfe, Theo.

Nur noch eine Frage: Warum ist das verwenden eines unsichtbaren zweiten SynEdit nicht gerade schlau? Es geht doch. Oder gibt es da etwas, das ich nicht weiß warum das schlechter ist? (Nehme ich mal an)

monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

Beitrag von monta »

Marcus hat geschrieben:Nur noch eine Frage: Warum ist das verwenden eines unsichtbaren zweiten SynEdit nicht gerade schlau? Es geht doch. Oder gibt es da etwas, das ich nicht weiß warum das schlechter ist? (Nehme ich mal an)


Naja, deine visuelle Komponete ist ja letztlich in dieser Umgebung völlig sinnlos, wenn sie ständig versteckt ist. Allerdings erzeugst du natürlich mit jeder Komponenten auch einen gewissen Overhead und verbrauchst ressourcen. Das mag mit einigen Komponenten nicht so ins Gewicht fallen, nur es geht halt auch um die Sache an sich.
Wieso sollte man auch eine zweite Komponenten erzeugen und mühsam über diese gehen, wenn es mit einer einfachen Stringvariable übersichtlicher, einfacher und vor allem auch Ressourcenschonender geht.

Hinzu kommt, das es so natürlich auch zur Entwicklung sehr unübersichtlich werden kann, wenn man nun mehrere solcher Felder verwendet.

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Das is ganz einfach visual basic programmer style. Ich rauf mir immer die haare aus wenn ich seh wie unsere visual basic experten programmieren. "Was wir müssen 5 serielle ports unterstützen kein problem, einfach 5 TCompost ActiveX projekte auf das Form com1...com5 eingetragen fertig."

...
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Marcus
Beiträge: 5
Registriert: Sa 2. Dez 2006, 13:57

Beitrag von Marcus »

Danke für eure Antworten. Das wusste ich noch nicht. Den Fehler werde ich nicht wieder machen.

MfG Marcus

@ Christian: Ich habe nie Visual Basic programmiert und werde es vermutlich auch nie zun.

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Das wollt ich dir auch nicht unterstellen ich meinte nur rad verleitet manchmal halt zu solchen unsinnigkeiten.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Antworten