Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Fetching contributors…

Cannot retrieve contributors at this time

69 lines (59 sloc) 2.272 kB
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;
Jump to Line
Something went wrong with that request. Please try again.