![]() |
TStringList => Anordnung der Einträge
Ich habe folgenden Code:
Delphi-Quellcode:
So.. jetzt gelingt es mir nicht z.B. die letzten, sagen wir, 5 Eingaben zu überprüfen, also
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin AllTypedKeys.Add(Key); end; procedure TForm1.Button1Click(Sender: TObject); var i: Integer; begin for i := 0 to AllTypedKeys.Count-1 do showmessage(AllTypedKeys[i]); end; mir etwas anderem zu vergleichen. Wie gehe ich da vor? |
Re: TStringList => Anordnung der Einträge
Möglicherweise löst der Enterdruck beim Schließen von ShowMessage auch beim Edit ein OnKeyPress aus.
So was ähnliches hatte ich auch mal. Pack dir doch mal eine TListBox aufs Form und lass die Eingaben da rein Adden, da siehst du vielleicht mehr? |
Re: TStringList => Anordnung der Einträge
Delphi-Quellcode:
Ok.. sie sind nun alle in der ListBox. Testeingabe im Memo war: 123
ListBox1.Items.AddStrings(AllTypedKeys);
In der ListBox sind sie so 1 2 3. In einer MessageBox wären sie auch untereinander. Wie "schneidet" man denn bei TStringList die letzten 5, oder 6 .. ab? Also ich meine: In der SringList suchen bringt nicht viel. Das habe ich schon alles angetestet. Weil die Einträge j alle Untereinander sind bringt dss nix. |
Re: TStringList => Anordnung der Einträge
Delphi-Quellcode:
müsste gehen.
while StringList.Count > irgendnezahl do StringList.Delete(StringList.Count-1);
|
Re: TStringList => Anordnung der Einträge
Ahh.. ne ich habe mich glaube ich falsch ausgedrückt :wall:
Ich meinte eigentlich, wie man die letzten paar Eingaben, z.B. die letzten 5 Eingaben, aus der Stringlist bekommt und als Zeichenkette in einen String packt . |
Re: TStringList => Anordnung der Einträge
Delphi-Quellcode:
müsste gehen ;)
if StringList.Count > 5 then
for i:=StringList.Count-1 downto 1 do Str:=Str+StringList[i]; |
Re: TStringList => Anordnung der Einträge
Mhh.. ich habs jetzt mal so versucht:
Delphi-Quellcode:
Nur leider überschreitet da etwas das Listenindex.
for i := AllTypedKeys.Count downto AllTypedKeys.Count-3 do
begin Str := AllTypedKeys[i]+Str; Label1.Caption := Str; end; Mit der for-Zeile dachte vom letzten eintrag 3 runter zählen zu können (-3) :idea: |
Re: TStringList => Anordnung der Einträge
Hier mal mein ganzer Code und worum es geht:
Delphi-Quellcode:
Angenommen ich tippe ABC ein, dann sollte dem Code nach, dachte ich, DEF HINTER ABC gesetzt werden aber der macht etwas murks. Heraus kommt: AB DEFC
for i := AllTypedKeys.Count-1 downto 0 do
begin Str := AllTypedKeys[i]+Str; Label1.Caption := Str; end; if Str = 'ABC' then begin Ln := SynMemo1.CaretY; CurPosition := SendMessage(SynMemo1.handle,EM_LineIndex,Ln,0); CurPosition := SynMemo1.SelStart-CurPosition; SynMemo1.SelStart := CurPosition+1; SynMemo1.SelText := 'DEF'; end; |
Re: TStringList => Anordnung der Einträge
Count - 1 !!
Die Zählung beginnt doch bei null und endet daher bei Count-1 |
Re: TStringList => Anordnung der Einträge
hm, beim SynMemo muss ich passen, das kenne ich nicht, steht denn wenigstens im Label das Richtige?
|
Re: TStringList => Anordnung der Einträge
'DEF' noch eine Position später einfügen?
|
Re: TStringList => Anordnung der Einträge
Steht doch da ;) (Ein Post hoch)
Klappen tuts aber irgentwie nicht, ich weis nicht ws falsch ist. .. Aber ich glaube TStringList ist auch nicht dafür geeignet. Denn wenn ich ein paar Leerzeichen eingebe, und dann erst ABC, passiert nix. Zum SynMemo: Ist alles gleich zum Memo. Also wenn es ums Eingeben geht .. alles identisch |
Re: TStringList => Anordnung der Einträge
Zitat:
|
Re: TStringList => Anordnung der Einträge
Warum nicht gleich die Key-Chars in einen String?
Macht vielleicht vieles einfacher? Aus einem String kann man genauso easy Zeichen löschen, hinzufügen, rauskopieren etc. |
Re: TStringList => Anordnung der Einträge
Sind ja nicht immer nur Buchstaben. Manchmal auch Zahlen und so..
Ich probiere grade mal etwas mit Copy, hab da eine Idee melde mich sofort wieder. Ne klappt nicht.. Ok.. abgesehen von allem anderen: Das mit der StringList klappt alleine deswegen nicht, weil, wie oben scon gesagt, wenn ich ein paar Leerzeichen zuerst eingebe, und dann erst ABC, reagiert der nicht mehr auf die IF-Abfrage. Da stimmt nämlich was nicht mit der for-schleife.. Ich dachte eigentlich, dass man sich die anzahl der zeichen in der StringList holen kann, und dann die letzten X in einen string steckt. aber, wie ich ab label sehen kann, macht AllTypedKeys[i]+Str; etwas anderes |
Re: TStringList => Anordnung der Einträge
hm, also ich würde die ganzen Eingabezeichen in einen String adden, den dann vor dem Weiterverarbeiten von evtl. Leerzeichen befreien und dann das ausführen, was notwendig ist.
|
Re: TStringList => Anordnung der Einträge
mh, jetzt mal eine andere frage(hätte ich vielleicht am anfang machen sollen)
ist das überhaupt der richtige ansatz ? also ich mein, wie könnte man soetwas einfacher lösen.. es geht ja nur drum, dass - wenn z.b. ABC eingegeben wurde, DEF hinten dran gehangen wird - |
Re: TStringList => Anordnung der Einträge
Delphi-Quellcode:
So müsste es in etwa gehen.
p:=Pos('ABC', InputStr);
if p > 0 then Insert('DEF',InputStr,p+3); |
Re: TStringList => Anordnung der Einträge
Wenn ins Memo eingegeben wird, könnte man den KeyUp-Event des Memos nutzen und die letzten drei Zeichen vorm Cursor prüfen, wenn es die gesuchte Zeichenkette ist, einfach die dazugehörigen Zeichen an der Cursorposition einfügen.
|
Re: TStringList => Anordnung der Einträge
ich bekomms einfach nicht hin.
Delphi-Quellcode:
wenn dann denn mal ABC da wo die ****'s sind zutrifft passiert einfach nix
procedure TForm1.SynMemo1KeyPress(Sender: TObject; var Key: WideChar);
begin text := SynMemo1.Text; Ln := SynMemo1.CaretY; CurPosition := SendMessage(SynMemo1.handle,EM_LineIndex,Ln,0); CurPosition := SynMemo1.SelStart-CurPosition; end; procedure TForm1.SynMemo1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); begin Caption := '('+IntToStr(CurPosition)+') "' +Copy(SynMemo1.Text, CurPosition-3, 3)+'"'; // nur zum gucken if Copy(SynMemo1.Text, CurPosition-3, 3) = 'ABC' then // **** Insert('CDE', text, CurPosition+3); end; |
Re: TStringList => Anordnung der Einträge
Delphi-Quellcode:
, denn +3 ist doch schon im Nirvana :)
Insert('CDE', text, CurPosition)
|
Re: TStringList => Anordnung der Einträge
Delphi-Quellcode:
Ich hab den total falschen Ansatz :cry:
if Copy(SynMemo1.Text, CurPosition-2, 3) = 'ABC' then // ****
Insert('CDE', text, CurPosition); Das klappt alles nicht .. |
Re: TStringList => Anordnung der Einträge
Lass dir doch mal
Delphi-Quellcode:
in ein Label oder Caption schreiben, was da genau drinsteht, und mal anstelle von Insert einfach nur Memo.Text := Memo.Text+'DEF'.
Copy(SynMemo1.Text, CurPosition-2, 3)
Und vielleicht noch Memo.Refresh aufrufen, falls nix zu sehen ist. |
Re: TStringList => Anordnung der Einträge
Wenn ich jetzt diesen Code nehme:
Delphi-Quellcode:
und direkt am Anfang "ABC" eintippe, passiert nix, gebe ich ein zusätzliches Leerzeichen ein, so kommt DEF.
procedure TForm1.SynMemo1KeyPress(Sender: TObject; var Key: WideChar);
begin text := SynMemo1.Text; Ln := SynMemo1.CaretY; CurPosition := SendMessage(SynMemo1.handle,EM_LineIndex,Ln,0); CurPosition := SynMemo1.SelStart-CurPosition; Caption := '('+IntToStr(CurPosition)+') "' +Copy(SynMemo1.Text, CurPosition-2, 3)+'"'; // nur zum gucken if Copy(SynMemo1.Text, CurPosition-2, 3) = 'ABC' then // **** SynMemo1.Text := SynMemo1.Text+'DEF'; SynMemo1.Refresh; end; Aber das ist es ja auch nicht :? |
Re: TStringList => Anordnung der Einträge
Delphi-Quellcode:
Das funzt bei mir mit nem normalen TMemo.
procedure TForm1.Memo1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
begin if copy(Memo1.Text,Memo1.SelStart-2,3)='ABC' then begin Memo1.Text:=Memo1.Text+'DEF'; Memo1.SelStart:=Length(Memo1.Text); end; end; |
Re: TStringList => Anordnung der Einträge
Delphi-Quellcode:
Ds ist es soweit.
Caption := '('+IntToStr(CurPosition)+') "'
+Copy(SynMemo1.Text, CurPosition-2, 3)+'"'; if Copy(SynMemo1.Text, CurPosition-2, 3) = '[b]' then begin SynMemo1.SelText := '[/b]'; end; Es steht aber in einem unschönen TIMER .. von daher.. das Problem, ist, wenn es im KeyUp/Down steht, kommt es doppelt |
DP-Maintenance
Dieses Thema wurde von "Sharky" von "Programmieren allgemein" nach "Sonstige Fragen zu Delphi" verschoben.
Ist ja eine Delphifrage |
Re: TStringList => Anordnung der Einträge
Dass es doppelt kommt, hat seine Ursache darin, dass bei Loslassen der Shift-Taste auch KeyUp ausgelöste wir, und das TMemo, brav wie es ist, hängt eben noch mal 'DEF' dran. Deshalb hab ich ja nach anhängen von 'DEF' auch gleich den Cursor dahinter gesetzt. Dann trifft die Bedingung nicht mehr zu und es passiert nix.
SelStart repräsentiert immer die Cursor-Position, wenn kein Text selectiert ist, daher
Delphi-Quellcode:
. Dann sind die drei Zeichen davor ja nicht 'ABC' ;)
Memo1.SelStart:=Length(Memo1.Text);
Also nach dem Anhängen gleich Cursor dahinter setzen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:24 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz