You've already forked lazarus-ccr
Started to isolate specific windows functions
git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@120 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
@ -35,3 +35,4 @@
|
|||||||
{$define EnableTimer}
|
{$define EnableTimer}
|
||||||
{.$define EnableAccessible}
|
{.$define EnableAccessible}
|
||||||
{$define UseExternalDragManager}
|
{$define UseExternalDragManager}
|
||||||
|
{$define UseDelphiCompat}
|
||||||
|
@ -109,7 +109,12 @@ uses
|
|||||||
ActiveX,
|
ActiveX,
|
||||||
OleUtils,
|
OleUtils,
|
||||||
{$endif}
|
{$endif}
|
||||||
Windows, DelphiCompat, vtlogger, LCLType, LResources, LCLIntf, LMessages, Types,
|
{$ifdef UseDelphiCompat}
|
||||||
|
DelphiCompat,
|
||||||
|
{$else}
|
||||||
|
Windows,
|
||||||
|
{$endif}
|
||||||
|
vtlogger, LCLType, LResources, LCLIntf, LMessages, Types,
|
||||||
SysUtils, Classes, Graphics, Controls, Forms, ImgList, StdCtrls, Menus, Printers,
|
SysUtils, Classes, Graphics, Controls, Forms, ImgList, StdCtrls, Menus, Printers,
|
||||||
CommCtrl, // image lists, common controls tree structures
|
CommCtrl, // image lists, common controls tree structures
|
||||||
SyncObjs // Thread support
|
SyncObjs // Thread support
|
||||||
@ -4868,8 +4873,8 @@ var
|
|||||||
ButtonState := ButtonState or DFCS_CHECKED;
|
ButtonState := ButtonState or DFCS_CHECKED;
|
||||||
if Flat then
|
if Flat then
|
||||||
ButtonState := ButtonState or DFCS_FLAT;
|
ButtonState := ButtonState or DFCS_FLAT;
|
||||||
//todo: remap to LCLIntf
|
//lcl has difference to windows
|
||||||
Windows.DrawFrameControl(BM.Canvas.Handle, Rect(1, 2, BM.Width - 2, BM.Height - 1), DFC_BUTTON, ButtonType or ButtonState);
|
DelphiCompat.DrawFrameControl(BM.Canvas.Handle, Rect(1, 2, BM.Width - 2, BM.Height - 1), DFC_BUTTON, ButtonType or ButtonState);
|
||||||
IL.AddCopy(BM,nil);
|
IL.AddCopy(BM,nil);
|
||||||
//IL.AddMasked(BM, MaskColor);
|
//IL.AddMasked(BM, MaskColor);
|
||||||
end;
|
end;
|
||||||
@ -5019,10 +5024,13 @@ begin
|
|||||||
// Load all internal image lists and convert their colors to current desktop color scheme.
|
// Load all internal image lists and convert their colors to current desktop color scheme.
|
||||||
// In order to use high color images we have to create the image list handle ourselves.
|
// In order to use high color images we have to create the image list handle ourselves.
|
||||||
|
|
||||||
|
//todo: later remove flags when absolute sure is not necessary
|
||||||
|
{
|
||||||
if IsWinNT then
|
if IsWinNT then
|
||||||
Flags := ILC_COLOR32 or ILC_MASK
|
Flags := ILC_COLOR32 or ILC_MASK
|
||||||
else
|
else
|
||||||
Flags := ILC_COLOR16 or ILC_MASK;
|
Flags := ILC_COLOR16 or ILC_MASK;
|
||||||
|
}
|
||||||
LightCheckImages := TImageList.CreateSize(16,16);
|
LightCheckImages := TImageList.CreateSize(16,16);
|
||||||
//with LightCheckImages do
|
//with LightCheckImages do
|
||||||
// Handle := ImageList_Create(16, 16, Flags, 0, AllocBy);
|
// Handle := ImageList_Create(16, 16, Flags, 0, AllocBy);
|
||||||
@ -6645,7 +6653,7 @@ begin
|
|||||||
if Assigned(Node) and (LineBreakStyle = hlbForceMultiLine) then
|
if Assigned(Node) and (LineBreakStyle = hlbForceMultiLine) then
|
||||||
DrawFormat := DrawFormat or DT_WORDBREAK;
|
DrawFormat := DrawFormat or DT_WORDBREAK;
|
||||||
if IsWinNT then
|
if IsWinNT then
|
||||||
Windows.DrawTextW(Handle, PWideChar(HintText), Length(HintText), R, DrawFormat)
|
DelphiCompat.DrawTextW(Handle, PWideChar(HintText), Length(HintText), R, DrawFormat)
|
||||||
else
|
else
|
||||||
DrawTextW(Handle, PWideChar(HintText), Length(HintText), R, DrawFormat, False);
|
DrawTextW(Handle, PWideChar(HintText), Length(HintText), R, DrawFormat, False);
|
||||||
end;
|
end;
|
||||||
@ -6942,7 +6950,7 @@ begin
|
|||||||
// in the caption (limited by carriage return), which results in unoptimal overlay of the tooltip.
|
// in the caption (limited by carriage return), which results in unoptimal overlay of the tooltip.
|
||||||
// On Windows NT the tooltip exactly overlays the node text.
|
// On Windows NT the tooltip exactly overlays the node text.
|
||||||
if IsWinNT then
|
if IsWinNT then
|
||||||
Windows.DrawTextW(Canvas.Handle, PWideChar(HintText), Length(HintText), R, DT_CALCRECT or DT_WORDBREAK)
|
DelphiCompat.DrawTextW(Canvas.Handle, PWideChar(HintText), Length(HintText), R, DT_CALCRECT or DT_WORDBREAK)
|
||||||
else
|
else
|
||||||
DrawTextW(Canvas.Handle, PWideChar(HintText), Length(HintText), R, DT_CALCRECT, True);
|
DrawTextW(Canvas.Handle, PWideChar(HintText), Length(HintText), R, DT_CALCRECT, True);
|
||||||
if BidiMode = bdLeftToRight then
|
if BidiMode = bdLeftToRight then
|
||||||
@ -6984,7 +6992,7 @@ begin
|
|||||||
Result := Rect(0, 0, MaxWidth, FTextHeight);
|
Result := Rect(0, 0, MaxWidth, FTextHeight);
|
||||||
// Calculate the true size of the text rectangle.
|
// Calculate the true size of the text rectangle.
|
||||||
if IsWinNT then
|
if IsWinNT then
|
||||||
Windows.DrawTextW(Canvas.Handle, PWideChar(HintText), Length(HintText), Result, DT_CALCRECT)
|
DelphiCompat.DrawTextW(Canvas.Handle, PWideChar(HintText), Length(HintText), Result, DT_CALCRECT)
|
||||||
else
|
else
|
||||||
DrawTextW(Canvas.Handle, PWideChar(HintText), Length(HintText), Result, DT_CALCRECT, True);
|
DrawTextW(Canvas.Handle, PWideChar(HintText), Length(HintText), Result, DT_CALCRECT, True);
|
||||||
// The height of the text plus 2 pixels vertical margin plus the border determine the hint window height.
|
// The height of the text plus 2 pixels vertical margin plus the border determine the hint window height.
|
||||||
@ -7452,7 +7460,6 @@ var
|
|||||||
ScreenDC: HDC;
|
ScreenDC: HDC;
|
||||||
|
|
||||||
begin
|
begin
|
||||||
{$ifdef NeedWindows}
|
|
||||||
// Recapturing means we want the tree to paint the new part into our back bitmap instead to the screen.
|
// Recapturing means we want the tree to paint the new part into our back bitmap instead to the screen.
|
||||||
if Visible then
|
if Visible then
|
||||||
begin
|
begin
|
||||||
@ -7489,7 +7496,8 @@ begin
|
|||||||
// get the same effect.
|
// get the same effect.
|
||||||
GetWindowRect(Tree.Handle, ClipRect);
|
GetWindowRect(Tree.Handle, ClipRect);
|
||||||
SetWindowOrgEx(Canvas.Handle, DragRect.Left - ClipRect.Left, DragRect.Top - ClipRect.Top, nil);
|
SetWindowOrgEx(Canvas.Handle, DragRect.Left - ClipRect.Left, DragRect.Top - ClipRect.Top, nil);
|
||||||
Tree.Perform(WM_PRINT, Integer(Canvas.Handle), PRF_NONCLIENT);
|
//todo: see what todo here
|
||||||
|
//Tree.Perform(WM_PRINT, Integer(Canvas.Handle), PRF_NONCLIENT);
|
||||||
SetWindowOrgEx(Canvas.Handle, 0, 0, nil);
|
SetWindowOrgEx(Canvas.Handle, 0, 0, nil);
|
||||||
end;
|
end;
|
||||||
SelectClipRgn(Canvas.Handle, 0);
|
SelectClipRgn(Canvas.Handle, 0);
|
||||||
@ -7506,7 +7514,6 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
{$endif}
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
//----------------------------------------------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------------------------------------------
|
||||||
@ -8809,13 +8816,13 @@ begin
|
|||||||
OffsetRect(Bounds, 1, 1);
|
OffsetRect(Bounds, 1, 1);
|
||||||
SetTextColor(DC, ColorToRGB(clBtnHighlight));
|
SetTextColor(DC, ColorToRGB(clBtnHighlight));
|
||||||
if IsWinNT then
|
if IsWinNT then
|
||||||
Windows.DrawTextW(DC, PWideChar(Caption), Length(Caption), Bounds, DrawFormat)
|
DelphiCompat.DrawTextW(DC, PWideChar(Caption), Length(Caption), Bounds, DrawFormat)
|
||||||
else
|
else
|
||||||
DrawTextW(DC, PWideChar(Caption), Length(Caption), Bounds, DrawFormat, False);
|
DrawTextW(DC, PWideChar(Caption), Length(Caption), Bounds, DrawFormat, False);
|
||||||
OffsetRect(Bounds, -1, -1);
|
OffsetRect(Bounds, -1, -1);
|
||||||
SetTextColor(DC, ColorToRGB(clBtnShadow));
|
SetTextColor(DC, ColorToRGB(clBtnShadow));
|
||||||
if IsWinNT then
|
if IsWinNT then
|
||||||
Windows.DrawTextW(DC, PWideChar(Caption), Length(Caption), Bounds, DrawFormat)
|
DelphiCompat.DrawTextW(DC, PWideChar(Caption), Length(Caption), Bounds, DrawFormat)
|
||||||
else
|
else
|
||||||
DrawTextW(DC, PWideChar(Caption), Length(Caption), Bounds, DrawFormat, False);
|
DrawTextW(DC, PWideChar(Caption), Length(Caption), Bounds, DrawFormat, False);
|
||||||
end
|
end
|
||||||
@ -8826,7 +8833,7 @@ begin
|
|||||||
else
|
else
|
||||||
SetTextColor(DC, ColorToRGB(FHeader.FFont.Color));
|
SetTextColor(DC, ColorToRGB(FHeader.FFont.Color));
|
||||||
if IsWinNT then
|
if IsWinNT then
|
||||||
Windows.DrawTextW(DC, PWideChar(Caption), Length(Caption), Bounds, DrawFormat)
|
DelphiCompat.DrawTextW(DC, PWideChar(Caption), Length(Caption), Bounds, DrawFormat)
|
||||||
else
|
else
|
||||||
DrawTextW(DC, PWideChar(Caption), Length(Caption), Bounds, DrawFormat, False);
|
DrawTextW(DC, PWideChar(Caption), Length(Caption), Bounds, DrawFormat, False);
|
||||||
end;
|
end;
|
||||||
@ -8928,23 +8935,24 @@ begin
|
|||||||
Width := ButtonR.Right - ButtonR.Left;
|
Width := ButtonR.Right - ButtonR.Left;
|
||||||
if Width <= 32 then
|
if Width <= 32 then
|
||||||
begin
|
begin
|
||||||
ImageList_DrawEx(UtilityImages.Handle, 8, DC, ButtonR.Right - 16, ButtonR.Bottom - 3, 16, 3, CLR_NONE, CLR_NONE,
|
//todo
|
||||||
ILD_NORMAL);
|
//ImageList_DrawEx(UtilityImages.Handle, 8, DC, ButtonR.Right - 16, ButtonR.Bottom - 3, 16, 3, CLR_NONE, CLR_NONE,
|
||||||
ImageList_DrawEx(UtilityImages.Handle, 6, DC, ButtonR.Left, ButtonR.Bottom - 3, Width div 2, 3, CLR_NONE,
|
// ILD_NORMAL);
|
||||||
CLR_NONE, ILD_NORMAL);
|
//ImageList_DrawEx(UtilityImages.Handle, 6, DC, ButtonR.Left, ButtonR.Bottom - 3, Width div 2, 3, CLR_NONE,
|
||||||
|
// CLR_NONE, ILD_NORMAL);
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
begin
|
begin
|
||||||
ImageList_DrawEx(UtilityImages.Handle, 6, DC, ButtonR.Left, ButtonR.Bottom - 3, 16, 3, CLR_NONE, CLR_NONE,
|
//ImageList_DrawEx(UtilityImages.Handle, 6, DC, ButtonR.Left, ButtonR.Bottom - 3, 16, 3, CLR_NONE, CLR_NONE,
|
||||||
ILD_NORMAL);
|
// ILD_NORMAL);
|
||||||
// Replicate inner part as many times as need to fill up the button rectangle.
|
// Replicate inner part as many times as need to fill up the button rectangle.
|
||||||
XPos := ButtonR.Left + 16;
|
XPos := ButtonR.Left + 16;
|
||||||
repeat
|
repeat
|
||||||
ImageList_DrawEx(UtilityImages.Handle, 7, DC, XPos, ButtonR.Bottom - 3, 16, 3, CLR_NONE, CLR_NONE, ILD_NORMAL);
|
//ImageList_DrawEx(UtilityImages.Handle, 7, DC, XPos, ButtonR.Bottom - 3, 16, 3, CLR_NONE, CLR_NONE, ILD_NORMAL);
|
||||||
Inc(XPos, 16);
|
Inc(XPos, 16);
|
||||||
until XPos + 16 >= ButtonR.Right;
|
until XPos + 16 >= ButtonR.Right;
|
||||||
ImageList_DrawEx(UtilityImages.Handle, 8, DC, ButtonR.Right - 16, ButtonR.Bottom - 3, 16, 3, CLR_NONE, CLR_NONE,
|
//ImageList_DrawEx(UtilityImages.Handle, 8, DC, ButtonR.Right - 16, ButtonR.Bottom - 3, 16, 3, CLR_NONE, CLR_NONE,
|
||||||
ILD_NORMAL);
|
// ILD_NORMAL);
|
||||||
end;
|
end;
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
@ -17095,7 +17103,7 @@ begin
|
|||||||
NewCursor := Cursor;
|
NewCursor := Cursor;
|
||||||
|
|
||||||
DoGetCursor(NewCursor);
|
DoGetCursor(NewCursor);
|
||||||
Windows.SetCursor(Screen.Cursors[NewCursor]);
|
SetCursor(Screen.Cursors[NewCursor]);
|
||||||
Message.Result := 1;
|
Message.Result := 1;
|
||||||
end;
|
end;
|
||||||
//lcl does not have WMSetCursor
|
//lcl does not have WMSetCursor
|
||||||
@ -19614,9 +19622,9 @@ begin
|
|||||||
Inc(R.Top,FHeader.Height);
|
Inc(R.Top,FHeader.Height);
|
||||||
Inc(R.Bottom,FHeader.Height);
|
Inc(R.Bottom,FHeader.Height);
|
||||||
end;
|
end;
|
||||||
Windows.ScrollWindow(Handle, DeltaX, 0, @R, @R);
|
DelphiCompat.ScrollWindow(Handle, DeltaX, 0, @R, @R);
|
||||||
if DeltaY <> 0 then
|
if DeltaY <> 0 then
|
||||||
Windows.ScrollWindow(Handle, 0, DeltaY, @R, @R);
|
DelphiCompat.ScrollWindow(Handle, 0, DeltaY, @R, @R);
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
begin
|
begin
|
||||||
@ -20791,7 +20799,9 @@ var
|
|||||||
Data: PVTReference;
|
Data: PVTReference;
|
||||||
|
|
||||||
begin
|
begin
|
||||||
{$ifdef NeedWindows}
|
{$ifdef UseExternalDragManager}
|
||||||
|
Result:=TBaseVirtualTree(VirtualDragManager.GetTreeFromDataObject(DataObject,StandardOLEFormat));
|
||||||
|
{$else}
|
||||||
Result := nil;
|
Result := nil;
|
||||||
if Assigned(DataObject) then
|
if Assigned(DataObject) then
|
||||||
begin
|
begin
|
||||||
@ -22406,7 +22416,7 @@ begin
|
|||||||
// a sliding window of the tree image.
|
// a sliding window of the tree image.
|
||||||
Logger.Send([lcPaintDetails],'FEffectiveOffsetX: %d, RTLOffset: %d, OffsetY: %d',[FEffectiveOffsetX,RTLOffset,FOffsetY]);
|
Logger.Send([lcPaintDetails],'FEffectiveOffsetX: %d, RTLOffset: %d, OffsetY: %d',[FEffectiveOffsetX,RTLOffset,FOffsetY]);
|
||||||
|
|
||||||
Windows.OffsetRect(Window, FEffectiveOffsetX - RTLOffset, -FOffsetY);
|
OffsetRect(Window, FEffectiveOffsetX - RTLOffset, -FOffsetY);
|
||||||
Logger.Active:=Logger.CalledBy('DoDragging');
|
Logger.Active:=Logger.CalledBy('DoDragging');
|
||||||
PaintTree(Canvas, Window, Target, Options);
|
PaintTree(Canvas, Window, Target, Options);
|
||||||
Logger.Active:=True;
|
Logger.Active:=True;
|
||||||
@ -23848,8 +23858,9 @@ begin
|
|||||||
|
|
||||||
if not Handled then
|
if not Handled then
|
||||||
begin
|
begin
|
||||||
if (Message.Msg in [WM_NCLBUTTONDOWN, WM_NCRBUTTONDOWN, WM_NCMBUTTONDOWN]) and not Focused and CanFocus then
|
//lcl: probably not necessary
|
||||||
SetFocus;
|
//if (Message.Msg in [WM_NCLBUTTONDOWN, WM_NCRBUTTONDOWN, WM_NCMBUTTONDOWN]) and not Focused and CanFocus then
|
||||||
|
// SetFocus;
|
||||||
inherited;
|
inherited;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -30304,7 +30315,7 @@ begin
|
|||||||
else
|
else
|
||||||
SetBkMode(Canvas.Handle, OPAQUE);
|
SetBkMode(Canvas.Handle, OPAQUE);
|
||||||
if IsWinNT then
|
if IsWinNT then
|
||||||
Windows.DrawTextW(Canvas.Handle, PWideChar(Text), Length(Text), R, DrawFormat)
|
DelphiCompat.DrawTextW(Canvas.Handle, PWideChar(Text), Length(Text), R, DrawFormat)
|
||||||
else
|
else
|
||||||
DrawTextW(Canvas.Handle, PWideChar(Text), Length(Text), R, DrawFormat, False);
|
DrawTextW(Canvas.Handle, PWideChar(Text), Length(Text), R, DrawFormat, False);
|
||||||
end;
|
end;
|
||||||
|
@ -1,5 +1,3 @@
|
|||||||
{ This is an automatically generated lazarus resource file }
|
|
||||||
|
|
||||||
LazarusResources.Add('TMainForm','FORMDATA',[
|
LazarusResources.Add('TMainForm','FORMDATA',[
|
||||||
'TPF0'#9'TMainForm'#8'MainForm'#4'Left'#3'n'#1#6'Height'#3'?'#2#3'Top'#3#215#0
|
'TPF0'#9'TMainForm'#8'MainForm'#4'Left'#3'n'#1#6'Height'#3'?'#2#3'Top'#3#215#0
|
||||||
+#5'Width'#3#22#3#18'HorzScrollBar.Page'#3#21#3#18'VertScrollBar.Page'#3'>'#2
|
+#5'Width'#3#22#3#18'HorzScrollBar.Page'#3#21#3#18'VertScrollBar.Page'#3'>'#2
|
||||||
|
@ -90,169 +90,10 @@ end;
|
|||||||
|
|
||||||
function InvalidateRect(aHandle : HWND; ARect : pRect; bErase : Boolean) : Boolean;
|
function InvalidateRect(aHandle : HWND; ARect : pRect; bErase : Boolean) : Boolean;
|
||||||
begin
|
begin
|
||||||
//Logger.EnterMethod(lcPaint,'InvalidateRect');
|
|
||||||
//Logger.Send(lcPaint,'Rect',ARect^);
|
Result:=InvalidateRect(aHandle,ARect,bErase);
|
||||||
//Logger.SendCallStack(lcPaint,'CallStack');
|
|
||||||
Result:=Windows.InvalidateRect(aHandle,ARect,bErase);
|
|
||||||
//Logger.ExitMethod(lcPaint,'InvalidateRect');
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{$ifndef NeedWindows}
|
|
||||||
|
|
||||||
//Dummy function. Used in many places
|
|
||||||
function ImageList_DrawEx(himl:THandle; i:longint; hdcDst:HDC; x:longint;
|
|
||||||
y:longint;dx:longint; dy:longint; rgbBk:COLORREF; rgbFg:COLORREF; fStyle:UINT):Boolean;
|
|
||||||
begin
|
|
||||||
Logger.AddCheckPoint(lcDummyFunctions,'ImageList_DrawEx');
|
|
||||||
end;
|
|
||||||
|
|
||||||
//Used in TVirtualTreeColumns.AnimatedResize
|
|
||||||
function GetWindowDC(hWnd:HWND):HDC;
|
|
||||||
begin
|
|
||||||
Logger.AddCheckPoint(lcDummyFunctions,'GetWindowDC');
|
|
||||||
end;
|
|
||||||
|
|
||||||
//Used in TVTDragImage.DragTo, TVirtualTreeColumns.AnimatedResize, TBaseVirtualTree.ToggleCallback,
|
|
||||||
//TBaseVirtualTree.TileBackground
|
|
||||||
|
|
||||||
function ScrollDC(hDC:HDC; dx:longint; dy:longint; var lprcScroll:TRECT;
|
|
||||||
var lprcClip:TRECT;hrgnUpdate:HRGN; lprcUpdate:PRECT):Boolean;
|
|
||||||
begin
|
|
||||||
Logger.AddCheckPoint(lcDummyFunctions,'ScrollDC');
|
|
||||||
end;
|
|
||||||
|
|
||||||
|
|
||||||
// TCustomVirtualTreeOptions.SetPaintOptions, TVTHeader.Invalidate, TVTColors.SetColor
|
|
||||||
//CMEnabledChanged, TBaseVirtualTree.WMEnable, TBaseVirtualTree.WMVScroll,
|
|
||||||
// TBaseVirtualTree.UpdateWindowAndDragImage, TBaseVirtualTree.RepaintNode
|
|
||||||
function RedrawWindow(hWnd:HWND; lprcUpdate:PRECT; hrgnUpdate:HRGN;
|
|
||||||
flags:LongWord):Boolean; overload;
|
|
||||||
begin
|
|
||||||
Logger.AddCheckPoint(lcDummyFunctions,'RedrawWindow');
|
|
||||||
end;
|
|
||||||
|
|
||||||
function RedrawWindow(hWnd:HWND; var lprcUpdate:TRECT; hrgnUpdate:HRGN;
|
|
||||||
flags:UINT):Boolean; overload;
|
|
||||||
begin
|
|
||||||
end;
|
|
||||||
//Used in LimitPaintingToArea
|
|
||||||
function LPtoDP(_para1:HDC; _para2:PPOINT; _para3:longint):Boolean;
|
|
||||||
begin
|
|
||||||
Logger.AddCheckPoint(lcDummyFunctions,'LPtoDP');
|
|
||||||
end;
|
|
||||||
|
|
||||||
//Used to the brush of dottedline
|
|
||||||
function CreatePatternBrush(_para1:HBITMAP):HBRUSH;
|
|
||||||
var
|
|
||||||
ALog: TLogBrush;
|
|
||||||
begin
|
|
||||||
Logger.AddCheckPoint(lcDummyFunctions,'CreatePatternBrush');
|
|
||||||
//lcl_todo
|
|
||||||
with ALog do
|
|
||||||
begin
|
|
||||||
lbStyle:=0;
|
|
||||||
lbColor:=0;
|
|
||||||
lbHatch:=0;
|
|
||||||
end;
|
|
||||||
Result:=CreateBrushIndirect(ALog);
|
|
||||||
end;
|
|
||||||
|
|
||||||
function GetBkColor(_para1:HDC):COLORREF;
|
|
||||||
begin
|
|
||||||
Logger.AddCheckPoint(lcDummyFunctions,'GetBkColor');
|
|
||||||
end;
|
|
||||||
|
|
||||||
|
|
||||||
function ImageList_DragShowNolock(fShow:Boolean): Boolean;
|
|
||||||
begin
|
|
||||||
Logger.AddCheckPoint(lcDummyFunctions,'ImageList_DragShowNoLock');
|
|
||||||
end;
|
|
||||||
|
|
||||||
function GetKeyboardState(lpKeyState:PBYTE):Boolean;
|
|
||||||
begin
|
|
||||||
Logger.AddCheckPoint(lcDummyFunctions,'GetKeyboardState');
|
|
||||||
end;
|
|
||||||
|
|
||||||
function ToAscii(uVirtKey:UINT; uScanCode:UINT; lpKeyState:PBYTE;
|
|
||||||
lpChar: PChar; uFlags:UINT):longint;
|
|
||||||
begin
|
|
||||||
Logger.AddCheckPoint(lcDummyFunctions,'ToAscii');
|
|
||||||
end;
|
|
||||||
|
|
||||||
function SystemParametersInfo(uiAction:UINT; uiParam:UINT;
|
|
||||||
pvParam:Pointer; fWinIni:UINT):Boolean;
|
|
||||||
begin
|
|
||||||
Logger.AddCheckPoint(lcDummyFunctions,'SystemParameterInfo');
|
|
||||||
end;
|
|
||||||
|
|
||||||
function SetTimer(hWnd:HWND; nIDEvent:UINT; uElapse:UINT; lpTimerFunc:Pointer):UINT;
|
|
||||||
begin
|
|
||||||
Logger.AddCheckPoint(lcDummyFunctions,'SetTimer');
|
|
||||||
end;
|
|
||||||
|
|
||||||
function SubtractRect(lprcDst:TRECT; lprcSrc1:TRECT; lprcSrc2:TRECT):Boolean;
|
|
||||||
begin
|
|
||||||
Logger.AddCheckPoint(lcDummyFunctions,'SubtractRect');
|
|
||||||
end;
|
|
||||||
|
|
||||||
function DeferWindowPos(hWinPosInfo:THandle; hWnd:THandle; hWndInsertAfter:THandle;
|
|
||||||
x:longint; y:longint;cx:longint; cy:longint; uFlags:UINT):THandle;
|
|
||||||
begin
|
|
||||||
Logger.AddCheckPoint(lcDummyFunctions,'DeferWindowPos');
|
|
||||||
end;
|
|
||||||
|
|
||||||
function BeginDeferWindowPos(nNumWindows:longint):THandle;
|
|
||||||
begin
|
|
||||||
Logger.AddCheckPoint(lcDummyFunctions,'BeginDeferWindowPos');
|
|
||||||
end;
|
|
||||||
|
|
||||||
function EndDeferWindowPos(hWinPosInfo:THandle):Boolean;
|
|
||||||
begin
|
|
||||||
Logger.AddCheckPoint(lcDummyFunctions,'EndDeferWindowpos');
|
|
||||||
end;
|
|
||||||
|
|
||||||
function GetLocaleInfo(Locale:DWord; LCType:DWord; lpLCData:PChar; cchData:longint):longint;
|
|
||||||
begin
|
|
||||||
Logger.AddCheckPoint(lcDummyFunctions,'GetLocaleInfo');
|
|
||||||
end;
|
|
||||||
|
|
||||||
function GetACP:UINT;
|
|
||||||
begin
|
|
||||||
Logger.AddCheckPoint(lcDummyFunctions,'GetACP');
|
|
||||||
end;
|
|
||||||
|
|
||||||
function MultiByteToWideChar(CodePage:UINT; dwFlags:DWORD; lpMultiByteStr:PChar;
|
|
||||||
cchMultiByte:longint; lpWideCharStr:PWideChar; cchWideChar:longint):longint;
|
|
||||||
begin
|
|
||||||
Logger.AddCheckPoint(lcDummyFunctions,'MultiByteToWideChar');
|
|
||||||
end;
|
|
||||||
|
|
||||||
function GetKeyboardLayout(dwLayout:DWORD):THandle;
|
|
||||||
begin
|
|
||||||
Logger.AddCheckPoint(lcDummyFunctions,'GetKeyboardLayout');
|
|
||||||
end;
|
|
||||||
|
|
||||||
function DefWindowProc(hWnd:HWND; Msg:UINT; wParam:WPARAM; lParam:LPARAM):LRESULT;
|
|
||||||
begin
|
|
||||||
Logger.AddCheckPoint(lcDummyFunctions,'DefWindowProc');
|
|
||||||
end;
|
|
||||||
|
|
||||||
function GetDCEx(hWnd:HWND; hrgnClip:HRGN; flags:DWORD):HDC;
|
|
||||||
begin
|
|
||||||
Logger.AddCheckPoint(lcDummyFunctions,'GetDCEx');
|
|
||||||
end;
|
|
||||||
|
|
||||||
function OffsetRgn(_para1:HRGN; _para2:longint; _para3:longint):longint;
|
|
||||||
begin
|
|
||||||
Logger.AddCheckPoint(lcDummyFunctions,'OffsetRegion');
|
|
||||||
end;
|
|
||||||
|
|
||||||
function SetBrushOrgEx(_para1:HDC; _para2:longint; _para3:longint; _para4:PPOINT):Boolean;
|
|
||||||
begin
|
|
||||||
Logger.AddCheckPoint(lcDummyFunctions,'SetBrushOrgEx');
|
|
||||||
end;
|
|
||||||
|
|
||||||
{$endif}
|
|
||||||
|
|
||||||
{$ifndef UseExternalDragManager}
|
{$ifndef UseExternalDragManager}
|
||||||
function RegisterDragDrop(hwnd:HWND; pDropTarget:IDropTarget):WINOLEAPI;stdcall;external 'ole32.dll' name 'RegisterDragDrop';
|
function RegisterDragDrop(hwnd:HWND; pDropTarget:IDropTarget):WINOLEAPI;stdcall;external 'ole32.dll' name 'RegisterDragDrop';
|
||||||
|
@ -91,7 +91,14 @@ Port started in 26/01/07
|
|||||||
* Fixed drawing problem when using ScrollBar or MouseWheel
|
* Fixed drawing problem when using ScrollBar or MouseWheel
|
||||||
* Implemented Support for check images
|
* Implemented Support for check images
|
||||||
* Fixed position of editors while scrolling
|
* Fixed position of editors while scrolling
|
||||||
* Started header implementation
|
* Header implementation
|
||||||
|
* Started handling of Header messages
|
||||||
|
* Made TVTHeaderPopupMenu.Popup virtual
|
||||||
|
* Added woekaround to drawing when scrolling
|
||||||
|
* Implemented column resize
|
||||||
|
* Implemented SetTimer/KillTimer
|
||||||
|
* Fixed column position
|
||||||
|
* Removed direct dependency from ActiveX, Oleutils
|
||||||
|
|
||||||
#Major Tasks#
|
#Major Tasks#
|
||||||
< > General Painting
|
< > General Painting
|
||||||
@ -168,7 +175,7 @@ Port started in 26/01/07
|
|||||||
[*] AFAIK yes
|
[*] AFAIK yes
|
||||||
< > See if Application.ProcessMessages in InterruptValidation will work (WM_QUIT handling??)
|
< > See if Application.ProcessMessages in InterruptValidation will work (WM_QUIT handling??)
|
||||||
<*> See if windows.GetUpdateRect is equal to PaintStruct in WM Paint
|
<*> See if windows.GetUpdateRect is equal to PaintStruct in WM Paint
|
||||||
[*] Yes and no. The values of GetUpdateRect and rcPaint is equal in most times. So is safe to use it
|
[*] Yes and no. The values of GetUpdateRect and rcPaint are equal in most times. So is safe to use it
|
||||||
But GetUpdateRect will always return an empty Rect when called inside LM_PAINT because there's a
|
But GetUpdateRect will always return an empty Rect when called inside LM_PAINT because there's a
|
||||||
prior BeginPaint call
|
prior BeginPaint call
|
||||||
< > In TWMKillfocus the code to nullify the active control is probably not necessary
|
< > In TWMKillfocus the code to nullify the active control is probably not necessary
|
||||||
@ -188,3 +195,4 @@ Port started in 26/01/07
|
|||||||
< > Document Differences between WMPaint
|
< > Document Differences between WMPaint
|
||||||
< > Document that ScrollWindow does not exists in gtk
|
< > Document that ScrollWindow does not exists in gtk
|
||||||
< > Due to lclheader implementation, when a editor is scrolled out of the window it disppears (does not returns when scroled back)
|
< > Due to lclheader implementation, when a editor is scrolled out of the window it disppears (does not returns when scroled back)
|
||||||
|
< > Document differences of DrawFrameControl, ScrollWindow, InvalidateRect
|
||||||
|
@ -177,6 +177,12 @@ type
|
|||||||
function QueryContinueDrag(EscapePressed: BOOL; KeyState: Integer): HResult; stdcall;
|
function QueryContinueDrag(EscapePressed: BOOL; KeyState: Integer): HResult; stdcall;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
//Ole helper functions
|
||||||
|
|
||||||
|
function Succeeded(Status : HRESULT) : BOOLEAN;
|
||||||
|
|
||||||
|
function Failed(Status : HRESULT) : BOOLEAN;
|
||||||
|
|
||||||
//ActiveX functions that have wrong calling convention in fpc
|
//ActiveX functions that have wrong calling convention in fpc
|
||||||
|
|
||||||
function RegisterDragDrop(hwnd:HWND; pDropTarget:IDropTarget):WINOLEAPI;stdcall;external 'ole32.dll' name 'RegisterDragDrop';
|
function RegisterDragDrop(hwnd:HWND; pDropTarget:IDropTarget):WINOLEAPI;stdcall;external 'ole32.dll' name 'RegisterDragDrop';
|
||||||
@ -212,6 +218,8 @@ type
|
|||||||
|
|
||||||
procedure UnlockMediumData(Medium:TStgMedium);
|
procedure UnlockMediumData(Medium:TStgMedium);
|
||||||
|
|
||||||
|
function GetTreeFromDataObject(const DataObject: IDataObject; var Format: TFormatEtc): TObject;
|
||||||
|
|
||||||
implementation
|
implementation
|
||||||
|
|
||||||
uses
|
uses
|
||||||
@ -221,6 +229,17 @@ type
|
|||||||
TVirtualTreeAccess = class (TBaseVirtualTree)
|
TVirtualTreeAccess = class (TBaseVirtualTree)
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
function Succeeded(Status : HRESULT) : BOOL;
|
||||||
|
begin
|
||||||
|
Succeeded:=Status and HRESULT($80000000)=0;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function Failed(Status : HRESULT) : BOOL;
|
||||||
|
begin
|
||||||
|
Failed:=Status and HRESULT($80000000)<>0;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
function RenderOLEData(Tree: TObject; const FormatEtcIn: TFormatEtc; out
|
function RenderOLEData(Tree: TObject; const FormatEtcIn: TFormatEtc; out
|
||||||
Medium: TStgMedium; ForClipboard: Boolean): HResult;
|
Medium: TStgMedium; ForClipboard: Boolean): HResult;
|
||||||
|
|
||||||
@ -353,6 +372,32 @@ begin
|
|||||||
GlobalUnlock(Medium.hGlobal);
|
GlobalUnlock(Medium.hGlobal);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
function GetTreeFromDataObject(const DataObject: IDataObject;
|
||||||
|
var Format: TFormatEtc): TObject;
|
||||||
|
|
||||||
|
var
|
||||||
|
Medium: TStgMedium;
|
||||||
|
Data: PVTReference;
|
||||||
|
|
||||||
|
begin
|
||||||
|
Result := nil;
|
||||||
|
if Assigned(DataObject) then
|
||||||
|
begin
|
||||||
|
Format.cfFormat := CF_VTREFERENCE;
|
||||||
|
if DataObject.GetData(Format, Medium) = S_OK then
|
||||||
|
begin
|
||||||
|
Data := GlobalLock(Medium.hGlobal);
|
||||||
|
if Assigned(Data) then
|
||||||
|
begin
|
||||||
|
if Data.Process = GetCurrentProcessID then
|
||||||
|
Result := Data.Tree;
|
||||||
|
GlobalUnlock(Medium.hGlobal);
|
||||||
|
end;
|
||||||
|
ReleaseStgMedium(@Medium);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
//----------------------------------------------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
// OLE drag and drop support classes
|
// OLE drag and drop support classes
|
||||||
|
Reference in New Issue
Block a user