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