AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Restore last focus

Ein Thema von taaktaak · begonnen am 21. Mai 2008 · letzter Beitrag vom 21. Mai 2008
 
taaktaak

Registriert seit: 25. Okt 2007
Ort: Radbruch
1.990 Beiträge
 
Delphi 7 Professional
 
#1

Restore last focus

  Alt 21. Mai 2008, 22:42
Moin, Moin,
normalerweise ist es wohl uninteressant, welches Control zuletzt den Focus hatte. Für mich gibt es da aber eine Ausnahme: Rufe ich in meinem Programm mit einem Button die Hilfe auf, möchte ich nach Schliessen des Hilfefensters den Focus wieder auf dem zuletzt benutzten Control haben - und nicht auf dem Help-Button. Bisher habe ich das immer recht aufwendig in jedem relevanten Formular lokal programmiert. Blöde Lösung! Heute Abend hatte ich dann eine Idee, die ich dann in folgender Mini-Klasse umgesetzt habe:

Delphi-Quellcode:
unit rzM_WatchFocus;

interface { ----------------------------------------------------------------- }

uses Wintypes,Classes,Controls,Forms;

type TWatchFocus = class(TComponent)

                    private

                     FActControl,
                     FLastControl : TWinControl;
                     procedure SaveFocus (Sender:TObject);

                    public

                     procedure RestoreFocus;
                     constructor Create (AOwner:TComponent); override;
                     destructor Destroy; override;

                    end;

var WatchFocus : TWatchFocus;

implementation { ------------------------------------------------------------ }

procedure TWatchFocus.SaveFocus(Sender:TObject);
begin
  if FActControl=nil then FActControl:=Screen.ActiveControl
                     else begin FLastControl:=FActControl;
                                FActControl :=Screen.ActiveControl
                                end
end;

procedure TWatchFocus.RestoreFocus;
begin
  if FLastControl<>nil then FLastControl.SetFocus
end;

constructor TWatchFocus.Create(AOwner:TComponent);
begin
  inherited Create(AOwner);
  FActControl :=nil;
  FLastControl:=nil;
  Screen.OnActiveControlChange:=SaveFocus
end;

destructor TWatchFocus.Destroy;
begin
  Screen.OnActiveControlChange:=nil;
  inherited Destroy
end;

initialization { ------------------------------------------------------------ }

  WatchFocus:=TWatchFocus.Create(nil);

finalization { -------------------------------------------------------------- }

  WatchFocus.Free;
  WatchFocus:=nil;

end.
Die Anwendung ist denkbar einfach; die Klasse wird lediglich per USES eingebunden. Damit steht dann die Prozedur "RestoreFocus" zur Verfügung. Anwendungsbeispiel:

Delphi-Quellcode:
procedure TfoConfig.buHelpClick(Sender:TObject);
begin
  case PageControl.ActivePageIndex of
    0 : Application.HelpJump('ConfigStartup');
    1 : Application.HelpJump('ConfigColorAlphablend');
    end;

  WatchFocus.RestoreFocus // << Focus wieder auf letztes Control vor HelpButton setzen
end;
Bislang funktioniert das wie gewünscht. Habe ich da mal wieder zu aufwendig gedacht, da Delphi diese Funktionalität schon bietet und ich das nur nicht gefunden habe?

PS:
Kann mir bitte mal einer erklären, wieso TWatchFocus.Create(nil) mit NIL erfolgen muss (hatte erst Self probiert, funktionierte aber nicht)
Ralph
  Mit Zitat antworten Zitat
 


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 11:19 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