LCL: added IsWindow(HWND), implemeted IsWindow() for qt, gtk and gtk2.

git-svn-id: trunk@24283 -
This commit is contained in:
zeljko 2010-03-29 12:42:58 +00:00
parent b2f0afcdb6
commit caf4b2dd3f
10 changed files with 81 additions and 2 deletions

View File

@ -1201,6 +1201,11 @@ begin
Result := False;
end;
function TWidgetSet.IsWindow(handle: HWND): boolean;
begin
Result := False;
end;
function TWidgetSet.IsWindowEnabled(handle: HWND): boolean;
begin
Result := false;

View File

@ -607,6 +607,11 @@ begin
Result := WidgetSet.IsIconic(Handle);
end;
function IsWindow(handle: HWND): boolean;
begin
Result := WidgetSet.IsWindow(Handle);
end;
function IsWindowEnabled(handle: HWND): boolean;
begin
Result := WidgetSet.IsWindowEnabled(Handle);

View File

@ -175,6 +175,7 @@ function InvalidateRgn(Handle: HWND; Rgn: HRGN; Erase: Boolean): Boolean; {$IFDE
function IsDBCSLeadByte(TestChar: Byte): boolean; {$IFDEF IF_BASE_MEMBER}virtual;{$ENDIF}
//function IsRectEmpty --> independent
function IsIconic(handle: HWND): boolean; {$IFDEF IF_BASE_MEMBER}virtual;{$ENDIF}
function IsWindow(handle: HWND): boolean; {$IFDEF IF_BASE_MEMBER}virtual;{$ENDIF}
function IsWindowEnabled(handle: HWND): boolean; {$IFDEF IF_BASE_MEMBER}virtual;{$ENDIF}
function IsWindowVisible(handle: HWND): boolean; {$IFDEF IF_BASE_MEMBER}virtual;{$ENDIF}
function IsZoomed(handle: HWND): boolean; {$IFDEF IF_BASE_MEMBER}virtual;{$ENDIF}

View File

@ -6917,6 +6917,12 @@ begin
{$endif}
end;
function TGTKWidgetSet.IsWindow(handle: HWND): boolean;
begin
if Handle = 0 then
Exit(False);
Result := GtkWidgetIsA(PGtkWidget(Handle), GTK_TYPE_WINDOW);
end;
{------------------------------------------------------------------------------
function TGtkWidgetSet.IsWindowEnabled(handle: HWND): boolean;

View File

@ -142,6 +142,7 @@ procedure InitializeCriticalSection(var CritSection: TCriticalSection); Override
function IntersectClipRect(dc: hdc; Left, Top, Right, Bottom: Integer): Integer; override;
function InvalidateRect(aHandle : HWND; Rect : pRect; bErase : Boolean) : Boolean; override;
function IsIconic(handle: HWND): boolean; override;
function IsWindow(handle: HWND): boolean; override;
function IsWindowEnabled(handle: HWND): boolean; override;
function IsWindowVisible(handle: HWND): boolean; override;
function IsZoomed(handle: HWND): boolean; override;

View File

@ -42,7 +42,7 @@ uses
// Bindings - qt4 must come first to avoid type redefinition problems
qt4,
// FPC
Classes, SysUtils, Math, Types,
Classes, SysUtils, Math, Types, maps,
// LCL
InterfaceBase, LCLProc, LCLType, LMessages, LCLMessageGlue, LCLStrConsts,
Controls, ExtCtrls, Forms,
@ -59,6 +59,8 @@ type
App: QApplicationH;
FOverrideCursor: TObject;
SavedDCList: TList;
CriticalSection: TRTLCriticalSection;
SavedHandlesList: TMap;
// global hooks
FAppEvenFilterHook: QObject_hookH;
FAppFocusChangedHook: QApplication_hookH;
@ -121,6 +123,11 @@ type
function IsValidDC(const DC: HDC): Boolean; virtual;
function IsValidGDIObject(const GDIObject: HGDIOBJ): Boolean; virtual;
// qt object handles map
procedure AddHandle(AHandle: TObject);
procedure RemoveHandle(AHandle: TObject);
function IsValidHandle(AHandle: HWND): Boolean;
// drag image list
function DragImageList_BeginDrag(AImage: QImageH; AHotSpot: TPoint): Boolean;
procedure DragImageList_EndDrag;

View File

@ -32,6 +32,8 @@ begin
ClearCachedColors;
FDockImage := nil;
FDragImageLock := False;
System.InitCriticalSection(CriticalSection);
SavedHandlesList := TMap.Create(TMapIdType(ituPtrSize), SizeOf(TObject));
end;
{------------------------------------------------------------------------------
@ -59,6 +61,14 @@ begin
ClearCachedColors;
if SavedHandlesList <> nil then
begin
SavedHandlesList.Free;
SavedHandlesList := nil;
end;
System.DoneCriticalsection(CriticalSection);
inherited Destroy;
end;
@ -456,6 +466,33 @@ begin
end;
end;
procedure TQtWidgetSet.AddHandle(AHandle: TObject);
begin
System.EnterCriticalsection(CriticalSection);
if not SavedHandlesList.HasId(AHandle) then
SavedHandlesList.Add(AHandle, AHandle);
System.LeaveCriticalsection(CriticalSection);
end;
procedure TQtWidgetSet.RemoveHandle(AHandle: TObject);
begin
System.EnterCriticalsection(CriticalSection);
if SavedHandlesList.HasId(AHandle) then
SavedHandlesList.Delete(AHandle);
System.LeaveCriticalsection(CriticalSection);
end;
function TQtWidgetSet.IsValidHandle(AHandle: HWND): Boolean;
var
i: integer;
begin
if (AHandle = 0) then
Exit(False);
System.EnterCriticalsection(CriticalSection);
Result := SavedHandlesList.HasId(TObject(AHandle));
System.LeaveCriticalsection(CriticalSection);
end;
function TQtWidgetSet.DragImageList_BeginDrag(AImage: QImageH;
AHotSpot: TPoint): Boolean;
var

View File

@ -207,6 +207,7 @@ type
function hasFocus: Boolean; virtual;
function isMinimized: Boolean;
function isMaximized: Boolean;
function IsWindow: Boolean;
procedure lowerWidget; virtual;
procedure move(ANewLeft, ANewTop: Integer);
procedure preferredSize(var PreferredWidth, PreferredHeight: integer; WithThemeSpace: Boolean); virtual;
@ -1477,7 +1478,8 @@ begin
// set Handle->QWidget map
setProperty(Widget, 'lclwidget', Int64(PtrUInt(Self)));
FillChar(FPaintData, sizeOf(FPaintData), 0);
QtWidgetSet.AddHandle(Self);
// set focus policy
if (LCLObject <> nil) and not (Self is TQtMainWindow) then
setFocusPolicy(QtClickFocus);
@ -1517,6 +1519,7 @@ begin
// set Handle->QWidget map
setProperty(Widget, 'lclwidget', Int64(PtrUInt(Self)));
QtWidgetSet.AddHandle(Self);
FillChar(FPaintData, sizeOf(FPaintData), 0);
@ -1547,6 +1550,7 @@ end;
procedure TQtWidget.DeInitializeWidget;
begin
QtWidgetSet.RemoveHandle(Self);
if Widget <> nil then
DetachEvents;
@ -3255,6 +3259,11 @@ begin
Result := QWidget_isMaximized(Widget);
end;
function TQtWidget.IsWindow: Boolean;
begin
Result := QWidget_isWindow(Widget);
end;
procedure TQtWidget.lowerWidget;
begin
QWidget_lower(Widget);
@ -8860,6 +8869,7 @@ begin
TextColorRole := QPaletteText;
Widget := CreateWidget(FParams);
setProperty(Widget, 'lclwidget', Int64(PtrUInt(Self)));
QtWidgetSet.AddHandle(Self);
end;
constructor TQtMenu.Create(const AMenuItem: TMenuItem);
@ -10849,6 +10859,7 @@ begin
FDesignControl := QWidget_create(Result);
QWidget_setMouseTracking(FDesignControl, True);
setProperty(FDesignControl, 'lclwidget', Int64(PtrUInt(Self)));
QtWidgetSet.AddHandle(Self);
BringDesignerToFront;
end;

View File

@ -3833,6 +3833,11 @@ begin
Result := TQtWidget(Handle).isMinimized;
end;
function TQtWidgetSet.IsWindow(handle: HWND): boolean;
begin
Result := IsValidHandle(Handle) and TQtWidget(Handle).IsWindow;
end;
function TQtWidgetSet.IsWindowEnabled(Handle: HWND): boolean;
begin
Result := TQtWidget(Handle).getEnabled;

View File

@ -142,6 +142,7 @@ function InvalidateRect(aHandle : HWND; Rect : pRect; bErase : Boolean) : Boolea
procedure InitializeCriticalSection(var CritSection: TCriticalSection); override;
function IntersectClipRect(dc: hdc; Left, Top, Right, Bottom: Integer): Integer; override;
function IsIconic(Handle: HWND): boolean; override;
function IsWindow(handle: HWND): boolean; override;
function IsWindowEnabled(Handle: HWND): boolean; override;
function IsWindowVisible(Handle: HWND): boolean; override;
function IsZoomed(Handle: HWND): boolean; override;