AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Nachkomme von TCustomControl bekommt keinen Focus
Thema durchsuchen
Ansicht
Themen-Optionen

Nachkomme von TCustomControl bekommt keinen Focus

Ein Thema von guidobrose · begonnen am 13. Jun 2007 · letzter Beitrag vom 13. Jun 2007
Antwort Antwort
guidobrose
(Gast)

n/a Beiträge
 
#1

Nachkomme von TCustomControl bekommt keinen Focus

  Alt 13. Jun 2007, 13:19
Hallo,

ich habe eine Klasse erzeugt, die ein Nachkomme von TCustomControl ist und damit beim Anklicken auch den Fokus bekommen sollte. Soweit richtig, oder? Anscheinend bekommt meine Komponente jedoch den Fokus nicht, da ein, auf dem selben Panel, vorhandenes TEdit den Fokus nicht verliert (erkennbar am blinkenden Cursor im Edit). Was läuft da verkehrt?

Delphi-Quellcode:
  TXTCheckBox = class(TCustomControl)
  private
    PFState: TCheckBoxState;
    FEnabled: Boolean;
    function GetChecked: Boolean;
    procedure SetChecked(Value: Boolean);
  protected
    procedure Paint; override;
    procedure Toggle; virtual;
    procedure Click; override;
  public
    Caption: TCaption;
    constructor Create(AOwner: TComponent; AParent: TWinControl; ATop:Integer);Reintroduce;
    property State: TCheckBoxState read PFState;
  published
    property Checked: Boolean read GetChecked write SetChecked;
    property Enabled: Boolean read FEnabled write FEnabled default True;
    property OnClick;
    property OnDragDrop;
    property OnDragOver;
    property OnEndDrag;
    property OnMouseDown;
    property OnMouseMove;
    property OnMouseUp;
    property OnEnter;
    property OnExit;
    property OnKeyPress;
    property OnKeyDown;
    property OnKeyUp;
  end;

constructor TXTCheckBox.Create(AOwner: TComponent; AParent: TWinControl; ATop:Integer);
begin
  inherited Create(AOwner);
  Parent:=AParent;
  Top:=ATop;
  Left:=5;
  ControlStyle := [csCaptureMouse, csClickEvents, csDesignInteractive];
  FEnabled := True;
  Width := 117;
  Height := 17;
end;

procedure TXTCheckBox.Paint;
var
   R:TRect;
begin
  with Canvas do
  begin
//Linie und Beschriftung
    Pen.Color:=clXTControlBorder;
    Pen.Width:=1;
    MoveTo(0,Height-2);
    LineTo(Width-16,Height-2);
    Brush.Color:=Color;
    TextOut(2,1,Caption);
//Rechteck
    R.Top:=0;
    R.Left:=Width-16;
    R.Bottom:=16;
    R.Right:=Width;
    Brush.Color:=Color;
    FillRect(R);
    Rectangle(R);
//Checked
    if PFState=cbChecked then
    begin
      Pixels[R.Left+4,R.Top+4]:=clBlack;
      Pixels[R.Left+5,R.Top+5]:=clBlack;
      Pixels[R.Left+6,R.Top+6]:=clBlack;
      Pixels[R.Left+7,R.Top+7]:=clBlack;
      Pixels[R.Left+8,R.Top+8]:=clBlack;
      Pixels[R.Left+9,R.Top+9]:=clBlack;
      Pixels[R.Left+10,R.Top+10]:=clBlack;
      Pixels[R.Left+11,R.Top+11]:=clBlack;
      Pixels[R.Left+4,R.Top+11]:=clBlack;
      Pixels[R.Left+5,R.Top+10]:=clBlack;
      Pixels[R.Left+6,R.Top+9]:=clBlack;
      Pixels[R.Left+7,R.Top+8]:=clBlack;
      Pixels[R.Left+8,R.Top+7]:=clBlack;
      Pixels[R.Left+9,R.Top+6]:=clBlack;
      Pixels[R.Left+10,R.Top+5]:=clBlack;
      Pixels[R.Left+11,R.Top+4]:=clBlack;
    end;
  end;
end;


function TXTCheckBox.GetChecked;
begin
  Result := not(State = cbUnChecked);
end;


procedure TXTCheckBox.SetChecked;
begin
  if Value then
    PFState := cbChecked
  else
    PFState := cbUnChecked;
  Paint;
end;


procedure TXTCheckBox.Toggle;
begin
  Checked := not Checked;
end;


procedure TXTCheckBox.Click;
begin
  if FEnabled then Toggle;
  inherited Click;
end;
Guido
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Nachkomme von TCustomControl bekommt keinen Focus

  Alt 13. Jun 2007, 13:33
Zitat:
Soweit richtig, oder?
Nö.

Setze doch im OnClick-Ereignis den Fokus.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
guidobrose
(Gast)

n/a Beiträge
 
#3

Re: Nachkomme von TCustomControl bekommt keinen Focus

  Alt 13. Jun 2007, 13:56
Aus der Delphi-Hilfe

Zitat:
TCustomControl ist eine von zwei Basisklassen für Steuerelemente, die den Zeichenbereich selbständig darstellen. Da TCustomControl ein Nachkomme von TWinControl ist, können Instanzen seiner Nachkommen den Fokus erhalten und als Container fungieren.
Da bin ich mal von ausgegangen, dass es von TWinControl bereits erledigt wird, aber es funktioniert jetzt. Danke!
  Mit Zitat antworten Zitat
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#4

Re: Nachkomme von TCustomControl bekommt keinen Focus

  Alt 13. Jun 2007, 14:34
imho zwar generell, aber nicht einfach durch Mouseklick ohne Behandlung. Nur bei Aufruf SetFocus.

Gruß oki
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Nachkomme von TCustomControl bekommt keinen Focus

  Alt 13. Jun 2007, 14:49
Zitat:
[b]können[7b] Instanzen seiner nachkommen
Ansonsten solltest du noch TabStop auf True setzen damit man per Tabtaste dein neues Control ansteuern kann.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:12 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