Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Problem beim String bearbeiten/ändern (https://www.delphipraxis.net/94085-problem-beim-string-bearbeiten-aendern.html)

CG2003 15. Jun 2007 23:08


Problem beim String bearbeiten/ändern
 
Hallo,

folgendes Szenario:
Ich habe ein synEdit (txtCode), in dem PHP-Quelltext drin steht.
Gelegentlich kommt es vor, dass dort Sachen, wie zum Beispiel

Code:
  <?=_RENDER_('ProjectType','ProjectName','ProjectParam','ProjectValue','ProjectHTML')?>
Nun möchte ich, das wenn ich mit dem Cursor (Textcursor des SynEdits) in eine Zeile mit o.g. Zeileninhalt springe, er mir die
Werte ("Project...") ausliesst und in einen TValueListEditor á la Objektinspektor anzeigt.
Das macht er auch einwandfrei.

Nun möchte ich jedoch, dass wenn ich diese Werte im TValueListEditor (hier heisst er "propTool") eingebe, er die automatisch in die
zeile des SynEdits übernimmt.


Hier der Quellcode, der fürs Einlesen zuständig ist:

Delphi-Quellcode:
procedure TfrmMain.txtCodeKeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
var
  curPos: Integer;
begin
  propTool.Strings.Clear;
  TA := Pars.Parse(txtCode.Lines[txtCode.CaretY - 1], False);
  Pars.GetTokenValueFirst(T_IDENT,curPos,'_RENDER_');
  if curPos<>-1 then begin
    Pars.GetTokenValueNext(curPos);
    Pars.GetTokenValueNext(curPos);
    propTool.InsertRow('Type',Pars.GetTokenValueNext(curPos),True);
    Pars.GetTokenValueNext(curPos);
    propTool.InsertRow('Name',Pars.GetTokenValueNext(curPos),True);
    Pars.GetTokenValueNext(curPos);
    propTool.InsertRow('Params',Pars.GetTokenValueNext(curPos),True);
    Pars.GetTokenValueNext(curPos);
    propTool.InsertRow('Value',Pars.GetTokenValueNext(curPos),True);
    Pars.GetTokenValueNext(curPos);
    propTool.InsertRow('HTML',Pars.GetTokenValueNext(curPos),True);
  end;
end;


Hier der Quellcode, der fürs übernehmen der Eingaben zusändig sein soll,
aber nicht funktioniert;

Delphi-Quellcode:
procedure TfrmMain.propToolKeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
var
  NewCode, NewLine: String;
  NewType, NewName, NewParams, NewValue, NewHTML: String;
  RowID, CodePos: Integer;
begin
  try
  propTool.FindRow('Type',RowID);
  NewType:=propTool.Cells[1,RowID];
  propTool.FindRow('Name',RowID);
  NewName:=propTool.Cells[1,RowID];
  propTool.FindRow('Params',RowID);
  NewParams:=propTool.Cells[1,RowID];
  propTool.FindRow('Value',RowID);
  NewValue:=propTool.Cells[1,RowID];
  propTool.FindRow('HTML',RowID);
  NewHTML:=propTool.Cells[1,RowID];
  NewCode:='_RENDER_('''+NewType+''','''+NewName+''','''+NewParams+''','''+NewValue+''','''+NewHTML+''');';
  CodePos := txtCode.CaretY;
    txtCode.CaretX := 0;
    txtCode.SelStart := txtCode.CaretX;
    txtCode.SelEnd := Length(txtCode.Lines[txtCode.CaretY]);
    NewLine:=txtCode.Lines[txtCode.CaretY];
    NewLine:=Copy(NewLine,1,CodePos - 1);
    NewLine:=NewLine+NewCode;
    txtCode.Lines[txtCode.CaretY]:='<?='+NewCode+'?>';//NewLine;
    txtCode.Lines[txtCode.SelEnd] := '<?='+NewCode+'?>';
    txtCode.Invalidate;
 except
  end;
Vielleicht habt Ihr ja eine Idee. Vielleicht kann man das Ganze auch vereinfachen.
Ich hoffe jedenfalls, das mir hier irgendjemand dabei helfen kann, denn ich komm echt nicht weiter.

Liebe Grüße!

CG2003 17. Jun 2007 19:24

Re: Problem beim String bearbeiten/ändern
 
*push*

Keiner 'ne Idee???

Die Muhkuh 17. Jun 2007 19:27

Re: Problem beim String bearbeiten/ändern
 
Wäre interessant zu wissen, was genau nicht geht. ;)

CG2003 17. Jun 2007 20:35

Re: Problem beim String bearbeiten/ändern
 
Zitat:

Zitat von Die Muhkuh
Wäre interessant zu wissen, was genau nicht geht. ;)

Nun ja, sobald ich eine solche Zeile in meinem "Objektinspektor" bearbeiten will, wird im SynEdit eine neue Zeile eingefügt, in der die Werte geändert werden. Das ist aber leider nicht Sinn der Sache.

DP-Maintenance 17. Jun 2007 21:03

DP-Maintenance
 
Dieses Thema wurde von "SirThornberry" von "Sonstige Fragen zu Delphi" nach "VCL / WinForms / Controls" verschoben.

CG2003 18. Jun 2007 21:26

Re: Problem beim String bearbeiten/ändern
 
Wirklich keiner 'ne Idee?
Vielleicht hat ja sowas in der Art schon mal jemand in seinen HTML Editor/Notepad-Ersatz oder was auch immer eingebaut, und würde mir evtl. Code zur Verfügung stellen?
Es muss ja nicht zwingend meine Prozedur sein.

Hauptsache, es passiert das, was ich (wie oben beschrieben) möchte.

Wäre für Hilfe sehr dankbar!

Die Muhkuh 18. Jun 2007 22:31

Re: Problem beim String bearbeiten/ändern
 
Hi,

frag mal den mirage228, der hat sowas, meine ich, in seinem Alpha Code Studio drin. ;)

mirage228 19. Jun 2007 10:07

Re: Problem beim String bearbeiten/ändern
 
Hey,

Ich ersetze innerhalb des Ausdrucks (also bei dir zwischen <? und ?>) die entsprechende Eigenschaft durch die neue.
Ich mache das zwar mittels RegEx, aber wenn Du ein Replace('ProjectType_Alt', 'ProjectType_Neu') (oder ggf. auch alle Eigenschaften) durchführst, sollts gehen.

mfG
mirage228

CG2003 19. Jun 2007 10:22

Re: Problem beim String bearbeiten/ändern
 
Zitat:

Zitat von mirage228
Hey,

Ich ersetze innerhalb des Ausdrucks (also bei dir zwischen <? und ?>) die entsprechende Eigenschaft durch die neue.
Ich mache das zwar mittels RegEx, aber wenn Du ein Replace('ProjectType_Alt', 'ProjectType_Neu') (oder ggf. auch alle Eigenschaften) durchführst, sollts gehen.

mfG
mirage228

Ja, so hatte ich das ja auch vor. Nur wie???

mirage228 19. Jun 2007 10:28

Re: Problem beim String bearbeiten/ändern
 
An welcher Stelle genau kommst Du denn nicht weiter?

Anfangs- und Endposition der Ausdrucks (also <? und ?>) hast Du ja und dann weißt du ja den alten Wert und den neuen Wert (bzw. die Werte) und kannst Dann einfach mittels Delphi-Referenz durchsuchenStringReplace oder regulärem Ausdruck ersetzen...

mfG
mirage228

CG2003 19. Jun 2007 11:06

Re: Problem beim String bearbeiten/ändern
 
Zitat:

Zitat von mirage228
An welcher Stelle genau kommst Du denn nicht weiter?

Anfangs- und Endposition der Ausdrucks (also <? und ?>) hast Du ja und dann weißt du ja den alten Wert und den neuen Wert (bzw. die Werte) und kannst Dann einfach mittels Delphi-Referenz durchsuchenStringReplace oder regulärem Ausdruck ersetzen...

mfG
mirage228

So in der Art sollte das mein Code (siehe oben) ja auch machen, aber warum fügt er eine neue Zeile ein in der ich die Werte ändern kann, statt die alte zu nehmen, in der der Cursor steht?

mirage228 19. Jun 2007 12:41

Re: Problem beim String bearbeiten/ändern
 
Delphi-Quellcode:
    txtCode.Lines[txtCode.CaretY]:='<?='+NewCode+'?>';//NewLine;
    txtCode.Lines[txtCode.SelEnd] := '<?='+NewCode+'?>';
Meiner Meinung nach kannst Du SelEnd nicht als Zeilenindex benutzen, evtl. ruht daher der Fehler...

mfG
mirage228

CG2003 19. Jun 2007 13:15

Re: Problem beim String bearbeiten/ändern
 
Hmm, ich probier's mal aus, wenn ich zu Hause bin. Hoffentlich liegt es nur daran!

CG2003 19. Jun 2007 23:22

Re: Problem beim String bearbeiten/ändern
 
Tja, wider erwarten funktioniert es nicht! Gleiches Problem.

Das kann doch nicht wahr sein! Irgendwie verzweifle ich daran langsam... :wall: :wall: :wall:

Hoffe, ihr könnt mir helfen?

Es soll halt nur eine Art "Objektinspektor" für bestimmte Zeilen sein (siehe Muster), in dem ich die 5 Variablen ändern kann. Im Prinzip wie der "Tag Inspektor" im Alpha Code Studio, nur halt mit nur den 5 Variablen.

/EDIT: Es kommt mir vor, als wenn er entweder die Position nicht richtig kriegt, oder die Position falsch "einstellt", bevor er die Zeile "bearbeitet".

CG2003 20. Jun 2007 11:13

Re: Problem beim String bearbeiten/ändern
 
Hallo,

könnte man das sonst mit 'ner Art Search & Replace nur für die Zeile machen?

CG2003 20. Jun 2007 13:53

Re: Problem beim String bearbeiten/ändern
 
@mirage228:

Magst Du mir nicht vielleicht einen Tip geben, wie Du es in Deinem Alpha Code Studio gelöst hast? Du benutzt doch auch SynEdit, oder etwa nicht?

CG2003 21. Jun 2007 15:26

Re: Problem beim String bearbeiten/ändern
 
~push~

CG2003 22. Jun 2007 23:24

Re: Problem beim String bearbeiten/ändern
 
Und ein zweites Mal ~push~.

Es muss doch irgend eine Möglichkeit geben! Ich komm' da echt nicht weiter...

CG2003 26. Jun 2007 00:05

Re: Problem beim String bearbeiten/ändern
 
Ein letztes, um Hilfe bettelndes und verzweifeltes ~push~

mirage228 5. Jul 2007 15:32

Re: Problem beim String bearbeiten/ändern
 
Zitat:

Zitat von CG2003
@mirage228:

Magst Du mir nicht vielleicht einen Tip geben, wie Du es in Deinem Alpha Code Studio gelöst hast? Du benutzt doch auch SynEdit, oder etwa nicht?

Ach sorry hab den Thread total übersehen.

Naja jeden falls mache ich das ganze wie gesagt mit regulären Ausdrücken.
Das Ermitteln der Werte ist ja soweit kein Problem, so wie ich das verstanden habe.

Das Setzen der neuen Werte sollte unabhängig vom Editor (also ob SynEdit oder nicht), funktionieren.

Du kennst den alten Ausdruck und Du kannst den neuen Ausdruck ja anhand der vom Benutzer eingebenen Werte bilden.

Dann musst Du nur noch den alten Ausdruck mittels Delphi-Referenz durchsuchenStringReplace oder anderer Ersetzungsfunktionen durch den neuen ersetzen. Du kannst auch nur die Zeile ersetzen, in der der Ausdruck steht, Du kennst ja die Anfangs- und Endposition des Ausdrucks. Dann einfach (richtig!) mit SelStart/SelLength den alten Ausdruck markieren und mit SelText := ... durch den neuen ersetzen.

An sich nichts allzu kompliziertes würde ich sagen ;)

mfG
mirage228


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