Einzelnen Beitrag anzeigen

marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#9

Re: Tastatureingabe an Formularen

  Alt 7. Sep 2006, 19:17
Hallo.

In meiner Demo bin ich aus Schusseligkeit nicht auf die Sache mit dem KeyPreview eingegangen. Hier eine erweiterte Demo, die etwas Licht auf dieses Problem wirft.

Dazu muss man wissen, dass Borland die ParentForm eines Controls für die Überprüfung der Eigenschaft KeyPreview ermittelt, indem es den Top-Level-Parent des Controls sucht. Dadurch arbeitet KeyPreview bei ChildForms nicht auf die übliche Weise. KeyPreview muss bei der ParentForm von ChildForm gesetzt werden und nur dort wird die Eigenschaft von den VCL-Machern auch ausgewertet.

Es gibt jetzt zwei Strategien zum Umgang mit der Misere - neben dem Ansatz von Frank, den ich mangels Zeit jetzt nicht nachvollzogen habe: Man berücksichtigt die Designschwäche und gestaltet die event handler OnKeyDown() etc. entsprechend (siehe Demo) oder man verkettet die event handler im Ereignis OnCreate() der ChildForm.

Man beachte die von mir überschriebene Funktion GetParentForm():

Delphi-Quellcode:
function GetParentForm(Control: TControl): TCustomForm;
begin
  Result := nil;
  while Assigned(Control.Parent) do
  begin
    Control := Control.Parent;
    if Control is TCustomForm then
    begin
      Result := TCustomForm(Control);
      Break;
    end;
  end;
end;
So erkenne ich im event handler der DemoForm, ob ein Tastendruck auf einem eigenen Control oder einem Control der ChildForm ausgelöst wurde.

marabu
Angehängte Dateien
Dateityp: zip childdemo_204.zip (3,0 KB, 17x aufgerufen)
  Mit Zitat antworten Zitat