From: Jens F. <jfu...@us...> - 2004-10-16 14:46:14
|
Update of /cvsroot/jvcl/dev/JVCL3/run In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv23425/JVCL3/run Modified Files: JvAppEvent.pas JvAppRegistryStorage.pas JvAppStorage.pas JvBDEExceptionForm.pas JvBDESecurity.pas JvDBRemoteLogin.pas JvFormPlacement.pas JvLoginForm.pas JvResources.pas JvxCheckListBox.pas Log Message: Mantis #0002207: Enhancements included Index: JvResources.pas =================================================================== RCS file: /cvsroot/jvcl/dev/JVCL3/run/JvResources.pas,v retrieving revision 1.89 retrieving revision 1.90 diff -C2 -d -r1.89 -r1.90 *** JvResources.pas 1 Oct 2004 06:49:11 -0000 1.89 --- JvResources.pas 16 Oct 2004 14:46:04 -0000 1.90 *************** *** 1276,1284 **** RsRegistrationCaption = 'Registration'; RsAppTitleLabel = 'Application "%s"'; ! RsHintLabel = 'Type your user name and password'; RsUserNameLabel = '&User name:'; RsPasswordLabel = '&Password:'; RsUnlockCaption = 'Unlock application'; ! RsUnlockHint = 'Type your password'; //=== JvMail.pas ============================================================= --- 1276,1284 ---- RsRegistrationCaption = 'Registration'; RsAppTitleLabel = 'Application "%s"'; ! RsHintLabel = 'Type your user name and password to enter the application'; RsUserNameLabel = '&User name:'; RsPasswordLabel = '&Password:'; RsUnlockCaption = 'Unlock application'; ! RsUnlockHint = 'Type your password to unlock the application'; //=== JvMail.pas ============================================================= Index: JvBDESecurity.pas =================================================================== RCS file: /cvsroot/jvcl/dev/JVCL3/run/JvBDESecurity.pas,v retrieving revision 1.13 retrieving revision 1.14 diff -C2 -d -r1.13 -r1.14 *** JvBDESecurity.pas 1 Sep 2004 15:06:31 -0000 1.13 --- JvBDESecurity.pas 16 Oct 2004 14:46:04 -0000 1.14 *************** *** 16,19 **** --- 16,30 ---- All Rights Reserved. + Contributor(s): + Hofi + + Last Modified: 2004-10-07 + + Changes: + 2004-10-07: + * Added + TJvCustomLogin + property Caption to support a custom dialog Caption. + You may retrieve the latest version of this file at the Project JEDI's JVCL home page, located at http://jvcl.sourceforge.net *************** *** 68,71 **** --- 79,83 ---- property AppStoragePath; property AttemptNumber; + property Caption; property MaxPasswordLen; property UpdateCaption; Index: JvBDEExceptionForm.pas =================================================================== RCS file: /cvsroot/jvcl/dev/JVCL3/run/JvBDEExceptionForm.pas,v retrieving revision 1.18 retrieving revision 1.19 diff -C2 -d -r1.18 -r1.19 *** JvBDEExceptionForm.pas 1 Sep 2004 15:06:31 -0000 1.18 --- JvBDEExceptionForm.pas 16 Oct 2004 14:46:03 -0000 1.19 *************** *** 19,22 **** --- 19,36 ---- DELPHI\DEMOS\DB\TOOLS\DBEXCEPT.PAS + Contributor(s): + Hofi + + Last Modified: 2004-10-07 + + Changes: + 2004-10-07: + * Added by Hofi + TJvBdeErrorDlg + property GlobalNotMemberExceptionHandler + gives a chance to handle db exceptions in a global common exception + handler. + + You may retrieve the latest version of this file at the Project JEDI's JVCL home page, located at http://jvcl.sourceforge.net *************** *** 39,42 **** --- 53,57 ---- type TDBErrorEvent = procedure(Error: TDBError; var Msg: string) of object; + TNotMemberExceptionEventHandler = procedure (Sender: TObject; E: Exception); TJvBdeErrorDlg = class(TJvForm) *************** *** 71,74 **** --- 86,90 ---- FDetailsHeight: Integer; FDbException: EDbEngineError; + FGlobalNotMemberExceptionHandler: TNotMemberExceptionEventHandler; FPrevOnException: TExceptionEvent; FOnErrorMsg: TDBErrorEvent; *************** *** 77,80 **** --- 93,98 ---- procedure SetShowDetails(Value: Boolean); public + procedure SetGlobalExceptionHandler( + GlobalNotMemberExceptionHandler: TNotMemberExceptionEventHandler); procedure ShowException(Sender: TObject; E: Exception); property OnErrorMsg: TDBErrorEvent read FOnErrorMsg write FOnErrorMsg; *************** *** 84,88 **** DbErrorHelpCtx = THelpContext(0); ! procedure DbErrorIntercept; implementation --- 102,107 ---- DbErrorHelpCtx = THelpContext(0); ! procedure DbErrorIntercept( ! GlobalNotMemberExceptionHandler: TNotMemberExceptionEventHandler = nil); implementation *************** *** 100,107 **** DbEngineErrorDlg: TJvBdeErrorDlg = nil; ! procedure DbErrorIntercept; begin DbEngineErrorDlg.Free; DbEngineErrorDlg := TJvBdeErrorDlg.Create(Application); end; --- 119,128 ---- DbEngineErrorDlg: TJvBdeErrorDlg = nil; ! procedure DbErrorIntercept( ! GlobalNotMemberExceptionHandler: TNotMemberExceptionEventHandler); begin DbEngineErrorDlg.Free; DbEngineErrorDlg := TJvBdeErrorDlg.Create(Application); + DbEngineErrorDlg.SetGlobalExceptionHandler(GlobalNotMemberExceptionHandler); end; *************** *** 120,133 **** FDbException := nil; end; end else begin ! if Assigned(FPrevOnException) then ! FPrevOnException(Sender, E) ! else ! if NewStyleControls then ! Application.ShowException(E) else ! MessageDlg(E.Message + '.', mtError, [mbOk], 0); end; except --- 141,161 ---- FDbException := nil; end; + if Assigned(FGlobalNotMemberExceptionHandler) then + FGlobalNotMemberExceptionHandler(Sender, E); end else begin ! if Assigned(FGlobalNotMemberExceptionHandler) or Assigned(FPrevOnException) then ! begin ! if Assigned(FGlobalNotMemberExceptionHandler) then ! FGlobalNotMemberExceptionHandler(Sender, E); ! if Assigned(FPrevOnException) then ! FPrevOnException(Sender, E); ! end else ! if NewStyleControls then ! Application.ShowException(E) ! else ! MessageDlg(E.Message + '.', mtError, [mbOk], 0); end; except *************** *** 137,140 **** --- 165,174 ---- end; + procedure TJvBdeErrorDlg.SetGlobalExceptionHandler( + GlobalNotMemberExceptionHandler: TNotMemberExceptionEventHandler); + begin + FGlobalNotMemberExceptionHandler := GlobalNotMemberExceptionHandler; + end; + procedure TJvBdeErrorDlg.ShowError; var Index: JvAppRegistryStorage.pas =================================================================== RCS file: /cvsroot/jvcl/dev/JVCL3/run/JvAppRegistryStorage.pas,v retrieving revision 1.17 retrieving revision 1.18 diff -C2 -d -r1.17 -r1.18 *** JvAppRegistryStorage.pas 5 Sep 2004 22:29:16 -0000 1.17 --- JvAppRegistryStorage.pas 16 Oct 2004 14:46:03 -0000 1.18 *************** *** 18,21 **** --- 18,46 ---- Contributor(s): Jens Fudickar + Hofi + + Last Modified: 2004-10-11 + + Changes: + 2004-10-11: by Hofi + * Changed + in class + TJvAppRegistryStorage + Root can be set to 'Software\%COMPANY_NAME%\%APPL_NAME%' by default + via UseOldDefaultRoot property, just like earlier in the original + RX TFormStorage version. (see below what %APPL_NAME% and %COMPANY_NAME% is) + You can use + - '%NONE%' to sign an empty Root + (design time empty value or spaces automatically converted) + - '%APPL_NAME%' to sign in Root a new path element equal to Application name + - '%COMPANY_NAME%' to sign in Root a new path element equal to DefCompanyName + Create(AOwner: TComponent); + * Added + to class + TJvAppRegistryStorage + property UseOldDefaultRoot: + procedure Loaded; override; + procedure SetRoot(const Value: string); + procedure SetUseOldDefaultRoot(Value: Boolean); You may retrieve the latest version of this file at the Project JEDI's JVCL home page, *************** *** 34,39 **** uses ! Windows, Classes, ! JvAppStorage, JvTypes; type --- 59,64 ---- uses ! Windows, Classes, Forms, ! JvAppStorage, JvTypes, JvJVCLUtils; type *************** *** 41,47 **** --- 66,77 ---- private FRegHKEY: HKEY; + FUseOldDefaultRoot: Boolean; protected + procedure Loaded; override; + function GetRegRoot: TJvRegKey; procedure SetRegRoot(Value: TJvRegKey); + procedure SetRoot(const Value: string); + procedure SetUseOldDefaultRoot(Value: Boolean); { Create the registry key path if it doesn't exist yet. Any key in the path that doesn't exist *************** *** 74,79 **** published property RegRoot: TJvRegKey read GetRegRoot write SetRegRoot default hkCurrentUser; ! property Root; property SubStorages; end; --- 104,110 ---- published property RegRoot: TJvRegKey read GetRegRoot write SetRegRoot default hkCurrentUser; ! property Root read GetRoot write SetRoot; property SubStorages; + property UseOldDefaultRoot: Boolean read FUseOldDefaultRoot write SetUseOldDefaultRoot stored True default False ; end; *************** *** 85,93 **** {$ENDIF UNITVERSIONING} SysUtils, ! JclRegistry, JclResources, JvConsts, JvResources; const cCount = 'Count'; { (rom) disabled unused --- 116,129 ---- {$ENDIF UNITVERSIONING} SysUtils, ! JclRegistry, JclResources, JclStrings, JvConsts, JvResources; const cCount = 'Count'; + cSoftwareKey = 'Software'; + cNoRootMask = '%NONE%'; + cAppNameMask = '%APPL_NAME%'; + cCompanyNameMask = '%COMPANY_NAME%'; + cOldDefaultRootMask = cSoftwareKey + '\' + cCompanyNameMask + '\' + cAppNameMask; { (rom) disabled unused *************** *** 111,114 **** --- 147,201 ---- inherited Create(AOwner); FRegHKEY := HKEY_CURRENT_USER; + FUseOldDefaultRoot := False; + end; + + procedure TJvAppRegistryStorage.SetRoot(const Value: string); + var + S : string; + AppName : string; + begin + inherited SetRoot(Value); + if (csDesigning in ComponentState) then + begin { design time } + if Value <> cOldDefaultRootMask then + FUseOldDefaultRoot := False; + if (Length(GetRoot) = 0) then + SetRoot(cNoRootMask); + end + else { NOt design time } + begin + { this makes GetDefaultIniRegKey unnecessery ?!?! } + if GetRoot = cNoRootMask then + SetRoot('') + else + if StrFind( cAppNameMask, GetRoot) <> 0 then + begin + AppName := ExtractFileName(ChangeFileExt(Application.ExeName, '')); + S := GetRoot; + StrReplace( S, cAppNameMask, AppName, [rfIgnoreCase]); + SetRoot(S); + end + else + if StrFind( cCompanyNameMask, GetRoot) <> 0 then + begin + S := GetRoot; + StrReplace( S, cCompanyNameMask, DefCompanyName, [rfIgnoreCase]); + SetRoot(S); + end; + end; + end; + + procedure TJvAppRegistryStorage.Loaded; + begin + inherited Loaded; + SetUseOldDefaultRoot(UseOldDefaultRoot); + SetRoot(GetRoot); + end; + + procedure TJvAppRegistryStorage.SetUseOldDefaultRoot(Value: Boolean); + begin + FUseOldDefaultRoot := Value; + if FUseOldDefaultRoot then + SetRoot(cOldDefaultRootMask); end; Index: JvDBRemoteLogin.pas =================================================================== RCS file: /cvsroot/jvcl/dev/JVCL3/run/JvDBRemoteLogin.pas,v retrieving revision 1.15 retrieving revision 1.16 diff -C2 -d -r1.15 -r1.16 *** JvDBRemoteLogin.pas 1 Sep 2004 15:06:36 -0000 1.15 --- JvDBRemoteLogin.pas 16 Oct 2004 14:46:04 -0000 1.16 *************** *** 16,19 **** --- 16,30 ---- All Rights Reserved. + Contributor(s): + Hofi + + Last Modified: 2004-10-07 + + Changes: + 2004-10-07: + * Added + TJvCustomLogin + property Caption to support a custom dialog Caption. + You may retrieve the latest version of this file at the Project JEDI's JVCL home page, located at http://jvcl.sourceforge.net *************** *** 67,70 **** --- 78,82 ---- property AppStoragePath; property AttemptNumber; + property Caption; property MaxPasswordLen; property UpdateCaption; Index: JvFormPlacement.pas =================================================================== RCS file: /cvsroot/jvcl/dev/JVCL3/run/JvFormPlacement.pas,v retrieving revision 1.50 retrieving revision 1.51 diff -C2 -d -r1.50 -r1.51 *** JvFormPlacement.pas 16 Oct 2004 13:04:10 -0000 1.50 --- JvFormPlacement.pas 16 Oct 2004 14:46:04 -0000 1.51 *************** *** 68,71 **** --- 68,73 ---- end; + TJvFormPlacementVersionCheck = (fpvcNocheck, fpvcCheckGreaterEqual, fpvcCheckEqual); + TJvFormPlacement = class(TJvComponent) private *************** *** 76,79 **** --- 78,82 ---- FOptions: TPlacementOptions; FVersion: Integer; + FVersionCheck: TJvFormPlacementVersionCheck; FSaved: Boolean; FRestored: Boolean; *************** *** 153,156 **** --- 156,160 ---- property PreventResize: Boolean read FPreventResize write SetPreventResize default False; property Version: Integer read FVersion write FVersion default 0; + property VersionCheck: TJvFormPlacementVersionCheck read FVersionCheck write FVersionCheck default fpvcCheckGreaterEqual; property OnSavePlacement: TNotifyEvent read FOnSavePlacement write FOnSavePlacement; property OnRestorePlacement: TNotifyEvent read FOnRestorePlacement write FOnRestorePlacement; *************** *** 297,300 **** --- 301,306 ---- FWinMinMaxInfo.FOwner := Self; FLinks := TList.Create; + FVersion := 0; + FVersionCheck := fpvcCheckGreaterEqual; end; *************** *** 814,833 **** var ActiveCtl: TComponent; begin ! FSaved := False; ! if Assigned(AppStorage) and (ReadInteger(siVersion, 0) >= FVersion) then begin ! RestorePlacement; ! FRestored := True; ! Restore; ! if (fpActiveControl in Options) and (Owner is TCustomForm) then begin ! ActiveCtl := Form.FindComponent(AppStorage.ReadString(AppStorage.ConcatPaths([AppStoragePath, siActiveCtrl]), '')); ! if (ActiveCtl <> nil) and (ActiveCtl is TWinControl) and ! TWinControl(ActiveCtl).CanFocus then ! Form.ActiveControl := TWinControl(ActiveCtl); end; end; - FRestored := True; UpdatePlacement; end; --- 820,855 ---- var ActiveCtl: TComponent; + readVersion: Integer; + ContinueRestore : Boolean; begin ! if Assigned(AppStorage) then begin ! FSaved := False; ! readVersion := ReadInteger(siVersion, 0); ! if AppStorage.PathExists(AppStoragePath) then ! Case VersionCheck of ! fpvcNocheck : ContinueRestore := True; ! fpvcCheckGreaterEqual : ContinueRestore := readVersion >= FVersion; ! fpvcCheckEqual : ContinueRestore := readVersion = FVersion; ! else ! ContinueRestore := False; ! end ! else ! ContinueRestore := False; ! if ContinueRestore then begin ! RestorePlacement; ! FRestored := True; ! Restore; ! if (fpActiveControl in Options) and (Owner is TCustomForm) then ! begin ! ActiveCtl := Form.FindComponent(AppStorage.ReadString(AppStorage.ConcatPaths([AppStoragePath, siActiveCtrl]), '')); ! if (ActiveCtl <> nil) and (ActiveCtl is TWinControl) and ! TWinControl(ActiveCtl).CanFocus then ! Form.ActiveControl := TWinControl(ActiveCtl); ! end; end; + FRestored := True; end; UpdatePlacement; end; *************** *** 1027,1036 **** AppStoragePath := ConcatPaths ([Self.AppStoragePath, StoredPropsPath]); AppStorage := Self.AppStorage; ! if AppStorage.PathExists(AppStoragePath) then ! try ! LoadObjectsProps(Owner, FStoredProps); ! except ! { ignore any exceptions } ! end; finally Free; --- 1049,1057 ---- AppStoragePath := ConcatPaths ([Self.AppStoragePath, StoredPropsPath]); AppStorage := Self.AppStorage; ! try ! LoadObjectsProps(Owner, FStoredProps); ! except ! { ignore any exceptions } ! end; finally Free; Index: JvLoginForm.pas =================================================================== RCS file: /cvsroot/jvcl/dev/JVCL3/run/JvLoginForm.pas,v retrieving revision 1.28 retrieving revision 1.29 diff -C2 -d -r1.28 -r1.29 *** JvLoginForm.pas 1 Sep 2004 15:06:46 -0000 1.28 --- JvLoginForm.pas 16 Oct 2004 14:46:04 -0000 1.29 *************** *** 16,19 **** --- 16,30 ---- All Rights Reserved. + Contributor(s): + Hofi + + Last Modified: 2004-10-07 + + Changes: + 2004-10-07: + * Added + TJvCustomLogin + property Caption to support a custom dialog Caption. + You may retrieve the latest version of this file at the Project JEDI's JVCL home page, located at http://jvcl.sourceforge.net *************** *** 54,57 **** --- 65,69 ---- FActive: Boolean; FAttemptNumber: Integer; + FCaption: string; FLoggedUser: string; FMaxPasswordLen: Integer; *************** *** 108,111 **** --- 120,125 ---- procedure Lock; property LoggedUser: string read GetLoggedUser; + published + property Caption: string read FCaption write FCaption; end; *************** *** 125,128 **** --- 139,143 ---- property AppStoragePath; property AttemptNumber; + property Caption; property MaxPasswordLen; property UpdateCaption; *************** *** 168,172 **** function CreateLoginDialog(UnlockMode, ASelectDatabase: Boolean; ! FormShowEvent, OkClickEvent: TNotifyEvent): TJvLoginForm; implementation --- 183,188 ---- function CreateLoginDialog(UnlockMode, ASelectDatabase: Boolean; ! FormShowEvent, OkClickEvent: TNotifyEvent; ! ACaption: string = ''): TJvLoginForm; implementation *************** *** 183,191 **** function CreateLoginDialog(UnlockMode, ASelectDatabase: Boolean; ! FormShowEvent, OkClickEvent: TNotifyEvent): TJvLoginForm; begin Result := TJvLoginForm.Create(Application); with Result do begin FSelectDatabase := ASelectDatabase; FUnlockMode := UnlockMode; --- 199,208 ---- function CreateLoginDialog(UnlockMode, ASelectDatabase: Boolean; ! FormShowEvent, OkClickEvent: TNotifyEvent; ACaption: string = ''): TJvLoginForm; begin Result := TJvLoginForm.Create(Application); with Result do begin + Caption := ACaption; FSelectDatabase := ASelectDatabase; FUnlockMode := UnlockMode; *************** *** 351,354 **** --- 368,372 ---- begin Result := TJvLoginForm.Create(Application); + Result.Caption := FCaption; with Result do begin *************** *** 585,594 **** begin HintLabel.Caption := RsHintLabel; ! Caption := RsRegistrationCaption; end else begin HintLabel.Caption := RsUnlockHint; ! Caption := RsUnlockCaption; end; if (UserNameEdit.Text = '') and not FUnlockMode then --- 603,614 ---- begin HintLabel.Caption := RsHintLabel; ! if Caption = '' then ! Caption := RsRegistrationCaption; end else begin HintLabel.Caption := RsUnlockHint; ! if Caption = '' then ! Caption := RsUnlockCaption; end; if (UserNameEdit.Text = '') and not FUnlockMode then Index: JvxCheckListBox.pas =================================================================== RCS file: /cvsroot/jvcl/dev/JVCL3/run/JvxCheckListBox.pas,v retrieving revision 1.36 retrieving revision 1.37 diff -C2 -d -r1.36 -r1.37 *** JvxCheckListBox.pas 26 Sep 2004 23:48:30 -0000 1.36 --- JvxCheckListBox.pas 16 Oct 2004 14:46:04 -0000 1.37 *************** *** 25,28 **** --- 25,34 ---- * Moved TJvxCustomListBox and TJvxCheckListBox from JvxCtrls to this unit + 2004-10-07: + * Changed by hofi + TJvxCheckListBox + procedure DrawCheck(R: TRect; AState: TCheckBoxState; Enabled: Boolean); + now protected to support possible call from derived classes. + You may retrieve the latest version of this file at the Project JEDI's JVCL home page, located at http://jvcl.sourceforge.net *************** *** 171,175 **** procedure ResetItemHeight; function GetItemHeight: Integer; override; - procedure DrawCheck(R: TRect; AState: TCheckBoxState; Enabled: Boolean); procedure SetCheckKind(Value: TCheckKind); procedure SetChecked(Index: Integer; AChecked: Boolean); --- 177,180 ---- *************** *** 210,213 **** --- 215,219 ---- procedure KeyPress(var Key: Char); override; procedure Loaded; override; + procedure DrawCheck(R: TRect; AState: TCheckBoxState; Enabled: Boolean); procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override; Index: JvAppStorage.pas =================================================================== RCS file: /cvsroot/jvcl/dev/JVCL3/run/JvAppStorage.pas,v retrieving revision 1.58 retrieving revision 1.59 diff -C2 -d -r1.58 -r1.59 *** JvAppStorage.pas 5 Sep 2004 22:29:16 -0000 1.58 --- JvAppStorage.pas 16 Oct 2004 14:46:03 -0000 1.59 *************** *** 841,844 **** --- 841,848 ---- until Index > High(Paths); Result := StringsToStr(GlobalPaths, PathDelim, False); + // (hofi) it would be better to trim both ends of path ?!?!? + // currently only path contains space(s) filtered out + if Length(Trim(Result)) = 0 then + Result := ''; finally CurPaths.Free; Index: JvAppEvent.pas =================================================================== RCS file: /cvsroot/jvcl/dev/JVCL3/run/JvAppEvent.pas,v retrieving revision 1.21 retrieving revision 1.22 diff -C2 -d -r1.21 -r1.22 *** JvAppEvent.pas 26 Sep 2004 23:48:26 -0000 1.21 --- JvAppEvent.pas 16 Oct 2004 14:46:03 -0000 1.22 *************** *** 16,19 **** --- 16,31 ---- All Rights Reserved. + Contributor(s): + Hofi + + Last Modified: 2004-10-07 + + Changes: + 2004-10-07: + * Added by Hofi + TJvAppEvents + property CancelDispatch + gives a chance to break event dispatching in a particular event handler. + You may retrieve the latest version of this file at the Project JEDI's JVCL home page, located at http://jvcl.sourceforge.net *************** *** 52,55 **** --- 64,68 ---- FCanvas: TCanvas; FUpdateFormatSettings: Boolean; + FCancelDispatch: Boolean; FHintShortPause: Integer; FHintHidePause: Integer; *************** *** 131,134 **** --- 144,148 ---- destructor Destroy; override; property Canvas: TCanvas read GetCanvas; { for painting the icon } + procedure CancelDispatch; published property Chained: Boolean read FChained write FChained default True; *************** *** 363,369 **** for I := FAppEvents.Count - 1 downto 0 do begin if Assigned(TJvAppEvents(FAppEvents[I]).FOnActivate) then TJvAppEvents(FAppEvents[I]).FOnActivate(Sender); ! if not TJvAppEvents(FAppEvents[I]).Chained then Exit; end; --- 377,385 ---- 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; *************** *** 378,384 **** for I := FAppEvents.Count - 1 downto 0 do begin if Assigned(TJvAppEvents(FAppEvents[I]).FOnDeactivate) then TJvAppEvents(FAppEvents[I]).FOnDeactivate(Sender); ! if not TJvAppEvents(FAppEvents[I]).Chained then Exit; end; --- 394,402 ---- 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; *************** *** 395,398 **** --- 413,417 ---- for I := FAppEvents.Count - 1 downto 0 do begin + TJvAppEvents(FAppEvents[I]).FCancelDispatch := False; if Assigned(TJvAppEvents(FAppEvents[I]).FOnException) then begin *************** *** 400,404 **** Handled := True; end; ! if not TJvAppEvents(FAppEvents[I]).Chained then begin if not Handled then --- 419,424 ---- Handled := True; end; ! if not TJvAppEvents(FAppEvents[I]).Chained or ! TJvAppEvents(FAppEvents[I]).FCancelDispatch then begin if not Handled then *************** *** 422,428 **** for I := FAppEvents.Count - 1 downto 0 do begin if Assigned(TJvAppEvents(FAppEvents[I]).FOnIdle) then TJvAppEvents(FAppEvents[I]).FOnIdle(Sender, Done); ! if not TJvAppEvents(FAppEvents[I]).Chained then Exit; end; --- 442,450 ---- 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; *************** *** 440,446 **** for I := FAppEvents.Count - 1 downto 0 do begin if Assigned(TJvAppEvents(FAppEvents[I]).FOnHelp) then Result := TJvAppEvents(FAppEvents[I]).FOnHelp(Command, Data, CallHelp); ! if not TJvAppEvents(FAppEvents[I]).Chained then Exit; end; --- 462,470 ---- 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; *************** *** 459,466 **** for I := FAppEvents.Count - 1 downto 0 do begin 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 then Exit; end; --- 483,492 ---- 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; *************** *** 476,482 **** for I := FAppEvents.Count - 1 downto 0 do begin if Assigned(TJvAppEvents(FAppEvents[I]).FOnHint) then TJvAppEvents(FAppEvents[I]).FOnHint(Sender); ! if not TJvAppEvents(FAppEvents[I]).Chained then Exit; end; --- 502,510 ---- 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; *************** *** 492,498 **** for I := FAppEvents.Count - 1 downto 0 do begin if Assigned(TJvAppEvents(FAppEvents[I]).FOnMessage) then TJvAppEvents(FAppEvents[I]).FOnMessage(Msg, Handled); ! if not TJvAppEvents(FAppEvents[I]).Chained or Handled then Exit; end; --- 520,528 ---- 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; *************** *** 509,515 **** for I := FAppEvents.Count - 1 downto 0 do begin if Assigned(TJvAppEvents(FAppEvents[I]).FOnEvent) then TJvAppEvents(FAppEvents[I]).FOnEvent(Sender, Event, Handled); ! if not TJvAppEvents(FAppEvents[I]).Chained or Handled then Exit; end; --- 539,547 ---- 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; *************** *** 525,531 **** for I := FAppEvents.Count - 1 downto 0 do begin if Assigned(TJvAppEvents(FAppEvents[I]).FOnMinimize) then TJvAppEvents(FAppEvents[I]).FOnMinimize(Sender); ! if not TJvAppEvents(FAppEvents[I]).Chained then Exit; end; --- 557,565 ---- 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; *************** *** 540,546 **** for I := FAppEvents.Count - 1 downto 0 do begin if Assigned(TJvAppEvents(FAppEvents[I]).FOnRestore) then TJvAppEvents(FAppEvents[I]).FOnRestore(Sender); ! if not TJvAppEvents(FAppEvents[I]).Chained then Exit; end; --- 574,582 ---- 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; *************** *** 556,562 **** for I := FAppEvents.Count - 1 downto 0 do begin if Assigned(TJvAppEvents(FAppEvents[I]).FOnShowHint) then TJvAppEvents(FAppEvents[I]).FOnShowHint(HintStr, CanShow, HintInfo); ! if not TJvAppEvents(FAppEvents[I]).Chained then Exit; end; --- 592,600 ---- 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; *************** *** 571,577 **** for I := FAppEvents.Count - 1 downto 0 do begin if Assigned(TJvAppEvents(FAppEvents[I]).FOnActiveControlChange) then TJvAppEvents(FAppEvents[I]).FOnActiveControlChange(Sender); ! if not TJvAppEvents(FAppEvents[I]).Chained then Exit; end; --- 609,617 ---- 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; *************** *** 586,592 **** for I := FAppEvents.Count - 1 downto 0 do begin if Assigned(TJvAppEvents(FAppEvents[I]).FOnActiveFormChange) then TJvAppEvents(FAppEvents[I]).FOnActiveFormChange(Sender); ! if not TJvAppEvents(FAppEvents[I]).Chained then Exit; end; --- 626,634 ---- 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; *************** *** 603,609 **** for I := FAppEvents.Count - 1 downto 0 do begin if Assigned(TJvAppEvents(FAppEvents[I]).FOnActionExecute) then TJvAppEvents(FAppEvents[I]).FOnActionExecute(Action, Handled); ! if not TJvAppEvents(FAppEvents[I]).Chained or Handled then Exit; end; --- 645,653 ---- 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; *************** *** 619,625 **** for I := FAppEvents.Count - 1 downto 0 do begin if Assigned(TJvAppEvents(FAppEvents[I]).FOnActionUpdate) then TJvAppEvents(FAppEvents[I]).FOnActionUpdate(Action, Handled); ! if not TJvAppEvents(FAppEvents[I]).Chained or Handled then Exit; end; --- 663,671 ---- 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; *************** *** 635,641 **** for I := FAppEvents.Count - 1 downto 0 do begin if Assigned(TJvAppEvents(FAppEvents[I]).FOnShortCut) then TJvAppEvents(FAppEvents[I]).FOnShortCut(Msg, Handled); ! if not TJvAppEvents(FAppEvents[I]).Chained or Handled then Exit; end; --- 681,689 ---- 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; *************** *** 651,657 **** for I := FAppEvents.Count - 1 downto 0 do begin if Assigned(TJvAppEvents(FAppEvents[I]).FOnShortCut) then TJvAppEvents(FAppEvents[I]).FOnShortCut(Key, Shift, Handled); ! if not TJvAppEvents(FAppEvents[I]).Chained or Handled then Exit; end; --- 699,707 ---- 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; *************** *** 676,679 **** --- 726,730 ---- FHintPause := DefHintPause; FShowHint := True; + FCancelDispatch := False; FHintShortPause := DefHintShortPause; FHintHidePause := DefHintHidePause; *************** *** 718,721 **** --- 769,777 ---- end; + procedure TJvAppEvents.CancelDispatch; + begin + FCancelDispatch := True; + end; + {$IFDEF VCL} |