![]() |
wie erfahre ich in der Form1 welches Editierfeld gekickt ist
Habe eine Form1 mir zig Editierfeldern
Möchte jetzt die Einfüge-Taste realisieren. Diese Taste kennt man von Word oder anderen editiertools. Hier bis jetzt mein Code:
Delphi-Quellcode:
procedure TForm1.StringEditKeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState); begin {mit der [Einfg]-Taste zwischen Einfüge- und Überschreibmodus wechseln} if (Key=VK_Insert) and (Shift=[]) then schreibmodus.Checked:=not schreibmodus.Checked; end;
Delphi-Quellcode:
WIe man in den Beispiel sieht gibt es probleme wenn ich das für gut 50 Editierfeldern einzeln machen muss. Daher mein ansatz in der Form1 ein KeyPress zu programmieren der ermittelt welches Editierfeld ausgewählt wurde um dann mein Code auszuführen.
procedure TForm1.StringEditKeyPress(Sender: TObject; var Key: Char);
var Zeile : string; CursorPos : integer; begin if schreibmodus.Checked then begin if Key<#32 then Key:=#0 else begin {Aktuelle Einfügeposition merken} CursorPos:=StringEdit.SelStart; {Memotext in einer string-Variablen zwischenspeichern} Zeile:=StringEdit.Text; {Falls sich an der aktuellen Cursorposition ein Windows-Zeilenumbruch befindet, müssen zwei Zeichen (#13=CR und #10=LF) gelöscht werden:} if (Zeile[CursorPos+1]=#13) and (Zeile[CursorPos+2]=#10) then delete(Zeile,CursorPos+1,1); {Das Zeichen an der Einfügeposition löschen} delete(Zeile,CursorPos+1,1); {Memotext aus der string-Variablen zurückladen} StringEdit.Text:=Zeile; StringEdit.SelStart:=CursorPos; end; end; end; Meine bischerigen Ansätze waren:
Delphi-Quellcode:
Ich hoffe doch das mein vorhaben überhaupt machbar ist
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin showmessage(TObject.ClassName); showmessage(TObject.MethodName(TObject.MethodAddress("StringEdit"))); end; |
Re: wie erfahre ich in der Form1 welches Editierfeld gekickt
Mir fallen spontan 2 Möglichkeiten ein: entweder die Methode allgemein machen (d.h. Sender auswerten) und jedem Edit zuweisen oder ActiveControl abfragen.
|
Re: wie erfahre ich in der Form1 welches Editierfeld gekickt
Du kannst alle Edits mit der selben Eventmethode verbinden. Das auslösende edit steht dann im Parameter Sender.
Delphi-Quellcode:
(Sender as TEdit).<Methode> bzw. Property
|
Re: wie erfahre ich in der Form1 welches Editierfeld gekickt
Die Idee von mkinzler gefällt mir sehr...
Nur weiss ich nicht die das zu verstehen ist. Also ich habe jetzt eine Procedure meiner Form1 hinzugefügt und allen Editierfeldern diese beim KeyPress Event zugeordnet. Wie komme ich den Jetzt mit Sender an die Klassennamen?
Delphi-Quellcode:
procedure TForm1.einfuegemodus(Sender: TObject; var Key: Char);
begin with (Sender as TEdit).<Methode> do begin showmessage(ClassName); end; end; |
Re: wie erfahre ich in der Form1 welches Editierfeld gekickt
Delphi-Quellcode:
if Sender is TEdit then
ShowMessage(TEdit(Sender).Name); |
Re: wie erfahre ich in der Form1 welches Editierfeld gekickt
Delphi-Quellcode:
Dieser ist aber immer der selbe, wenn alle TEdits sind.
(Sender as TEdit).ClassName
|
Re: wie erfahre ich in der Form1 welches Editierfeld gekickt
Hab nun
Delphi-Quellcode:
geht aber nicht er mekert bei CursorPos:=TEdit(Sender).Name.SelStart;...
procedure TForm1.einfuegemodus(Sender: TObject; var Key: Char);
begin {if Sender is TEdit then ShowMessage(TEdit(Sender).Name);@WORK} var Zeile : string; CursorPos : integer; begin if schreibmodus.Checked then begin if Key<#32 then Key:=#0 else begin {Aktuelle Einfügeposition merken} CursorPos:=TEdit(Sender).Name.SelStart; {Memotext in einer string-Variablen zwischenspeichern} Zeile:=TEdit(Sender).Name.Text; {Falls sich an der aktuellen Cursorposition ein Windows-Zeilenumbruch befindet, müssen zwei Zeichen (#13=CR und #10=LF) gelöscht werden:} if (Zeile[CursorPos+1]=#13) and (Zeile[CursorPos+2]=#10) then delete(Zeile,CursorPos+1,1); {Das Zeichen an der Einfügeposition löschen} delete(Zeile,CursorPos+1,1); {Memotext aus der string-Variablen zurückladen} TEdit(Sender).Name.Text:=Zeile; TEdit(Sender).Name.SelStart:=CursorPos; end; end; end; |
Re: wie erfahre ich in der Form1 welches Editierfeld gekickt
Lass den Namen weg:
Delphi-Quellcode:
TEdit(Sender).SelStart;
|
Re: wie erfahre ich in der Form1 welches Editierfeld gekickt
Schade das es kein Smile für "mir ist ein Licht aufgegangen" gibt :)
Aber ein :thumb: für deine Antwort gibt es und ein :wall: für meine Frage Danke Jungs !!! :mrgreen: :mrgreen: :mrgreen: |
Re: wie erfahre ich in der Form1 welches Editierfeld gekickt
:coder2: <-- :zwinker:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:18 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 by Thomas Breitkreuz