📄 jvappevent.pas
字号:
begin
FOnActiveControlChange := Screen.OnActiveControlChange;
FOnActiveFormChange := Screen.OnActiveFormChange;
Screen.OnActiveControlChange := DoActiveControlChange;
Screen.OnActiveFormChange := DoActiveFormChange;
end;
FHooked := True;
end;
end;
end;
procedure TJvAppEventList.RemoveEvents(App: TJvAppEvents);
begin
if FAppEvents.IndexOf(App) >= 0 then
FAppEvents.Remove(App);
if not (csDesigning in App.ComponentState) and (FAppEvents.Count = 0) then
ClearEvents;
end;
procedure TJvAppEventList.DoActivate(Sender: TObject);
var
I: Integer;
begin
for I := FAppEvents.Count - 1 downto 0 do
begin
TJvAppEvents(FAppEvents[I]).FCancelDispatch := False;
if Assigned(TJvAppEvents(FAppEvents[I]).FOnActivate) then
TJvAppEvents(FAppEvents[I]).FOnActivate(Sender);
if not TJvAppEvents(FAppEvents[I]).Chained or
TJvAppEvents(FAppEvents[I]).FCancelDispatch then
Exit;
end;
if Assigned(FOnActivate) then
FOnActivate(Sender);
end;
procedure TJvAppEventList.DoDeactivate(Sender: TObject);
var
I: Integer;
begin
for I := FAppEvents.Count - 1 downto 0 do
begin
TJvAppEvents(FAppEvents[I]).FCancelDispatch := False;
if Assigned(TJvAppEvents(FAppEvents[I]).FOnDeactivate) then
TJvAppEvents(FAppEvents[I]).FOnDeactivate(Sender);
if not TJvAppEvents(FAppEvents[I]).Chained or
TJvAppEvents(FAppEvents[I]).FCancelDispatch then
Exit;
end;
if Assigned(FOnDeactivate) then
FOnDeactivate(Sender);
end;
procedure TJvAppEventList.DoException(Sender: TObject; E: Exception);
var
I: Integer;
Handled: Boolean;
begin
Handled := False;
for I := FAppEvents.Count - 1 downto 0 do
begin
TJvAppEvents(FAppEvents[I]).FCancelDispatch := False;
if Assigned(TJvAppEvents(FAppEvents[I]).FOnException) then
begin
TJvAppEvents(FAppEvents[I]).FOnException(Sender, E);
Handled := True;
end;
if not TJvAppEvents(FAppEvents[I]).Chained or
TJvAppEvents(FAppEvents[I]).FCancelDispatch then
begin
if not Handled then
Application.ShowException(E);
Exit;
end;
end;
if Assigned(FOnException) then
begin
FOnException(Sender, E);
Handled := True;
end;
if not Handled then
Application.ShowException(E);
end;
procedure TJvAppEventList.DoIdle(Sender: TObject; var Done: Boolean);
var
I: Integer;
begin
for I := FAppEvents.Count - 1 downto 0 do
begin
TJvAppEvents(FAppEvents[I]).FCancelDispatch := False;
if Assigned(TJvAppEvents(FAppEvents[I]).FOnIdle) then
TJvAppEvents(FAppEvents[I]).FOnIdle(Sender, Done);
if not TJvAppEvents(FAppEvents[I]).Chained or
TJvAppEvents(FAppEvents[I]).FCancelDispatch then
Exit;
end;
if Assigned(FOnIdle) then
FOnIdle(Sender, Done);
end;
{$IFDEF VCL}
function TJvAppEventList.DoHelp(Command: Word; Data: Longint;
var CallHelp: Boolean): Boolean;
var
I: Integer;
begin
Result := False;
for I := FAppEvents.Count - 1 downto 0 do
begin
TJvAppEvents(FAppEvents[I]).FCancelDispatch := False;
if Assigned(TJvAppEvents(FAppEvents[I]).FOnHelp) then
Result := TJvAppEvents(FAppEvents[I]).FOnHelp(Command, Data, CallHelp);
if not TJvAppEvents(FAppEvents[I]).Chained or
TJvAppEvents(FAppEvents[I]).FCancelDispatch then
Exit;
end;
if Assigned(FOnHelp) then
Result := FOnHelp(Command, Data, CallHelp);
end;
{$ENDIF VCL}
{$IFDEF VisualCLX}
function TJvAppEventList.DoHelp(HelpType: THelpType; HelpContext: THelpContext;
const HelpKeyword: string; const HelpFile: string;
var Handled: Boolean): Boolean;
var
I: Integer;
begin
Result := False;
for I := FAppEvents.Count - 1 downto 0 do
begin
TJvAppEvents(FAppEvents[I]).FCancelDispatch := False;
if Assigned(TJvAppEvents(FAppEvents[I]).FOnHelp) then
Result := TJvAppEvents(FAppEvents[I]).FOnHelp(HelpType, HelpContext,
HelpKeyword, HelpFile, Handled);
if not TJvAppEvents(FAppEvents[I]).Chained or Handled or
TJvAppEvents(FAppEvents[I]).FCancelDispatch then
Exit;
end;
if Assigned(FOnHelp) then
Result := FOnHelp(HelpType, HelpContext, HelpKeyword, HelpFile, Handled);
end;
{$ENDIF VisualCLX}
procedure TJvAppEventList.DoHint(Sender: TObject);
var
I: Integer;
begin
for I := FAppEvents.Count - 1 downto 0 do
begin
TJvAppEvents(FAppEvents[I]).FCancelDispatch := False;
if Assigned(TJvAppEvents(FAppEvents[I]).FOnHint) then
TJvAppEvents(FAppEvents[I]).FOnHint(Sender);
if not TJvAppEvents(FAppEvents[I]).Chained or
TJvAppEvents(FAppEvents[I]).FCancelDispatch then
Exit;
end;
if Assigned(FOnHint) then
FOnHint(Sender);
end;
{$IFDEF VCL}
procedure TJvAppEventList.DoMessage(var Msg: TMsg; var Handled: Boolean);
var
I: Integer;
begin
for I := FAppEvents.Count - 1 downto 0 do
begin
TJvAppEvents(FAppEvents[I]).FCancelDispatch := False;
if Assigned(TJvAppEvents(FAppEvents[I]).FOnMessage) then
TJvAppEvents(FAppEvents[I]).FOnMessage(Msg, Handled);
if not TJvAppEvents(FAppEvents[I]).Chained or Handled or
TJvAppEvents(FAppEvents[I]).FCancelDispatch then
Exit;
end;
if Assigned(FOnMessage) then
FOnMessage(Msg, Handled);
end;
{$ENDIF VCL}
{$IFDEF VisualCLX}
procedure TJvAppEventList.DoEvent(Sender: QObjectH; Event: QEventH;
var Handled: Boolean);
var
I: Integer;
begin
for I := FAppEvents.Count - 1 downto 0 do
begin
TJvAppEvents(FAppEvents[I]).FCancelDispatch := False;
if Assigned(TJvAppEvents(FAppEvents[I]).FOnEvent) then
TJvAppEvents(FAppEvents[I]).FOnEvent(Sender, Event, Handled);
if not TJvAppEvents(FAppEvents[I]).Chained or Handled or
TJvAppEvents(FAppEvents[I]).FCancelDispatch then
Exit;
end;
if Assigned(FOnEvent) then
FOnEvent(Sender, Event, Handled);
end;
{$ENDIF VisualCLX}
procedure TJvAppEventList.DoMinimize(Sender: TObject);
var
I: Integer;
begin
for I := FAppEvents.Count - 1 downto 0 do
begin
TJvAppEvents(FAppEvents[I]).FCancelDispatch := False;
if Assigned(TJvAppEvents(FAppEvents[I]).FOnMinimize) then
TJvAppEvents(FAppEvents[I]).FOnMinimize(Sender);
if not TJvAppEvents(FAppEvents[I]).Chained or
TJvAppEvents(FAppEvents[I]).FCancelDispatch then
Exit;
end;
if Assigned(FOnMinimize) then
FOnMinimize(Sender);
end;
procedure TJvAppEventList.DoRestore(Sender: TObject);
var
I: Integer;
begin
for I := FAppEvents.Count - 1 downto 0 do
begin
TJvAppEvents(FAppEvents[I]).FCancelDispatch := False;
if Assigned(TJvAppEvents(FAppEvents[I]).FOnRestore) then
TJvAppEvents(FAppEvents[I]).FOnRestore(Sender);
if not TJvAppEvents(FAppEvents[I]).Chained or
TJvAppEvents(FAppEvents[I]).FCancelDispatch then
Exit;
end;
if Assigned(FOnRestore) then
FOnRestore(Sender);
end;
procedure TJvAppEventList.DoShowHint(var HintStr: THintString; var CanShow: Boolean;
var HintInfo: THintInfo);
var
I: Integer;
begin
for I := FAppEvents.Count - 1 downto 0 do
begin
TJvAppEvents(FAppEvents[I]).FCancelDispatch := False;
if Assigned(TJvAppEvents(FAppEvents[I]).FOnShowHint) then
TJvAppEvents(FAppEvents[I]).FOnShowHint(HintStr, CanShow, HintInfo);
if not TJvAppEvents(FAppEvents[I]).Chained or
TJvAppEvents(FAppEvents[I]).FCancelDispatch then
Exit;
end;
if Assigned(FOnShowHint) then
FOnShowHint(HintStr, CanShow, HintInfo);
end;
procedure TJvAppEventList.DoActiveControlChange(Sender: TObject);
var
I: Integer;
begin
for I := FAppEvents.Count - 1 downto 0 do
begin
TJvAppEvents(FAppEvents[I]).FCancelDispatch := False;
if Assigned(TJvAppEvents(FAppEvents[I]).FOnActiveControlChange) then
TJvAppEvents(FAppEvents[I]).FOnActiveControlChange(Sender);
if not TJvAppEvents(FAppEvents[I]).Chained or
TJvAppEvents(FAppEvents[I]).FCancelDispatch then
Exit;
end;
if Assigned(FOnActiveControlChange) then
FOnActiveControlChange(Sender);
end;
procedure TJvAppEventList.DoActiveFormChange(Sender: TObject);
var
I: Integer;
begin
for I := FAppEvents.Count - 1 downto 0 do
begin
TJvAppEvents(FAppEvents[I]).FCancelDispatch := False;
if Assigned(TJvAppEvents(FAppEvents[I]).FOnActiveFormChange) then
TJvAppEvents(FAppEvents[I]).FOnActiveFormChange(Sender);
if not TJvAppEvents(FAppEvents[I]).Chained or
TJvAppEvents(FAppEvents[I]).FCancelDispatch then
Exit;
end;
if Assigned(FOnActiveFormChange) then
FOnActiveFormChange(Sender);
end;
procedure TJvAppEventList.DoActionExecute(Action: TBasicAction;
var Handled: Boolean);
var
I: Integer;
begin
for I := FAppEvents.Count - 1 downto 0 do
begin
TJvAppEvents(FAppEvents[I]).FCancelDispatch := False;
if Assigned(TJvAppEvents(FAppEvents[I]).FOnActionExecute) then
TJvAppEvents(FAppEvents[I]).FOnActionExecute(Action, Handled);
if not TJvAppEvents(FAppEvents[I]).Chained or Handled or
TJvAppEvents(FAppEvents[I]).FCancelDispatch then
Exit;
end;
if Assigned(FOnActionExecute) then
FOnActionExecute(Action, Handled);
end;
procedure TJvAppEventList.DoActionUpdate(Action: TBasicAction;
var Handled: Boolean);
var
I: Integer;
begin
for I := FAppEvents.Count - 1 downto 0 do
begin
TJvAppEvents(FAppEvents[I]).FCancelDispatch := False;
if Assigned(TJvAppEvents(FAppEvents[I]).FOnActionUpdate) then
TJvAppEvents(FAppEvents[I]).FOnActionUpdate(Action, Handled);
if not TJvAppEvents(FAppEvents[I]).Chained or Handled or
TJvAppEvents(FAppEvents[I]).FCancelDispatch then
Exit;
end;
if Assigned(FOnActionUpdate) then
FOnActionUpdate(Action, Handled);
end;
{$IFDEF VCL}
procedure TJvAppEventList.DoShortCut(var Msg: TWMKey; var Handled: Boolean);
var
I: Integer;
begin
for I := FAppEvents.Count - 1 downto 0 do
begin
TJvAppEvents(FAppEvents[I]).FCancelDispatch := False;
if Assigned(TJvAppEvents(FAppEvents[I]).FOnShortCut) then
TJvAppEvents(FAppEvents[I]).FOnShortCut(Msg, Handled);
if not TJvAppEvents(FAppEvents[I]).Chained or Handled or
TJvAppEvents(FAppEvents[I]).FCancelDispatch then
Exit;
end;
if Assigned(FOnShortCut) then
FOnShortCut(Msg, Handled);
end;
{$ENDIF VCL}
{$IFDEF VisualCLX}
procedure TJvAppEventList.DoShortCut(Key: Integer; Shift: TShiftState; var Handled: Boolean);
var
I: Integer;
begin
for I := FAppEvents.Count - 1 downto 0 do
begin
TJvAppEvents(FAppEvents[I]).FCancelDispatch := False;
if Assigned(TJvAppEvents(FAppEvents[I]).FOnShortCut) then
TJvAppEvents(FAppEvents[I]).FOnShortCut(Key, Shift, Handled);
if not TJvAppEvents(FAppEvents[I]).Chained or Handled or
TJvAppEvents(FAppEvents[I]).FCancelDispatch then
Exit;
end;
if Assigned(FOnShortCut) then
FOnShortCut(Key, Shift, Handled);
end;
{$ENDIF VisualCLX}
//=== { TJvAppEvents } =======================================================
var
AppList: TJvAppEventList = nil;
constructor TJvAppEvents.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
if AppList = nil then
AppList := TJvAppEventList.Create;
FChained := True;
FHintColor := DefHintColor;
FHintPause := DefHintPause;
FShowHint := True;
FCancelDispatch := False;
FHintShortPause := DefHintShortPause;
FHintHidePause := DefHintHidePause;
FShowMainForm := True;
FHintShortCuts := True;
FMouseDragImmediate := True;
FMouseDragThreshold := 5;
FUpdateFormatSettings := True;
{$IFDEF VCL}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -