Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Vereinfachen von Quellcode? (https://www.delphipraxis.net/37926-vereinfachen-von-quellcode.html)

Grolle 12. Jan 2005 12:05


Vereinfachen von Quellcode?
 
Gibt es hierfür eine einfachere Lösung?
Delphi-Quellcode:
begin
     if PageControl1.ActivePage = TabSheet1 then
     SynEdit1.Undo;
     if PageControl1.ActivePage = TabSheet2 then
     SynEdit2.Undo;
     if PageControl1.ActivePage = TabSheet3 then
     SynEdit3.Undo; ..........usw.
end;
Muss ich diesen Ablauf für alle Synedits schreiben,
oder kann man das irgendwie kürzen?
THX: Grolle

Leuselator 12. Jan 2005 12:12

Re: Vereinfachen von Quellcode?
 
das sieht nach einer onKeyDown-Behandlung aus - wenn ja, dann übergibt sie Dir den Sender - den nach Synedit casten und gut. sonst (wenn das ein ButtonPush ist), solltest Du die Synedits in einer TList speichern - dann kannst Du über den Index zugreifen.
Gruß

arbu man 12. Jan 2005 12:14

Re: Vereinfachen von Quellcode?
 
Delphi-Quellcode:
  (FindComponent('SynEdit'+IntToStr(numer)) as TSynEdit).Undo
Und das in eine schleife einbauen

shmia 12. Jan 2005 12:15

Re: Vereinfachen von Quellcode?
 
Delphi-Quellcode:
begin
     case PageControl1.ActivePageIndex of
      0 : SynEdit1.Undo;
      1 : SynEdit2.Undo;
      2 : SynEdit3.Undo;
     end;
end;

mumu 12. Jan 2005 12:17

Re: Vereinfachen von Quellcode?
 
du könntest TabShee1, TabSheet2, usw... in ein Array packen und SynEdit1, SynEdit2, ... in ein zweites Array packen.

und dann das ganze mit einer for-Schleife durchgehen.

Delphi-Quellcode:
for i:=0 to Length(TabSheet_array)-1 do
begin
  if PageControl1.ActivePage = TabSheet_array[i] then
  SynEdit_array[i].Undo;
end;

Grolle 12. Jan 2005 12:32

Re: Vereinfachen von Quellcode?
 
Klasse! Danke für eure Antworten! :corky:
Grolle

Nisbo 26. Mär 2006 17:44

Re: Vereinfachen von Quellcode?
 
habe diesen beitrag durch die suchfunktion gefunden :)

ich habe gerade auch ein Problem mit undo bei SynEdit
wenn man in ein SynEdit per hand schreibt dann kann man:

SynEdit1.undo;

nutzen und es funktioniert auch :)
allerdings füge ich bei mir das ganze mittesl:

SynEdit1.Lines.Add('text');

ein, und da funktioniert es nicht

hat jemand eine idee was ich da falsch gemacht hab ?
bzw wie ich das am besten realisieren kann ?

Matze 26. Mär 2006 18:07

Re: Vereinfachen von Quellcode?
 
Moin

Du kannst versuchen, davor ein

Delphi-Quellcode:
SynEdit.BeginUndo;
und danach ein

Delphi-Quellcode:
SynEdit.EndUndo;
oder so in der Art, zu schreiben. Wenn du allerdings etwas machst wie SynEdit.Text := ... geht das leider nicht.

Nisbo 26. Mär 2006 18:14

Re: Vereinfachen von Quellcode?
 
Delphi-Quellcode:
  SynEdit1.BeginUndo;
  SynEdit1.Lines.Add(sprachvar) ;
  SynEdit1.EndUndo;
geht leider nicht:

[Fehler] Unit1.pas(138): Undefinierter Bezeichner: 'BeginUndo'
[Fehler] Unit1.pas(140): Undefinierter Bezeichner: 'EndUndo'

Matze 26. Mär 2006 18:18

Re: Vereinfachen von Quellcode?
 
Hi,

sorry, hatte es nicht mehr im Kopf, es muss

Delphi-Quellcode:
SynEdit1.BeginUndoBlock;
// ...
SynEdit1.EndUndoBlock;
heißen. Aber das sagt dir auch die Codevervollständigung. :roll:

Nisbo 26. Mär 2006 18:23

Re: Vereinfachen von Quellcode?
 
nee das geht auch nicht genau wie bei deinem Problem damals was ich gerade gefunden hatte :D ;)
http://www.delphipraxis.net/internal...ct.php?t=46333

wie hast du das denn da gelöst gehabt ?

SynEdit1.BeginUndoBlock;
// ...
SynEdit1.EndUndoBlock;

geht auch nicht

genau wie

Form1.SynEdit1.UndoList.BeginBlock;
Form1.SynEdit1.Text := StringReplace(Form1.SynEdit1.Text, Edit1.Text, Edit2.Text, [rfReplaceAll]);
Form1.SynEdit1.UndoList.EndBlock;

aus deinem anderen thread

Matze 26. Mär 2006 18:26

Re: Vereinfachen von Quellcode?
 
Zitat:

Zitat von Nisbo
wie hast du das denn da gelöst gehabt ?

Gar nicht. ;)

Nisbo 26. Mär 2006 18:29

Re: Vereinfachen von Quellcode?
 
also mit anderen worten ich kann meine undo-funktion vergessen ?

ich habe hier schon nen 52-seitiges undo turt gesehen, aber beim besten willen das ist mir zu lang, muß doch irgendwie einfacher gehen :D

C.Schoch 26. Mär 2006 19:10

Re: Vereinfachen von Quellcode?
 
Schau mal hier:
UndoRedo
vieleicht hilft dir das weiter.

Nisbo 26. Mär 2006 19:13

Re: Vereinfachen von Quellcode?
 
das ist genau dieses 52-seitige teil was ich meinte :D

hatte ich inzwischen auch schonmal versucht zu installieren, aber trotz keiner fehlermeldung gibt es keine komponenten
die demos die es da gibt kann mann zwar öffnen aber da sind dann ur ca 20 zeilen code drinn und ohne form

ist also nichts für mich sondern wohl eher was für hardcode-delphi-schrauber :D

Nisbo 26. Mär 2006 19:57

Re: Vereinfachen von Quellcode?
 
habe jetzt eine notlösung gefunden wie man ein einfaches undo / redo hinbekommt, ist aber nicht wirklich zufriedenstellend :(

man nehme noch 2 zusätzliche SynEdits und setze diese auf visible := false
diese werden dann als zwischenspeicher verwendet

mit den undo und redo buttons wird dann dieser code ausgeführt

Delphi-Quellcode:
// Undo
procedure TForm1.ToolButton7Click(Sender: TObject);
begin
  SynEdit3.Lines := SynEdit1.Lines; // aktueller text sichern
  SynEdit1.Lines := SynEdit2.Lines; // backup einfügen
  SynEdit2.Lines := SynEdit3.Lines; // backup durch aktuellen text ersetzen

  ToolButton7.enabled := false;
  ToolButton9.enabled := true;
end;

// Redo
procedure TForm1.ToolButton9Click(Sender: TObject);
begin
  SynEdit3.Lines := SynEdit1.Lines; // aktueller text sichern
  SynEdit1.Lines := SynEdit2.Lines; // backup zurückschreiben
  SynEdit2.Lines := SynEdit3.Lines; // backup durch aktuellen text ersetzen

  ToolButton7.enabled := true;
  ToolButton9.enabled := false;
end;
die beiden buttons immer abwechselnd enabled oder disabled

beim schreiben neuer zeilen wird vor den einfügen immer

SynEdit2.Lines := SynEdit1.Lines;

gemacht um den aktuellen zwischenspeicher zu lesen sowie der redobutton aus und der undo button eingeschaltet

ToolButton9.enabled := false;
ToolButton7.enabled := true;

vielleicht hilft es ja einen der das topic durch die suche findet ;)

Elvis 26. Mär 2006 20:10

Re: Vereinfachen von Quellcode?
 
Zitat:

Zitat von Nisbo
man nehme noch 2 zusätzliche SynEdits und setze diese auf visible := false
diese werden dann als zwischenspeicher verwendet

Du hast nicht zufällig vorher mit VisualBasic "programmiert"? Ich hätte schon nach deinem vorherigen Beitrag eine mittelgroße Summe darauf gewettet, jetzt bin ich mir absolut sicher. :wall:

*blacklist vorkramt*

xaromz 26. Mär 2006 20:14

Re: Vereinfachen von Quellcode?
 
Hallo,

ich hab hier vor Kurzem einen Artikel über das Realisieren von Undo/Redo geschreiben. Vielleicht ist das ja was.

Gruß
xaromz

Matze 26. Mär 2006 20:18

Re: Vereinfachen von Quellcode?
 
Zitat:

Zitat von Nisbo
habe jetzt eine notlösung gefunden wie man ein einfaches undo / redo hinbekommt, ist aber nicht wirklich zufriedenstellend :(

Dies lasse ich mal unkommentiert stehen. ^^

Als Zwischenspeicher könntest du auch zwei TStringLists nutzen, wenn du das so lösen magst.

Nisbo 26. Mär 2006 20:24

Re: Vereinfachen von Quellcode?
 
Zitat:

Zitat von Elvis
Zitat:

Zitat von Nisbo
man nehme noch 2 zusätzliche SynEdits und setze diese auf visible := false
diese werden dann als zwischenspeicher verwendet

Du hast nicht zufällig vorher mit VisualBasic "programmiert"? Ich hätte schon nach deinem vorherigen Beitrag eine mittelgroße Summe darauf gewettet, jetzt bin ich mir absolut sicher. :wall:

*blacklist vorkramt*

nein mit vB hatte ich nichts zu tun, nur mal mit Lazarus aber das ist ja fast wie Delphi :D
normalerweise programmiere ich in php in verbindung mit mysql

aber was hat das jetzt mit den zwischenspeichern zu tun ?
var tttt : tstrings;

hat es nicht getan, deswegen habe ich reale SynEdits genommen :D

@ xaromz

thx ich schaue mal

@ Matze

da stande ich dann wohl neben mir, hatte nicht TStringLists versucht sondern tstrings und das hatte nicht funktioniert


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:33 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