mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-04-07 05:18:00 +02:00
LCL: added TScreen handler for form Visible changed
git-svn-id: trunk@25097 -
This commit is contained in:
parent
e307883ee0
commit
2abe1b3ff4
21
lcl/forms.pp
21
lcl/forms.pp
@ -536,6 +536,7 @@ type
|
||||
procedure DoFirstShow; virtual;
|
||||
procedure UpdateWindowState;
|
||||
procedure VisibleChanging; override;
|
||||
procedure VisibleChanged; override;
|
||||
procedure WndProc(var TheMessage : TLMessage); override;
|
||||
function VisibleIsStored: boolean;
|
||||
procedure DoSendBoundsToInterface; override;
|
||||
@ -878,8 +879,6 @@ type
|
||||
end;
|
||||
|
||||
TScreenFormEvent = procedure(Sender: TObject; Form: TCustomForm) of object;
|
||||
TScreenActiveFormChangedEvent = procedure(Sender: TObject;
|
||||
LastForm: TCustomForm) of object;
|
||||
TScreenControlEvent = procedure(Sender: TObject;
|
||||
LastControl: TControl) of object;
|
||||
|
||||
@ -887,7 +886,8 @@ type
|
||||
snFormAdded,
|
||||
snRemoveForm,
|
||||
snActiveControlChanged,
|
||||
snActiveFormChanged
|
||||
snActiveFormChanged,
|
||||
snFormVisibleChanged
|
||||
);
|
||||
|
||||
TMonitorDefaultTo = (mdNearest, mdNull, mdPrimary);
|
||||
@ -957,6 +957,8 @@ type
|
||||
const Handler: TMethod);
|
||||
procedure DoAddDataModule(DataModule: TDataModule);
|
||||
procedure DoRemoveDataModule(DataModule: TDataModule);
|
||||
procedure NotifyScreenFormHandler(HandlerType: TScreenNotification;
|
||||
Form: TCustomForm);
|
||||
protected
|
||||
function GetHintFont: TFont; virtual;
|
||||
function GetIconFont: TFont; virtual;
|
||||
@ -977,6 +979,7 @@ type
|
||||
function FindDataModule(const DataModuleName: string): TDataModule;
|
||||
procedure UpdateScreen;
|
||||
// handler
|
||||
procedure RemoveAllHandlersOfObject(AnObject: TObject); override;
|
||||
procedure AddHandlerFormAdded(OnFormAdded: TScreenFormEvent;
|
||||
AsLast: Boolean=true);
|
||||
procedure RemoveHandlerFormAdded(OnFormAdded: TScreenFormEvent);
|
||||
@ -988,12 +991,12 @@ type
|
||||
AsLast: Boolean=true);
|
||||
procedure RemoveHandlerActiveControlChanged(
|
||||
OnActiveControlChanged: TScreenControlEvent);
|
||||
procedure AddHandlerActiveFormChanged(
|
||||
OnActiveFormChanged: TScreenActiveFormChangedEvent;
|
||||
AsLast: Boolean=true);
|
||||
procedure RemoveHandlerActiveFormChanged(
|
||||
OnActiveFormChanged: TScreenActiveFormChangedEvent);
|
||||
procedure RemoveAllHandlersOfObject(AnObject: TObject); override;
|
||||
procedure AddHandlerActiveFormChanged(OnActiveFormChanged: TScreenFormEvent;
|
||||
AsLast: Boolean=true);
|
||||
procedure RemoveHandlerActiveFormChanged(OnActiveFormChanged: TScreenFormEvent);
|
||||
procedure AddHandlerFormVisibleChanged(OnFormVisibleChanged: TScreenFormEvent;
|
||||
AsLast: Boolean=true);
|
||||
procedure RemoveHandlerFormVisibleChanged(OnFormVisibleChanged: TScreenFormEvent);
|
||||
|
||||
function DisableForms(SkipForm: TCustomForm; DisabledList: TList = nil): TList;
|
||||
procedure EnableForms(var AFormList: TList);
|
||||
|
@ -1212,6 +1212,13 @@ begin
|
||||
inherited VisibleChanging;
|
||||
end;
|
||||
|
||||
procedure TCustomForm.VisibleChanged;
|
||||
begin
|
||||
inherited VisibleChanged;
|
||||
if (Screen<>nil) then
|
||||
Screen.NotifyScreenFormHandler(snFormVisibleChanged,Self);
|
||||
end;
|
||||
|
||||
{------------------------------------------------------------------------------
|
||||
TCustomForm WndProc
|
||||
------------------------------------------------------------------------------}
|
||||
|
@ -250,6 +250,15 @@ begin
|
||||
ReleaseDC(0, DC);
|
||||
end;
|
||||
|
||||
procedure TScreen.RemoveAllHandlersOfObject(AnObject: TObject);
|
||||
var
|
||||
HandlerType: TScreenNotification;
|
||||
begin
|
||||
for HandlerType:=Low(TScreenNotification) to High(TScreenNotification) do
|
||||
FScreenHandlers[HandlerType].RemoveAllMethodsOfObject(AnObject);
|
||||
inherited RemoveAllHandlersOfObject(AnObject);
|
||||
end;
|
||||
|
||||
procedure TScreen.AddHandlerFormAdded(OnFormAdded: TScreenFormEvent;
|
||||
AsLast: Boolean);
|
||||
begin
|
||||
@ -285,24 +294,27 @@ begin
|
||||
end;
|
||||
|
||||
procedure TScreen.AddHandlerActiveFormChanged(
|
||||
OnActiveFormChanged: TScreenActiveFormChangedEvent; AsLast: Boolean);
|
||||
OnActiveFormChanged: TScreenFormEvent; AsLast: Boolean);
|
||||
begin
|
||||
AddHandler(snActiveFormChanged,TMethod(OnActiveFormChanged),AsLast);
|
||||
end;
|
||||
|
||||
procedure TScreen.RemoveHandlerActiveFormChanged(
|
||||
OnActiveFormChanged: TScreenActiveFormChangedEvent);
|
||||
OnActiveFormChanged: TScreenFormEvent);
|
||||
begin
|
||||
RemoveHandler(snActiveFormChanged,TMethod(OnActiveFormChanged));
|
||||
end;
|
||||
|
||||
procedure TScreen.RemoveAllHandlersOfObject(AnObject: TObject);
|
||||
var
|
||||
HandlerType: TScreenNotification;
|
||||
procedure TScreen.AddHandlerFormVisibleChanged(
|
||||
OnFormVisibleChanged: TScreenFormEvent; AsLast: Boolean);
|
||||
begin
|
||||
for HandlerType:=Low(TScreenNotification) to High(TScreenNotification) do
|
||||
FScreenHandlers[HandlerType].RemoveAllMethodsOfObject(AnObject);
|
||||
inherited RemoveAllHandlersOfObject(AnObject);
|
||||
AddHandler(snFormVisibleChanged,TMethod(OnFormVisibleChanged),AsLast);
|
||||
end;
|
||||
|
||||
procedure TScreen.RemoveHandlerFormVisibleChanged(
|
||||
OnFormVisibleChanged: TScreenFormEvent);
|
||||
begin
|
||||
RemoveHandler(snFormVisibleChanged,TMethod(OnFormVisibleChanged));
|
||||
end;
|
||||
|
||||
{
|
||||
@ -598,8 +610,6 @@ end;
|
||||
Do not use this procedure. This procedure is used by TScreen internally.
|
||||
------------------------------------------------------------------------------}
|
||||
procedure TScreen.AddForm(AForm: TCustomForm);
|
||||
var
|
||||
i: Integer;
|
||||
begin
|
||||
FCustomForms.Add(AForm);
|
||||
FCustomFormsZOrdered.Add(AForm);
|
||||
@ -608,9 +618,7 @@ begin
|
||||
FFormList.Add(AForm);
|
||||
Application.UpdateVisible;
|
||||
end;
|
||||
i := FScreenHandlers[snFormAdded].Count;
|
||||
while FScreenHandlers[snFormAdded].NextDownIndex(i) do
|
||||
TScreenFormEvent(FScreenHandlers[snFormAdded][i])(Self, AForm);
|
||||
NotifyScreenFormHandler(snFormAdded,AForm);
|
||||
end;
|
||||
|
||||
{------------------------------------------------------------------------------
|
||||
@ -739,12 +747,8 @@ end;
|
||||
|
||||
------------------------------------------------------------------------------}
|
||||
procedure TScreen.RemoveForm(AForm: TCustomForm);
|
||||
var
|
||||
i: Integer;
|
||||
begin
|
||||
i := FScreenHandlers[snRemoveForm].Count;
|
||||
while FScreenHandlers[snRemoveForm].NextDownIndex(i) do
|
||||
TScreenFormEvent(FScreenHandlers[snRemoveForm][i])(Self, AForm);
|
||||
NotifyScreenFormHandler(snRemoveForm,AForm);
|
||||
FCustomForms.Remove(AForm);
|
||||
FCustomFormsZOrdered.Remove(AForm);
|
||||
FFormList.Remove(AForm);
|
||||
@ -822,17 +826,9 @@ end;
|
||||
procedure TScreen.UpdateLastActive;
|
||||
|
||||
procedure NotifyOnActiveFormChanged;
|
||||
var
|
||||
i: Integer;
|
||||
Handler: TScreenFormEvent;
|
||||
begin
|
||||
if Assigned(FOnActiveFormChange) then FOnActiveFormChange(Self);
|
||||
i := FScreenHandlers[snActiveFormChanged].Count;
|
||||
while FScreenHandlers[snActiveFormChanged].NextDownIndex(i) do
|
||||
begin
|
||||
Handler := TScreenFormEvent(FScreenHandlers[snActiveFormChanged][i]);
|
||||
Handler(Self, FLastActiveCustomForm);
|
||||
end;
|
||||
NotifyScreenFormHandler(snActiveFormChanged,FLastActiveCustomForm);
|
||||
end;
|
||||
|
||||
procedure NotifyOnActiveControlChanged;
|
||||
@ -915,4 +911,18 @@ begin
|
||||
FDataModuleList.Remove(DataModule);
|
||||
end;
|
||||
|
||||
procedure TScreen.NotifyScreenFormHandler(HandlerType: TScreenNotification;
|
||||
Form: TCustomForm);
|
||||
var
|
||||
i: integer;
|
||||
Handler: TScreenFormEvent;
|
||||
begin
|
||||
i := FScreenHandlers[HandlerType].Count;
|
||||
while FScreenHandlers[HandlerType].NextDownIndex(i) do
|
||||
begin
|
||||
Handler := TScreenFormEvent(FScreenHandlers[HandlerType][i]);
|
||||
Handler(Self, Form);
|
||||
end;
|
||||
end;
|
||||
|
||||
// included by forms.pp
|
||||
|
Loading…
Reference in New Issue
Block a user