![]() |
Objekt, was zuvor den Fokus hatte ermitteln
Hallo Zusammen,
ich möchte gerne die Eigenschaften eines RichEdits ändern (Schrift). Wenn ich aber auf das Objekt zur Schriftauswahl klicke, verliert mein RichEdit seinen Fokus. Meine Überlegung: 1. Kann ich verhindern, dass das RichEdit den Fokus verliert? 2. Kann ich ermitteln, welches Objekt direkt vorher den Fokus hatte? Vielen Dank Ykcim |
AW: Objekt, was zuvor den Fokus hatte ermitteln
Du musst die Markierung bzw. das zuletzt fokusierte Element selbst zwischenspeichern.
|
AW: Objekt, was zuvor den Fokus hatte ermitteln
In einer globalen Variable?
Das ist eine unschöne Lösung, die ich auch verwendet habe, die mir aber nicht gefällt... Geht das nicht anders? Gruß Ykcim |
AW: Objekt, was zuvor den Fokus hatte ermitteln
Es gibt Messages im Delphi, welche rumwandern, wenn der Fokus sich ändert.
Da kann man sich z.B. mit TApplicationEvent.OnMessage dranhängen und sich dort das Gewünschte speichern. |
AW: Objekt, was zuvor den Fokus hatte ermitteln
Nimm diese Form als Template für alle anderen Forms und du hast:
Delphi-Quellcode:
unit ViewTemplate;
interface uses Winapi.Windows, System.Classes, Vcl.Forms, Vcl.Controls; type TfrmTemplate = class( TForm ) private FCurrentControl : TWinControl; FLastActiveControl : TWinControl; FOnFocusChanged : TNotifyEvent; protected procedure CMFocusChanged( var Message : TCMFocusChanged ); message CM_FOCUSCHANGED; public function BackToLastActiveControl : Boolean; published property LastActiveControl : TWinControl read FLastActiveControl; property OnFocusChanged : TNotifyEvent read FOnFocusChanged write FOnFocusChanged; end; var frmTemplate : TfrmTemplate; implementation {$R *.dfm} { TfrmTemplate } function TfrmTemplate.BackToLastActiveControl : Boolean; begin Result := False; if Assigned( LastActiveControl ) and LastActiveControl.CanFocus then begin LastActiveControl.SetFocus; Result := True; end; end; procedure TfrmTemplate.CMFocusChanged( var Message : TCMFocusChanged ); begin FLastActiveControl := FCurrentControl; FCurrentControl := ActiveControl; if Assigned( OnFocusChanged ) then OnFocusChanged( Self ); end; end. |
AW: Objekt, was zuvor den Fokus hatte ermitteln
Hallo Sir Rufo,
VIELEN DANK! Ich habe es in mein Form eingebaut. Ich musste leider aber trotzdem eine Zwischenspeicherung in eine globale Variable vornehmen, denn 1. wenn ich das DropDownMenü für die Schriftart öffne und eine Schriftart auswähle ist ActiveControl und LastActiveControl nil... 2. wenn ich in das Auswahlfeld klicke um die Schrift reinzuschreiben ist ActiveControl die SchriftCombo und LasActiveControl die Ribbon-Registrierkarte... Schade, hatte mir sehr gut gefallen und werde ich sichernoch später in meinem Projekt verwenden können. Daher nochmals meinen Dank Gruß Ykcim |
AW: Objekt, was zuvor den Fokus hatte ermitteln
Ich weiß nicht warum du immer auf dieser globalen Variablen herumreitest.
Leg das einfach in einer Klassenvariablen ab und gut ist ;) Wenn du solche Spezialfälle hast, dann kannst du aber bestimmt diese auch eingrenzen z.B. es wird sich nur das Control gemerkt, wo der Parent die Form direkt ist, oder wer auch immer. Oder eben nicht, wenn der Parent die Menüleiste ist ... die Möglichkeiten sind da vielfältig. Aber eine globale Variable sehe ich da nirgendwo |
AW: Objekt, was zuvor den Fokus hatte ermitteln
Zitat:
|
AW: Objekt, was zuvor den Fokus hatte ermitteln
Zitat:
Delphi-Quellcode:
type
TfrmTemplate = class( TForm ) private FCurrentControl : TWinControl; FLastActiveControl : TWinControl; |
AW: Objekt, was zuvor den Fokus hatte ermitteln
Hallo Zusammen,
vielen Dank für die Unterstützung! Leider verstehe ich sie nicht so richtig, daher erkläre ich Euch, wofür ich die Variable nutze und würde mich freuen, wenn Ihr mir sagt, wie Ihr das lösen würdet... Mein Projekt beinhaltet ein Formular, auf welchem einige Frames sind. Auf dem Formular ist ein Ribbon und in den Frames sind RichEdits. Damit ich jetzt die Schrift, Schriftgröße und Schriftfarbe ändern kann, muss ich der Procedure in dem Ribbon auf dem Haupformular das jeweils aktive RichEdit übergeben (was in den Frames ist). Ich habe den Umgang mit Klassen, Klassenvariablen und privaten Variablen leider noch nicht richtig verstanden... Vielen Dank Ykcim |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:43 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz