|
@@ -1,68 +0,0 @@
|
|
|
-This patch to Delphi 6.02's Controls.pas fixes an AV issue with
|
|
|
-combo boxes and Outlook Express; see:
|
|
|
-
|
|
|
-http://groups.google.com/group/borland.public.delphi.vcl.components.using/browse_thread/thread/e012cea3ea1d258b
|
|
|
-
|
|
|
-Delphi 2-5 have the same problem, but need a slightly different patch --
|
|
|
-see VCL-Controls-D2D5-patch.txt.
|
|
|
-Delphi 7 and later already incorporate an equivalent fix.
|
|
|
-
|
|
|
-After applying the changes, recompile Controls.pas from the command
|
|
|
-line as follows:
|
|
|
-
|
|
|
-> c:\delphi\bin\dcc32 -$D- -$L- Controls.pas
|
|
|
-> move Controls.dcu c:\delphi\lib
|
|
|
-
|
|
|
-
|
|
|
---- Controls.pas.orig Fri Feb 15 14:02:00 2002
|
|
|
-+++ Controls.pas Tue Mar 19 21:04:58 2002
|
|
|
-@@ -1743,14 +1743,20 @@
|
|
|
- { The global atom table is trashed when the user logs off. The extra test
|
|
|
- below protects UI interactive services after the user logs off. }
|
|
|
- function FindControl(Handle: HWnd): TWinControl;
|
|
|
-+var
|
|
|
-+ PID: DWORD;
|
|
|
- begin
|
|
|
- Result := nil;
|
|
|
- if (Handle <> 0) then
|
|
|
- begin
|
|
|
-- if GlobalFindAtom(PChar(ControlAtomString)) = ControlAtom then
|
|
|
-- Result := Pointer(GetProp(Handle, MakeIntAtom(ControlAtom)))
|
|
|
-- else
|
|
|
-- Result := ObjectFromHWnd(Handle);
|
|
|
-+ if (GetWindowThreadProcessId(Handle, @PID) <> 0) and
|
|
|
-+ (PID = GetCurrentProcessId) then
|
|
|
-+ begin
|
|
|
-+ if GlobalFindAtom(PChar(ControlAtomString)) = ControlAtom then
|
|
|
-+ Result := Pointer(GetProp(Handle, MakeIntAtom(ControlAtom)))
|
|
|
-+ else
|
|
|
-+ Result := ObjectFromHWnd(Handle);
|
|
|
-+ end;
|
|
|
- end;
|
|
|
- end;
|
|
|
-
|
|
|
-@@ -2448,14 +2454,20 @@
|
|
|
- // See comments for FindControl about global atom stability in service apps.
|
|
|
-
|
|
|
- function IsDelphiHandle(Handle: HWND): Boolean;
|
|
|
-+var
|
|
|
-+ PID: DWORD;
|
|
|
- begin
|
|
|
- Result := False;
|
|
|
- if Handle <> 0 then
|
|
|
- begin
|
|
|
-- if GlobalFindAtom(PChar(WindowAtomString)) = WindowAtom then
|
|
|
-- Result := GetProp(Handle, MakeIntAtom(WindowAtom)) <> 0
|
|
|
-- else
|
|
|
-- Result := ObjectFromHWnd(Handle) <> nil;
|
|
|
-+ if (GetWindowThreadProcessId(Handle, @PID) <> 0) and
|
|
|
-+ (PID = GetCurrentProcessId) then
|
|
|
-+ begin
|
|
|
-+ if GlobalFindAtom(PChar(WindowAtomString)) = WindowAtom then
|
|
|
-+ Result := GetProp(Handle, MakeIntAtom(WindowAtom)) <> 0
|
|
|
-+ else
|
|
|
-+ Result := ObjectFromHWnd(Handle) <> nil;
|
|
|
-+ end;
|
|
|
- end;
|
|
|
- end;
|
|
|
-
|