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 Überschreib-Funktion von Zeichen im TEdit-Feld (https://www.delphipraxis.net/142256-ueberschreib-funktion-von-zeichen-im-tedit-feld.html)

Ginko 24. Okt 2009 18:25


Überschreib-Funktion von Zeichen im TEdit-Feld
 
Hallo gibt es beim Edit-Feld die Möglichkeit, dass wenn etwas hinein geschrieben wird nur überschrieben wird und nicht eingefügt wird?

fkerber 24. Okt 2009 18:28

Re: Überschreib Funktion von Zeichen im TEdit-Feld
 
Hi!

Also das quasi immer das nächste Zeichen gelöscht wird und dann das aktuelle eingefügt wird?
Da gibt es doch eigentlich die Einf.-Taste für - vllt. lässt sich damit was machen?

Ansonsten "zu Fuß"
Wenn neues Zeichen kommt (onKeyDown/Press) zuerst ein Zeichen löschen, also Entf-Taste senden, dann das neue Zeichen durchlassen.


Grüße, Frederic

Ginko 24. Okt 2009 18:32

Re: Überschreib-Funktion von Zeichen im TEdit-Feld
 
Ja habe ich auch schon überlegt, werds mal testen danke.

fkerber 24. Okt 2009 18:43

Re: Überschreib-Funktion von Zeichen im TEdit-Feld
 
Hi!

Die Frage wäre, ob du nicht das drücken der Entf-Taste simulieren kannst...


Grüße, Frederic

Ginko 24. Okt 2009 18:51

Re: Überschreib-Funktion von Zeichen im TEdit-Feld
 
Hi ich habs mal so versucht:

Delphi-Quellcode:

procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  tmp := chr(Key);
  Key := 127;
end;


procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
  Key := tmp;
end;
klappt aber nicht.... :?

DeddyH 24. Okt 2009 19:07

Re: Überschreib-Funktion von Zeichen im TEdit-Feld
 
Ginge das nicht auch so?
Delphi-Quellcode:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
  Edit1.Text := Copy(Edit1.Text, 1, Length(Edit1.Text) - 1) + Key;
end;
Wobei man vielleicht vorher die Länge des enthaltenen Textes untersuchen sollte.

Ginko 24. Okt 2009 19:14

Re: Überschreib-Funktion von Zeichen im TEdit-Feld
 
Nein klappt leider nicht

DeddyH 24. Okt 2009 19:18

Re: Überschreib-Funktion von Zeichen im TEdit-Feld
 
Soll denn immer nur das eingegebene Zeichen im Edit stehen?

fkerber 24. Okt 2009 19:21

Re: Überschreib-Funktion von Zeichen im TEdit-Feld
 
Hi!

Nein, ich denke, er meint sowas.

Alter Inhalt:

AB|CDE - Cursor an der Stelle, wo der | ist


Eingabe von F - dann soll da stehen:

ABFDE



Grüße, Frederic

DeddyH 24. Okt 2009 19:24

Re: Überschreib-Funktion von Zeichen im TEdit-Feld
 
Ich weiß nicht, wie Du zu der Annahme kommst. Allerdings sehe ich außer editierten Beiträgen und "klappt nicht" nicht Verwertbares :?

Ginko 24. Okt 2009 19:25

Re: Überschreib-Funktion von Zeichen im TEdit-Feld
 
Ja genau so meinte ich es wie fkerber es schreibt. Also genau wie wenn man in Delphi mal ausversehen auf die "Einfg" Taste kommt und alles beim Tippen überschrieben wird und man sich furchtbar aufregt...

DeddyH 24. Okt 2009 19:31

Re: Überschreib-Funktion von Zeichen im TEdit-Feld
 
Achso. Neue Idee:
Delphi-Quellcode:
Edit1.Text := Copy(Edit1.Text, 1, Edit1.SelStart) + Key + Copy(Edit1.Text, Edit1.SelStart + 1, Length(Edit1.Text));

Ginko 24. Okt 2009 19:42

Re: Überschreib-Funktion von Zeichen im TEdit-Feld
 
Mit SelStart bekommt man nur die Position wenn ein Zeichen auch selektiert ist, klappt also nicht.

DeddyH 24. Okt 2009 19:43

Re: Überschreib-Funktion von Zeichen im TEdit-Feld
 
Sicher? Ich hab gerade kein Delphi zur Hand, aber war der Meinung, dass man damit die Cursorposition innerhalb des Edits bekommt.

Ginko 24. Okt 2009 19:45

Re: Überschreib-Funktion von Zeichen im TEdit-Feld
 
Ja sicher habs getestet ohne das was markiert ist steht SelStart immer auf der Endnummer des Strings, also auf Length(Edit1.Text).

DeddyH 24. Okt 2009 19:48

Re: Überschreib-Funktion von Zeichen im TEdit-Feld
 
Auch, wenn Du vorher mal die "Pos1" bzw. "HOME"-Taste drückst?

Ginko 24. Okt 2009 19:55

Re: Überschreib-Funktion von Zeichen im TEdit-Feld
 
Nein bringt auch nix, ich denk nochmal drüber nach

Hab es, es ist doch einfacher als ich dachte trotzdem danke :

Delphi-Quellcode:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
  keybd_event(VK_DELETE, 0, 0, 0);
  keybd_event(VK_DELETE, 0, KEYEVENTF_KEYUP, 0);
end;

das wars schon...

DeddyH 24. Okt 2009 20:00

Re: Überschreib-Funktion von Zeichen im TEdit-Feld
 
Das wäre durch Einfügen und Löschen aber auch gegangen, statt in den Tastaturpuffer zu schreiben. Aber meinetwegen.

DP-Maintenance 24. Okt 2009 20:19

DP-Maintenance
 
Dieses Thema wurde von "Daniel" von "Object-Pascal / Delphi-Language" nach "VCL / WinForms / Controls" verschoben.
Scheint eine VCL-Frage zu sein

Lannes 24. Okt 2009 22:12

Re: Überschreib-Funktion von Zeichen im TEdit-Feld
 
Hallo,
Zitat:

Zitat von Ginko
Ja sicher habs getestet ohne das was markiert ist steht SelStart immer auf der Endnummer des Strings, also auf Length(Edit1.Text).

dann war Dein Testansatz falsch :|

Der imho beste Weg das Überschreiben zu realisieren, ist es in OnKeyDown eine entsprechende Selektion vorzunehmen:
Delphi-Quellcode:
if (Key > 31) and (Edit.SelLength = 0) then
  Edit.SelLength := 1;

DeddyH 24. Okt 2009 22:16

Re: Überschreib-Funktion von Zeichen im TEdit-Feld
 
Ein etwas anderer Ansatz, aber immerhin Unterstützung, thx ;) (hatte schon an meinem Verstand gezweifelt)

Lannes 24. Okt 2009 22:21

Re: Überschreib-Funktion von Zeichen im TEdit-Feld
 
die Unterstützung hast Du dir auch redlich verdient, mit Deiner Engelsgeduld :angel2:

DeddyH 24. Okt 2009 22:25

Re: Überschreib-Funktion von Zeichen im TEdit-Feld
 
Hoffentlich zahlt sich die auch mal aus ;)

Ginko 25. Okt 2009 09:51

Re: Überschreib-Funktion von Zeichen im TEdit-Feld
 
Ja da hab ich scheinbar irgendwas falsch gemacht :roll:
Danke Lannes, die Lösung ist natürlich um einiges besser als meine, allerdings kann ich die Cursortaste jetzt mit den Pfeiltasten immer nur um eins nach links verschieben gibts da ne Lösung für ?


[Edit]
Hat sich geklärt mit den Pfeiltasten, die sind ja über Ascii 31 noch mit drinn also rausmachen dann klappts...


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