AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) TCustomControl: Focus erhalten wenn Programm aktiv wird

TCustomControl: Focus erhalten wenn Programm aktiv wird

Ein Thema von DCoderHH · begonnen am 29. Jul 2016 · letzter Beitrag vom 3. Aug 2016
Antwort Antwort
DCoderHH

Registriert seit: 4. Feb 2015
Ort: Hamburg
84 Beiträge
 
Delphi 10 Seattle Professional
 
#1

TCustomControl: Focus erhalten wenn Programm aktiv wird

  Alt 29. Jul 2016, 13:42
Hallo,

ich habe mir ein TCustomControl erstellt. Dieses muss folgende Fälle unterscheiden können:

1) Das Control hat durch einen Mausklick den Fokus erhalten
erkenne ich über MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer);

2) Das Control hat durch die Tab-Taste den Fokus erhalten
erkenne ich über WMSetFocus(...) und dadurch dass MouseDown(...) wurde nicht aufgerufen wurde

3) Das Control hat den Fokus erhalten, als das Programm aktiv wurde
(vorher war ein anderes Programm aktiv, dann wurde das eigene Programm aktiv durch Alt+Tab oder einen Mausklick (nicht auf das TCustomControl))

Wie kann ich nun Fall 3 erkennen?

Geändert von DCoderHH (29. Jul 2016 um 14:27 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: TCustomControl: Focus erhalten wenn Programm aktiv wird

  Alt 30. Jul 2016, 11:33
Indem du auf Delphi-Referenz durchsuchenTApplicationEvents.OnActivate hörst?
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
TOndrej

Registriert seit: 26. Dez 2005
2 Beiträge
 
Delphi XE7 Enterprise
 
#3

AW: TCustomControl: Focus erhalten wenn Programm aktiv wird

  Alt 30. Jul 2016, 12:32
Zum Beispiel:

Delphi-Quellcode:
type
  TMyControl = class(TCustomControl)
  protected
    function MainWndHook(var Message: TMessage): Boolean;
    procedure Paint; override;
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
  end;

constructor TMyControl.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  if not (csDesigning in ComponentState) then
    Application.HookMainWindow(MainWndHook);
end;

destructor TMyControl.Destroy;
begin
  if not (csDesigning in ComponentState) then
    Application.UnhookMainWindow(MainWndHook);
  inherited Destroy;
end;

function TMyControl.MainWndHook(var Message: TMessage): Boolean;
begin
  case Message.Msg of
    CM_ACTIVATE,
    CM_DEACTIVATE:
      Invalidate;
  end;
  Result := False;
end;

procedure TMyControl.Paint;
const
  Colors: array[Boolean] of TColor = (clSilver, clRed);
begin
  Canvas.Brush.Color := Colors[(csDesigning in ComponentState) or Application.Active];
  Canvas.Brush.Style := bsSolid;
  Canvas.FillRect(ClientRect);
end;
Ondrej Kelle

Geändert von TOndrej (30. Jul 2016 um 13:07 Uhr)
  Mit Zitat antworten Zitat
DCoderHH

Registriert seit: 4. Feb 2015
Ort: Hamburg
84 Beiträge
 
Delphi 10 Seattle Professional
 
#4

AW: TCustomControl: Focus erhalten wenn Programm aktiv wird

  Alt 3. Aug 2016, 07:36
@TOndrej: Danke, das ist genau das was ich gesucht habe. Es funktioniert und kann in der Komponenten gekapselt werden.
  Mit Zitat antworten Zitat
TOndrej

Registriert seit: 26. Dez 2005
2 Beiträge
 
Delphi XE7 Enterprise
 
#5

AW: TCustomControl: Focus erhalten wenn Programm aktiv wird

  Alt 3. Aug 2016, 19:12
Gern geschehen!
Ondrej Kelle
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 23:10 Uhr.
Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf