[gelöst] Wie kann man "focused" Komponente erstellen.

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
Bora4d
Beiträge: 290
Registriert: Mo 24. Dez 2007, 13:14
OS, Lazarus, FPC: WinXP-Pro-Sp3, Xubuntu 12.04, (Laz 1.1-SVN Mai2012, FPC 2.6.1 / 2.6.0-Linux)
CPU-Target: AMD64X2

[gelöst] Wie kann man "focused" Komponente erstellen.

Beitrag von Bora4d »

Hallo zusammen,
wißt ihr wie man eine LCL-Komponente erstellt, welche auf Tastatureingaben (focused) reagiert. Ich habe eins geschrieben und das mit einem TCheckBox auf ein Form gepackt. Leider bleibt nur TCheckbox "focused", meine Kompenente bekommt keine Tastatur-Ereignisse auch mit Tabulator-Taste kann ich nicht meine Komponente erreichen.
Hier ist der Quelltext. Was muß ich da machen damit die Komponente wie ein TEdit/TCheckBox Tastatur-Ereignisse empfangen kann?

Code: Alles auswählen

unit testctrl;
 
{$mode objfpc}{$H+}
 
interface
 
uses
  Classes,  SysUtils,  controls;
 
type
  TTestBox = class(TCustomControl)
  private
  protected
    procedure Paint; override;
    procedure KeyDown(var Key: Word; Shift: TShiftState); override;
   procedure MouseDown(Button: TMouseButton; Shift:TShiftState; X,Y:Integer); override; //hinzugefügt
  public
    constructor Create(AOwner: TComponent); override;
    //destructor  Destroy; override;
    function CanFocus: Boolean; override;
  published
    property Caption;
  end;
 
implementation
 
constructor TTestBox.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  //ControlStyle:=ControlStyle-[csNoFocus];
  //ControlStyle:=ControlStyle+[csClickEvents, csCaptureMouse];
  TabStop := True;
end;
 
function TTestBox.CanFocus: Boolean;
begin
  Result:= true;
end;
 
procedure TTestBox.Paint;
begin
  Canvas.TextOut(1,1,Caption);
end;
 
procedure TTestBox.KeyDown(var Key: Word; Shift: TShiftState);
begin
  inherited KeyDown(Key, Shift);
  Caption:='keydown: '+IntToStr(Key); //geändert
  Paint;
end;
 
procedure TTestBox.MouseDown(Button: TMouseButton; Shift:TShiftState; X,Y:Integer); //hinzugefügt
begin
  inherited ;
  SetFocus;
end;
end.
Geändert:
Falls irgendjemand das liest und vielleicht das als Grundlage für sein Komponente verwenden will. Ich habe Code im Posting geändert (siehe //geändert //hinzugefügt) jetzt funktioniert das auch mit Mausklick.
Zuletzt geändert von Bora4d am Sa 24. Apr 2010, 17:17, insgesamt 2-mal geändert.

Benutzeravatar
theo
Beiträge: 10871
Registriert: Mo 11. Sep 2006, 19:01

Re: Wie kann man "focused" Komponente erstellen.

Beitrag von theo »

Wie stellst du fest, dass es nicht geht?
Bei mir auf GTK2 geht das.

Bora4d
Beiträge: 290
Registriert: Mo 24. Dez 2007, 13:14
OS, Lazarus, FPC: WinXP-Pro-Sp3, Xubuntu 12.04, (Laz 1.1-SVN Mai2012, FPC 2.6.1 / 2.6.0-Linux)
CPU-Target: AMD64X2

Re: Wie kann man "focused" Komponente erstellen.

Beitrag von Bora4d »

Es funktioniert tatsächlich auch mit win32. Sorry Leute war blöde Frage :oops:
Nach tastendruck wird Caption geändert vorher hab's im Programm mit "Hallo" belegt aber jetzt funkts bei mir auch.

Antworten