Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   FormKeyDown ActiveControl.name ist immer leer (https://www.delphipraxis.net/191542-formkeydown-activecontrol-name-ist-immer-leer.html)

cramer 26. Jan 2017 10:16

Delphi-Version: 2006

FormKeyDown ActiveControl.name ist immer leer
 
Hallo,

ich habe eine Form mit einigen TcxTabSheets auf denen sich etliche tcxTextEdit Felder befinden.
Form1 ist das einzige und das Main Form.

Per HotKey z.B. F2 soll "Mach etwas im fokussierten Edit Feld" gestartet werden.
Delphi-Quellcode:
procedure TFORM1.FormKeyDown( Sender: TObject; var Key: Word; Shift: TShiftState );
begin
   if key = vk_F2 then begin
      ShowMessage( ( sender as tcomponent ).name + ' - ' +
                    '(' + form1.ActiveControl.Name + ')' + ' - ' +
                    '[' + screen.ActiveControl.Name  + ']');
   end;
end;
Wenn man den Cursor in ein Editfeld plaziert und F2 drückt, ist das Ergebnis aber "FORM1 - () - []"
:(
Gibts ne andere Lösung um an das fokussierte Feld zu kommen:?:

himitsu 26. Jan 2017 10:41

AW: FormKeyDown ActiveControl.name ist immer leer
 
MDI: Da ist das immer nur in der äußersten Form zu finden.

Ansonsten sollte es eigentlich funktionieren.
Bei FMX gibt/gab es da aber mal ein Problemchen.


ABER, da es bei dir ein Leerstring ist und nicht knallt (Zugriffsverletzung bei Adresse 0),
wird die Komponente einfach keinen Namen haben. :zwinker:

z.B. bei DevExpress und Grids, wo der Fokus nicht im Control, sondern in einem (meist/oft) namenlosen InnerControl liegt.
Delphi-Quellcode:
ActiveControl.Parent.Name
Delphi-Quellcode:
if key = vk_F2 then begin
   ShowMessage( (Sender as TComponent).ClassName + ' ' + (Sender as TComponent).Name + ' - ' +
                 '(' + {FORM1}Self.ActiveControl.ClassName + ' ' + {FORM1}Self.ActiveControl.Name + ')' + ' - ' +
                 '[' + Screen.ActiveControl.ClassName + ' ' + Screen.ActiveControl.Name + ']');
end;

cramer 26. Jan 2017 10:51

AW: FormKeyDown ActiveControl.name ist immer leer
 
:thumb: Vielen Dank,
genau das war das Problem, so klappts wie erwartet.
Delphi-Quellcode:
procedure TFORM1.FormKeyDown( Sender: TObject; var Key: Word; Shift: TShiftState );
begin
   if key = vk_F2 then begin
      ShowMessage( ( sender as tcomponent ).name + ' - ' +
                    '(' + form1.ActiveControl.Parent.Name + ')' + ' - ' +
                    '[' + screen.ActiveControl.Parent.Name + ']');
   end;
end;
Das Ergebnis ist jetzt "FORM1 - (EDIT1) - [EDIT1]"

himitsu 26. Jan 2017 14:12

AW: FormKeyDown ActiveControl.name ist immer leer
 
Wenn du keine gekapselten Controls hast, klappt das so nicht.
Am Einfachsten den Namen auslesen und wenn leer, dann in ner Schleife zum nächsten Parent gehten usw.


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