jvcllaz: Move unit JvButton.pas to new package JvStdCtrls (like in Delphi version).

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@5442 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
wp_xxyyzz
2016-12-07 16:17:41 +00:00
parent ccc4276d0d
commit 13e96a6e1b
14 changed files with 263 additions and 1042 deletions

View File

@ -14,12 +14,12 @@ implementation
{$R ../../resource/JvHTControlsReg.res} {$R ../../resource/JvHTControlsReg.res}
uses uses
Classes, JvDsgnConsts, JvHtControls, {JvDBHTLabel,} JvHint, JvHTHintForm, Classes, JvDsgnConsts,
JvHtControls, {JvDBHTLabel,} JvHint, JvHTHintForm,
PropEdits, Controls; PropEdits, Controls;
procedure Register; procedure Register;
begin begin
// RegisterComponents(RsPaletteButton, [TJvHTButton]);
RegisterComponents(RsPaletteLabel, [TJvHTLabel]); RegisterComponents(RsPaletteLabel, [TJvHTLabel]);
RegisterComponents(RsPaletteListComboTree, [TJvHTListBox, TJvHTComboBox]); RegisterComponents(RsPaletteListComboTree, [TJvHTListBox, TJvHTComboBox]);
RegisterComponents(RsPaletteNonVisual, [TJvHint]); RegisterComponents(RsPaletteNonVisual, [TJvHint]);

View File

@ -0,0 +1,24 @@
unit JvStdCtrlsReg;
{$mode objfpc}{$H+}
interface
uses
SysUtils;
procedure Register;
implementation
uses
Classes, JvDsgnConsts, JvButton,
Controls;
procedure Register;
begin
//RegisterComponents(RsPaletteButton, [TJvButton]);
end;
end.

View File

@ -36,7 +36,7 @@
<PackageName Value="LCL"/> <PackageName Value="LCL"/>
</Item2> </Item2>
</RequiredPackages> </RequiredPackages>
<Units Count="6"> <Units Count="7">
<Unit0> <Unit0>
<Filename Value="JvNavPaneDemo.lpr"/> <Filename Value="JvNavPaneDemo.lpr"/>
<IsPartOfProject Value="True"/> <IsPartOfProject Value="True"/>
@ -51,7 +51,6 @@
<ComponentName Value="JvNavPaneDemoMainFrm"/> <ComponentName Value="JvNavPaneDemoMainFrm"/>
<HasResources Value="True"/> <HasResources Value="True"/>
<ResourceBaseClass Value="Form"/> <ResourceBaseClass Value="Form"/>
<IsVisibleTab Value="True"/>
<EditorIndex Value="1"/> <EditorIndex Value="1"/>
<CursorPos X="3" Y="11"/> <CursorPos X="3" Y="11"/>
<UsageCount Value="22"/> <UsageCount Value="22"/>
@ -83,6 +82,15 @@
<CursorPos X="31" Y="47"/> <CursorPos X="31" Y="47"/>
<UsageCount Value="10"/> <UsageCount Value="10"/>
</Unit5> </Unit5>
<Unit6>
<Filename Value="..\..\run\JvPageComps\JvNavigationPane.pas"/>
<IsVisibleTab Value="True"/>
<EditorIndex Value="2"/>
<TopLine Value="31"/>
<CursorPos X="61" Y="50"/>
<UsageCount Value="10"/>
<Loaded Value="True"/>
</Unit6>
</Units> </Units>
<JumpHistory Count="2" HistoryIndex="1"> <JumpHistory Count="2" HistoryIndex="1">
<Position1> <Position1>

View File

@ -19,19 +19,15 @@
- Listboxes, Comboboxes, TreeViews"/> - Listboxes, Comboboxes, TreeViews"/>
<License Value="The JVCL is released in accordance with the MPL 1.1 license. To get your own copy or read it, go to http://www.mozilla.org/MPL/MPL-1.1.html. "/> <License Value="The JVCL is released in accordance with the MPL 1.1 license. To get your own copy or read it, go to http://www.mozilla.org/MPL/MPL-1.1.html. "/>
<Version Major="1" Release="1"/> <Version Major="1" Release="1"/>
<Files Count="3"> <Files Count="2">
<Item1> <Item1>
<Filename Value="..\run\JvCtrls\JvButton.pas"/>
<UnitName Value="JvButton"/>
</Item1>
<Item2>
<Filename Value="..\run\JvCtrls\JvHint.pas"/> <Filename Value="..\run\JvCtrls\JvHint.pas"/>
<UnitName Value="JvHint"/> <UnitName Value="JvHint"/>
</Item2> </Item1>
<Item3> <Item2>
<Filename Value="..\run\JvCtrls\JvHtControls.pas"/> <Filename Value="..\run\JvCtrls\JvHtControls.pas"/>
<UnitName Value="JvHtControls"/> <UnitName Value="JvHtControls"/>
</Item3> </Item2>
</Files> </Files>
<RequiredPkgs Count="2"> <RequiredPkgs Count="2">
<Item1> <Item1>

View File

@ -8,7 +8,7 @@
<Version Value="11"/> <Version Value="11"/>
<PathDelim Value="\"/> <PathDelim Value="\"/>
<SearchPaths> <SearchPaths>
<OtherUnitFiles Value="..\run\JvPageComps"/> <OtherUnitFiles Value="..\run\JvPageComps;..\run\JvStdCtrls"/>
<UnitOutputDirectory Value="..\lib\$(TargetCPU)-$(TargetOS)\run\JvPageComps"/> <UnitOutputDirectory Value="..\lib\$(TargetCPU)-$(TargetOS)\run\JvPageComps"/>
</SearchPaths> </SearchPaths>
</CompilerOptions> </CompilerOptions>
@ -27,7 +27,7 @@
</Files> </Files>
<RequiredPkgs Count="3"> <RequiredPkgs Count="3">
<Item1> <Item1>
<PackageName Value="JvCtrlsLazR"/> <PackageName Value="JvStdCtrlsLazR"/>
</Item1> </Item1>
<Item2> <Item2>
<PackageName Value="JvCoreLazR"/> <PackageName Value="JvCoreLazR"/>

View File

@ -0,0 +1,44 @@
<?xml version="1.0" encoding="UTF-8"?>
<CONFIG>
<Package Version="4">
<PathDelim Value="\"/>
<Name Value="JvStdCtrlsLazD"/>
<Type Value="RunAndDesignTime"/>
<Author Value="Lazarus port by: Werner Pamler"/>
<CompilerOptions>
<Version Value="11"/>
<PathDelim Value="\"/>
<SearchPaths>
<OtherUnitFiles Value="..\design\JvStdCtrls"/>
<UnitOutputDirectory Value="..\lib\$(TargetCPU)-$(TargetOS)\design\JvStdCtrls"/>
</SearchPaths>
</CompilerOptions>
<Description Value="Standard controls of the JVCL library (https://sourceforge.net/projects/jvcl/) (designtime code)"/>
<License Value="The JVCL is released in accordance with the MPL 1.1 license. To get your own copy or read it, go to http://www.mozilla.org/MPL/MPL-1.1.html. "/>
<Version Major="1" Release="1"/>
<Files Count="1">
<Item1>
<Filename Value="..\design\JvStdCtrls\JvStdCtrlsReg.pas"/>
<HasRegisterProc Value="True"/>
<UnitName Value="JvStdCtrlsReg"/>
</Item1>
</Files>
<RequiredPkgs Count="3">
<Item1>
<PackageName Value="JvCoreLazD"/>
</Item1>
<Item2>
<PackageName Value="JvStdCtrlsLazR"/>
</Item2>
<Item3>
<PackageName Value="FCL"/>
</Item3>
</RequiredPkgs>
<UsageOptions>
<UnitPath Value="$(PkgOutDir)"/>
</UsageOptions>
<PublishOptions>
<Version Value="2"/>
</PublishOptions>
</Package>
</CONFIG>

View File

@ -0,0 +1,43 @@
<?xml version="1.0" encoding="UTF-8"?>
<CONFIG>
<Package Version="4">
<PathDelim Value="\"/>
<Name Value="JvStdCtrlsLazR"/>
<Author Value="Lazarus port by: Werner Pamler"/>
<CompilerOptions>
<Version Value="11"/>
<PathDelim Value="\"/>
<SearchPaths>
<OtherUnitFiles Value="..\run\JvStdCtrls"/>
<UnitOutputDirectory Value="..\lib\$(TargetCPU)-$(TargetOS)\run\JvStdCtrls"/>
</SearchPaths>
</CompilerOptions>
<Description Value="Standard controls of the JVCL library (https://sourceforge.net/projects/jvcl/) (runtime code):
- Buttons
- Hypertext components
- Labels
- Listboxes, Comboboxes, TreeViews"/>
<License Value="The JVCL is released in accordance with the MPL 1.1 license. To get your own copy or read it, go to http://www.mozilla.org/MPL/MPL-1.1.html. "/>
<Version Major="1" Release="1"/>
<Files Count="1">
<Item1>
<Filename Value="..\run\JvStdCtrls\JvButton.pas"/>
<UnitName Value="JvButton"/>
</Item1>
</Files>
<RequiredPkgs Count="2">
<Item1>
<PackageName Value="JvCoreLazR"/>
</Item1>
<Item2>
<PackageName Value="FCL"/>
</Item2>
</RequiredPkgs>
<UsageOptions>
<UnitPath Value="$(PkgOutDir)"/>
</UsageOptions>
<PublishOptions>
<Version Value="2"/>
</PublishOptions>
</Package>
</CONFIG>

View File

@ -9,7 +9,7 @@
<PathDelim Value="\"/> <PathDelim Value="\"/>
<SearchPaths> <SearchPaths>
<OtherUnitFiles Value="..\run\JvXPCtrls"/> <OtherUnitFiles Value="..\run\JvXPCtrls"/>
<UnitOutputDirectory Value="..lib\$(TargetCPU)-$(TargetOS)\run\JvXPCtrls"/> <UnitOutputDirectory Value="..\lib\$(TargetCPU)-$(TargetOS)\run\JvXPCtrls"/>
</SearchPaths> </SearchPaths>
</CompilerOptions> </CompilerOptions>
<Description Value="XP style controls of the JVCL library (https://sourceforge.net/projects/jvcl/) (runtime code)"/> <Description Value="XP style controls of the JVCL library (https://sourceforge.net/projects/jvcl/) (runtime code)"/>
@ -43,7 +43,7 @@
</Files> </Files>
<RequiredPkgs Count="3"> <RequiredPkgs Count="3">
<Item1> <Item1>
<PackageName Value="JvCtrlsLazR"/> <PackageName Value="JvStdCtrlsLazR"/>
</Item1> </Item1>
<Item2> <Item2>
<PackageName Value="JvCoreLazR"/> <PackageName Value="JvCoreLazR"/>

View File

@ -205,6 +205,9 @@ const
AF_ICON = $00000001; AF_ICON = $00000001;
AF_SEQUENCE = $00000002; AF_SEQUENCE = $00000002;
DT_PATH_ELLIPSIS = $4000;
const const
KeyboardShiftStates = [ssShift, ssAlt, ssCtrl]; KeyboardShiftStates = [ssShift, ssAlt, ssCtrl];
MouseShiftStates = [ssLeft, ssRight, ssMiddle, ssDouble]; MouseShiftStates = [ssLeft, ssRight, ssMiddle, ssDouble];

View File

@ -44,7 +44,8 @@ unit JvExControls;
interface interface
uses uses
Classes, types, Controls, Graphics, LCLIntf, LCLType, LMessages, Forms; Classes, types, Controls, Graphics, LCLIntf, LCLType, LMessages, Forms,
JvTypes;
type type
TDlgCode = TDlgCode =
@ -67,6 +68,7 @@ const
CM_DENYSUBCLASSING = JvThemes.CM_DENYSUBCLASSING; CM_DENYSUBCLASSING = JvThemes.CM_DENYSUBCLASSING;
CM_PERFORM = CM_BASE + $500 + 0; // LParam: "Msg: ^TMessage" CM_PERFORM = CM_BASE + $500 + 0; // LParam: "Msg: ^TMessage"
CM_SETAUTOSIZE = CM_BASE + $500 + 1; // WParam: "Value: Boolean" CM_SETAUTOSIZE = CM_BASE + $500 + 1; // WParam: "Value: Boolean"
******************** NOT CONVERTED *)
type type
TJvHotTrackOptions = class; TJvHotTrackOptions = class;
@ -123,7 +125,6 @@ type
property FrameVisible: Boolean read FFrameVisible write SetFrameVisible default False; property FrameVisible: Boolean read FFrameVisible write SetFrameVisible default False;
property FrameColor: TColor read FFrameColor write SetFrameColor default $006A240A; property FrameColor: TColor read FFrameColor write SetFrameColor default $006A240A;
end; end;
******************** NOT CONVERTED *)
type type
TStructPtrMessage = class(TObject) TStructPtrMessage = class(TObject)
@ -491,7 +492,7 @@ begin
end; end;
end; end;
(******************** NOT CONVERTED
//=== { TJvHotTrackOptions } ====================================== //=== { TJvHotTrackOptions } ======================================
constructor TJvHotTrackOptions.Create; constructor TJvHotTrackOptions.Create;
@ -568,7 +569,6 @@ begin
Changed; Changed;
end; end;
end; end;
******************** NOT CONVERTED *)
//============================================================================ //============================================================================

View File

@ -46,10 +46,10 @@ interface
// the JCL has the same problem with CLX it should not make any difference. // the JCL has the same problem with CLX it should not make any difference.
uses uses
Classes, Graphics, LCLIntf, LCLType; Classes, Graphics, LCLIntf, LCLType, LMessages;
(******************** NOT CONVERTED
const const
(******************** NOT CONVERTED
{$IFDEF MSWINDOWS} {$IFDEF MSWINDOWS}
PathDelim = '\'; PathDelim = '\';
DriveDelim = ':'; DriveDelim = ':';
@ -61,8 +61,10 @@ const
AllFilesMask = '*'; AllFilesMask = '*';
{$ENDIF UNIX} {$ENDIF UNIX}
// Note: the else is on purpose, VCL is not defined for a console application // Note: the else is on purpose, VCL is not defined for a console application
******************** NOT CONVERTED *)
NullHandle = 0; NullHandle = 0;
(******************** NOT CONVERTED
{$IFDEF UNIX} {$IFDEF UNIX}
type type
TFileTime = Integer; TFileTime = Integer;
@ -854,6 +856,7 @@ const
function DateIsNull(const pdtValue: TDateTime; const pdtKind: TdtKind): Boolean; function DateIsNull(const pdtValue: TDateTime; const pdtKind: TdtKind): Boolean;
// Replacement for Win32Check to avoid platform specific warnings in D6 // Replacement for Win32Check to avoid platform specific warnings in D6
function OSCheck(RetVal: Boolean): Boolean; function OSCheck(RetVal: Boolean): Boolean;
******************** NOT CONVERTED *)
{ Shortens a fully qualified Path name so that it can be drawn with a specified length limit. { Shortens a fully qualified Path name so that it can be drawn with a specified length limit.
Same as FileCtrl.MinimizeName in functionality (but not implementation). Included here to Same as FileCtrl.MinimizeName in functionality (but not implementation). Included here to
@ -863,6 +866,7 @@ function MinimizeText(const Text: string; Canvas: TCanvas; MaxWidth: Integer): s
{ MinimizeString trunactes long string, S, and appends { MinimizeString trunactes long string, S, and appends
'...' symbols, if Length of S is more than MaxLen } '...' symbols, if Length of S is more than MaxLen }
function MinimizeString(const S: string; const MaxLen: Integer): string; function MinimizeString(const S: string; const MaxLen: Integer): string;
(******************** NOT CONVERTED
{$IFNDEF CLR} {$IFNDEF CLR}
{$IFDEF MSWINDOWS} {$IFDEF MSWINDOWS}
@ -962,8 +966,10 @@ function WindowClassName(Wnd: THandle): string;
procedure SwitchToWindow(Wnd: THandle; Restore: Boolean); procedure SwitchToWindow(Wnd: THandle; Restore: Boolean);
procedure ActivateWindow(Wnd: THandle); procedure ActivateWindow(Wnd: THandle);
procedure ShowWinNoAnimate(Handle: THandle; CmdShow: Integer); procedure ShowWinNoAnimate(Handle: THandle; CmdShow: Integer);
******************** NOT CONVERTED *)
procedure KillMessage(Wnd: THandle; Msg: Cardinal); procedure KillMessage(Wnd: THandle; Msg: Cardinal);
(******************** NOT CONVERTED
{ SetWindowTop put window to top without recreating window } { SetWindowTop put window to top without recreating window }
procedure SetWindowTop(const Handle: THandle; const Top: Boolean); procedure SetWindowTop(const Handle: THandle; const Top: Boolean);
procedure CenterWindow(Wnd: THandle); procedure CenterWindow(Wnd: THandle);
@ -1192,6 +1198,10 @@ function SecondsBetween(const Now: TDateTime; const FTime: TDateTime): Integer;
implementation implementation
uses
Math,
JvConsts;
(******************** NOT CONVERTED (******************** NOT CONVERTED
uses uses
{$IFDEF HAS_UNIT_RTLCONSTS} {$IFDEF HAS_UNIT_RTLCONSTS}
@ -2083,17 +2093,6 @@ begin
Result := S2 + Result; Result := S2 + Result;
end; end;
function MinimizeString(const S: string; const MaxLen: Integer): string;
begin
if Length(S) > MaxLen then
if MaxLen < 3 then
Result := Copy(S, 1, MaxLen)
else
Result := Copy(S, 1, MaxLen - 3) + '...'
else
Result := S;
end;
function TrueInflateRect(const R: TRect; const I: Integer): TRect; function TrueInflateRect(const R: TRect; const I: Integer): TRect;
begin begin
with R do with R do
@ -8180,27 +8179,19 @@ begin
Result := RetVal; Result := RetVal;
end; end;
******************** NOT CONVERTED *)
function MinimizeFileName(const FileName: string; Canvas: TCanvas; MaxLen: Integer): string; function MinimizeFileName(const FileName: string; Canvas: TCanvas; MaxLen: Integer): string;
var var
{$IFDEF CLR}
sb: StringBuilder;
{$ENDIF CLR}
R: TRect; R: TRect;
flags: Word;
begin begin
Result := FileName; Result := FileName;
R := Rect(0, 0, MaxLen, Canvas.TextHeight('Wq')); R := Rect(0, 0, MaxLen, Canvas.TextHeight('Wq'));
{$IFDEF CLR}
sb := StringBuilder.Create(Result);
// DrawText() doesn't exist with StringBuilder parameter (2005)
if DrawTextEx(Canvas.Handle, sb, sb.Length, R,
DT_SINGLELINE or DT_MODIFYSTRING or DT_PATH_ELLIPSIS or DT_CALCRECT or
DT_NOPREFIX, nil) <= 0 then
{$ELSE}
UniqueString(Result); UniqueString(Result);
if DrawText(Canvas.Handle, PChar(Result), Length(Result), R, flags := DT_SINGLELINE or DT_MODIFYSTRING or DT_PATH_ELLIPSIS or
DT_SINGLELINE or DT_MODIFYSTRING or DT_PATH_ELLIPSIS or DT_CALCRECT or DT_CALCRECT or DT_NOPREFIX;
DT_NOPREFIX) <= 0 then if DrawText(Canvas.Handle, PChar(Result), Length(Result), R, flags) <= 0 then
{$ENDIF CLR}
Result := FileName; Result := FileName;
end; end;
@ -8218,6 +8209,18 @@ begin
end; end;
end; end;
function MinimizeString(const S: string; const MaxLen: Integer): string;
begin
if Length(S) > MaxLen then
if MaxLen < 3 then
Result := Copy(S, 1, MaxLen)
else
Result := Copy(S, 1, MaxLen - 3) + '...'
else
Result := S;
end;
(******************** NOT CONVERTED
{$IFNDEF CLR} {$IFNDEF CLR}
{$IFDEF MSWINDOWS} {$IFDEF MSWINDOWS}
@ -8950,7 +8953,7 @@ begin
SetWindowPos(Wnd, 0, R.Left, R.Top, 0, 0, SWP_NOACTIVATE or SetWindowPos(Wnd, 0, R.Left, R.Top, 0, 0, SWP_NOACTIVATE or
SWP_NOSIZE or SWP_NOZORDER); SWP_NOSIZE or SWP_NOZORDER);
end; end;
******************** NOT CONVERTED *)
{ Delete the requested message from the queue, but throw back } { Delete the requested message from the queue, but throw back }
{ any WM_QUIT msgs that PeekMessage may also return. } { any WM_QUIT msgs that PeekMessage may also return. }
@ -8960,11 +8963,14 @@ var
M: TMsg; M: TMsg;
begin begin
M.Message := 0; M.Message := 0;
if PeekMessage(M, Wnd, Msg, Msg, PM_REMOVE) and (M.Message = WM_QUIT) then { wp ---- PostQuitMessage does not exist in Lazarus
if PeekMessage(M, Wnd, Msg, Msg, PM_REMOVE) and (M.Message = LM_QUIT) then
PostQuitMessage(M.WParam); PostQuitMessage(M.WParam);
}
end; end;
(******************** NOT CONVERTED
procedure SetWindowTop(const Handle: THandle; const Top: Boolean); procedure SetWindowTop(const Handle: THandle; const Top: Boolean);
const const
TopFlag: array [Boolean] of Longword = (HWND_NOTOPMOST, HWND_TOPMOST); TopFlag: array [Boolean] of Longword = (HWND_NOTOPMOST, HWND_TOPMOST);

View File

@ -26,13 +26,20 @@ Known Issues:
// Conversion is done in incremental way: as types / classes / routines // Conversion is done in incremental way: as types / classes / routines
// are needed they are converted. // are needed they are converted.
{$mode objfpc}{$H+} {$MODE DELPHI}
//{$mode objfpc}{$H+}
unit JvJVCLUtils; unit JvJVCLUtils;
interface interface
uses uses
Classes, Graphics, JvTypes, ImgList, LCLType, Types; {$IFDEF WIN32}
Windows,
{$ENDIF}
Classes, Graphics, Controls, ImgList,
LCLType, LCLProc, LMessages, Types,
JvTypes;
(******************** NOT CONVERTED (******************** NOT CONVERTED
// Transform an icon to a bitmap // Transform an icon to a bitmap
@ -86,6 +93,7 @@ function CaptureScreen(WndHandle: Longword): TBitmap; overload;
{$ENDIF MSWINDOWS} {$ENDIF MSWINDOWS}
procedure RGBToHSV(R, G, B: Integer; var H, S, V: Integer); procedure RGBToHSV(R, G, B: Integer; var H, S, V: Integer);
******************** NOT CONVERTED *)
{ from JvVCLUtils } { from JvVCLUtils }
@ -93,6 +101,7 @@ procedure CopyParentImage(Control: TControl; Dest: TCanvas);
{ Windows resources (bitmaps and icons) VCL-oriented routines } { Windows resources (bitmaps and icons) VCL-oriented routines }
procedure DrawBitmapTransparent(Dest: TCanvas; DstX, DstY: Integer; procedure DrawBitmapTransparent(Dest: TCanvas; DstX, DstY: Integer;
Bitmap: TBitmap; TransparentColor: TColor); Bitmap: TBitmap; TransparentColor: TColor);
(******************** NOT CONVERTED
procedure DrawBitmapRectTransparent(Dest: TCanvas; DstX, DstY: Integer; procedure DrawBitmapRectTransparent(Dest: TCanvas; DstX, DstY: Integer;
SrcRect: TRect; Bitmap: TBitmap; TransparentColor: TColor); SrcRect: TRect; Bitmap: TBitmap; TransparentColor: TColor);
procedure StretchBitmapRectTransparent(Dest: TCanvas; DstX, DstY, DstW, procedure StretchBitmapRectTransparent(Dest: TCanvas; DstX, DstY, DstW,
@ -102,6 +111,8 @@ function MakeBitmap(ResID: PChar): TBitmap;
function MakeBitmapID(ResID: Word): TBitmap; function MakeBitmapID(ResID: Word): TBitmap;
function MakeModuleBitmap(Module: THandle; ResID: PChar): TBitmap; function MakeModuleBitmap(Module: THandle; ResID: PChar): TBitmap;
{$ENDIF !CLR} {$ENDIF !CLR}
******************** NOT CONVERTED *)
function AllocPatternBitmap(BkColor, FgColor: TColor): TBitmap;
function CreateTwoColorsBrushPattern(Color1, Color2: TColor): TBitmap; function CreateTwoColorsBrushPattern(Color1, Color2: TColor): TBitmap;
function CreateDisabledBitmap_NewStyle(FOriginal: TBitmap; BackColor: TColor): function CreateDisabledBitmap_NewStyle(FOriginal: TBitmap; BackColor: TColor):
TBitmap; TBitmap;
@ -109,12 +120,15 @@ function CreateDisabledBitmapEx(FOriginal: TBitmap; OutlineColor, BackColor,
HighLightColor, ShadowColor: TColor; DrawHighlight: Boolean): TBitmap; HighLightColor, ShadowColor: TColor; DrawHighlight: Boolean): TBitmap;
function CreateDisabledBitmap(FOriginal: TBitmap; OutlineColor: TColor): function CreateDisabledBitmap(FOriginal: TBitmap; OutlineColor: TColor):
TBitmap; TBitmap;
(******************** NOT CONVERTED
procedure AssignBitmapCell(Source: TGraphic; Dest: TBitmap; Cols, Rows, procedure AssignBitmapCell(Source: TGraphic; Dest: TBitmap; Cols, Rows,
Index: Integer); Index: Integer);
function ChangeBitmapColor(Bitmap: TBitmap; Color, NewColor: TColor): TBitmap; function ChangeBitmapColor(Bitmap: TBitmap; Color, NewColor: TColor): TBitmap;
******************** NOT CONVERTED *)
procedure ImageListDrawDisabled(Images: TCustomImageList; Canvas: TCanvas; procedure ImageListDrawDisabled(Images: TCustomImageList; Canvas: TCanvas;
X, Y, Index: Integer; HighLightColor, GrayColor: TColor; X, Y, Index: Integer; HighLightColor, GrayColor: TColor;
DrawHighlight: Boolean); DrawHighlight: Boolean);
(******************** NOT CONVERTED
{$IFNDEF CLR} {$IFNDEF CLR}
function MakeIcon(ResID: PChar): TIcon; function MakeIcon(ResID: PChar): TIcon;
@ -166,7 +180,11 @@ function GetControlPanelApplet(const AFileName: string; Strings: TStrings;
{$ENDIF !CLR} {$ENDIF !CLR}
function PointInPolyRgn(const P: TPoint; const Points: array of TPoint): Boolean; function PointInPolyRgn(const P: TPoint; const Points: array of TPoint): Boolean;
******************** NOT CONVERTED *)
function PaletteColor(Color: TColor): Longint; function PaletteColor(Color: TColor): Longint;
(******************** NOT CONVERTED
procedure PaintInverseRect(const RectOrg, RectEnd: TPoint); procedure PaintInverseRect(const RectOrg, RectEnd: TPoint);
procedure DrawInvertFrame(ScreenRect: TRect; Width: Integer); procedure DrawInvertFrame(ScreenRect: TRect; Width: Integer);
@ -212,9 +230,12 @@ function LoadAniCursor(Instance: THandle; ResID: PChar): HCURSOR;
{ Windows API level routines } { Windows API level routines }
******************** NOT CONVERTED *)
procedure StretchBltTransparent(DstDC: HDC; DstX, DstY, DstW, DstH: Integer; procedure StretchBltTransparent(DstDC: HDC; DstX, DstY, DstW, DstH: Integer;
SrcDC: HDC; SrcX, SrcY, SrcW, Srch: Integer; SrcDC: HDC; SrcX, SrcY, SrcW, Srch: Integer;
Palette: HPALETTE; TransparentColor: TColorRef); Palette: HPALETTE; TransparentColor: TColorRef);
(******************** NOT CONVERTED
procedure DrawTransparentBitmap(DC: HDC; Bitmap: HBITMAP; procedure DrawTransparentBitmap(DC: HDC; Bitmap: HBITMAP;
DstX, DstY: Integer; TransparentColor: TColorRef); DstX, DstY: Integer; TransparentColor: TColorRef);
function PaletteEntries(Palette: HPALETTE): Integer; function PaletteEntries(Palette: HPALETTE): Integer;
@ -279,8 +300,10 @@ function FindFormByClass(FormClass: TFormClass): TForm;
function FindFormByClassName(const FormClassName: string): TForm; function FindFormByClassName(const FormClassName: string): TForm;
{ AppMinimized returns True, if Application is minimized } { AppMinimized returns True, if Application is minimized }
function AppMinimized: Boolean; function AppMinimized: Boolean;
******************** NOT CONVERTED *)
function IsForegroundTask: Boolean; function IsForegroundTask: Boolean;
(******************** NOT CONVERTED
{ MessageBox is Application.MessageBox with string (not PChar) parameters. { MessageBox is Application.MessageBox with string (not PChar) parameters.
if Caption parameter = '', it replaced with Application.Title } if Caption parameter = '', it replaced with Application.Title }
function MessageBox(const Msg, Caption: string; const Flags: Integer): Integer; function MessageBox(const Msg, Caption: string; const Flags: Integer): Integer;
@ -832,7 +855,11 @@ function ReplaceImageListReference(This: TComponent; NewReference: TCustomImageL
implementation implementation
uses uses
sysutils, LCLIntf, math; sysutils, LCLIntf,
{$IFDEF MSWINDOWS}
CommCtrl,
{$ENDIF}
math, JvConsts, JvJCLUtils;
(******************** (********************
SysConst, SysConst,
Consts, Consts,
@ -1500,14 +1527,12 @@ begin
else else
Result := pcItem.SubItems[piIndex - 1]; Result := pcItem.SubItems[piIndex - 1];
end; end;
******************** NOT CONVERTED *)
{from JvVCLUtils } {from JvVCLUtils }
{ Bitmaps } { Bitmaps }
// see above for VisualCLX version of CopyParentImage // see above for VisualCLX version of CopyParentImage
type type
TJvParentControl = class(TWinControl); TJvParentControl = class(TWinControl);
@ -1531,7 +1556,7 @@ begin
// calls it as well. Best example is a TJvSpeeButton in a TJvPanel, // calls it as well. Best example is a TJvSpeeButton in a TJvPanel,
// both with Transparent set to True (discovered while working on // both with Transparent set to True (discovered while working on
// Mantis 3624) // Mantis 3624)
GetViewPortOrgEx(DC, ViewPortOrg); GetViewPortOrgEx(DC, @ViewPortOrg);
with Control do with Control do
begin begin
@ -1555,7 +1580,7 @@ begin
{$ELSE} {$ELSE}
with TJvParentControl(Control.Parent) do with TJvParentControl(Control.Parent) do
begin begin
Perform(WM_ERASEBKGND, DC, 0); Perform(LM_ERASEBKGND, DC, 0);
PaintWindow(DC); PaintWindow(DC);
end; end;
{$ENDIF CLR} {$ENDIF CLR}
@ -1583,7 +1608,7 @@ begin
try try
SetViewPortOrgEx(DC, Left + ViewPortOrg.X, Top + ViewPortOrg.Y, nil); SetViewPortOrgEx(DC, Left + ViewPortOrg.X, Top + ViewPortOrg.Y, nil);
IntersectClipRect(DC, 0, 0, Width, Height); IntersectClipRect(DC, 0, 0, Width, Height);
Perform(WM_PAINT, DC, 0); Perform(LM_PAINT, DC, 0);
finally finally
RestoreDC(DC, SaveIndex); RestoreDC(DC, SaveIndex);
ControlState := ControlState - [csPaintCopy]; ControlState := ControlState - [csPaintCopy];
@ -1597,6 +1622,7 @@ begin
ControlState := ControlState - [csPaintCopy]; ControlState := ControlState - [csPaintCopy];
end; end;
end; end;
(******************** NOT CONVERTED
@ -1672,11 +1698,11 @@ begin
Dest.Transparent := Source.Transparent; Dest.Transparent := Source.Transparent;
end; end;
end; end;
******************** NOT CONVERTED *)
{ Transparent bitmap } { Transparent bitmap }
procedure StretchBltTransparent(DstDC: HDC; DstX, DstY, DstW, DstH: Integer; procedure StretchBltTransparent(DstDC: HDC; DstX, DstY, DstW, DstH: Integer;
SrcDC: HDC; SrcX, SrcY, SrcW, Srch: Integer; Palette: HPALETTE; SrcDC: HDC; SrcX, SrcY, SrcW, Srch: Integer; Palette: HPALETTE;
TransparentColor: TColorRef); TransparentColor: TColorRef);
@ -1763,7 +1789,7 @@ begin
DeleteDC(SaveDC); DeleteDC(SaveDC);
end; end;
(******************** NOT CONVERTED
procedure DrawTransparentBitmapRect(DC: HDC; Bitmap: HBITMAP; DstX, DstY, procedure DrawTransparentBitmapRect(DC: HDC; Bitmap: HBITMAP; DstX, DstY,
DstW, DstH: Integer; SrcRect: TRect; TransparentColor: TColorRef); DstW, DstH: Integer; SrcRect: TRect; TransparentColor: TColorRef);
@ -1794,6 +1820,7 @@ begin
DrawTransparentBitmapRect(DC, Bitmap, DstX, DstY, BM.bmWidth, BM.bmHeight, DrawTransparentBitmapRect(DC, Bitmap, DstX, DstY, BM.bmWidth, BM.bmHeight,
Rect(0, 0, BM.bmWidth, BM.bmHeight), TransparentColor); Rect(0, 0, BM.bmWidth, BM.bmHeight), TransparentColor);
end; end;
******************** NOT CONVERTED*)
procedure StretchBitmapTransparent(Dest: TCanvas; Bitmap: TBitmap; procedure StretchBitmapTransparent(Dest: TCanvas; Bitmap: TBitmap;
TransparentColor: TColor; DstX, DstY, DstW, DstH, SrcX, SrcY, TransparentColor: TColor; DstX, DstY, DstW, DstH, SrcX, SrcY,
@ -1866,6 +1893,7 @@ begin
Bitmap.Width, Bitmap.Height, 0, 0, Bitmap.Width, Bitmap.Height); Bitmap.Width, Bitmap.Height, 0, 0, Bitmap.Width, Bitmap.Height);
end; end;
{ CreateDisabledBitmap. Creating TBitmap object with disable button glyph { CreateDisabledBitmap. Creating TBitmap object with disable button glyph
image. You must destroy it outside by calling TBitmap.Free method. } image. You must destroy it outside by calling TBitmap.Free method. }
@ -1979,6 +2007,8 @@ begin
clBtnFace, clBtnHighlight, clBtnShadow, True); clBtnFace, clBtnHighlight, clBtnShadow, True);
end; end;
(******************** NOT CONVERTED
{ ChangeBitmapColor. This function create new TBitmap object. { ChangeBitmapColor. This function create new TBitmap object.
You must destroy it outside by calling TBitmap.Free method. } You must destroy it outside by calling TBitmap.Free method. }
@ -2006,6 +2036,8 @@ begin
end; end;
end; end;
******************** NOT CONVERTED *)
procedure ImageListDrawDisabled(Images: TCustomImageList; Canvas: TCanvas; procedure ImageListDrawDisabled(Images: TCustomImageList; Canvas: TCanvas;
X, Y, Index: Integer; HighLightColor, GrayColor: TColor; X, Y, Index: Integer; HighLightColor, GrayColor: TColor;
DrawHighlight: Boolean); DrawHighlight: Boolean);
@ -2022,7 +2054,11 @@ begin
begin begin
Brush.Color := clWhite; Brush.Color := clWhite;
FillRect(Rect(0, 0, Images.Width, Images.Height)); FillRect(Rect(0, 0, Images.Width, Images.Height));
{$IFDEF MSWINDOWS}
ImageList_Draw(Images.Handle, Index, Handle, 0, 0, ILD_MASK); ImageList_Draw(Images.Handle, Index, Handle, 0, 0, ILD_MASK);
{$ELSE}
ImageList_Draw ????
{$ENDIF}
end; end;
Bmp.Monochrome := True; Bmp.Monochrome := True;
if DrawHighlight then if DrawHighlight then
@ -2044,6 +2080,7 @@ begin
end; end;
end; end;
{ Brush Pattern } { Brush Pattern }
function CreateTwoColorsBrushPattern(Color1, Color2: TColor): TBitmap; function CreateTwoColorsBrushPattern(Color1, Color2: TColor): TBitmap;
@ -2065,6 +2102,19 @@ begin
end; end;
end; end;
{ A function existing in Delphi's graphics, but missing in LCL.
According to Delphi help:
"AllocPatternBitmap returns a reference to an 8 by 8 pixel TBitmap that
is filled with a pattern. Pixels alternate between BkColor and FgColor colors
horizontally and vertically in a quilt pattern." - this is exactly what
CreateTwoColorsBrushPattern does... }
function AllocPatternBitmap(BkColor, FgColor: TColor): TBitmap;
begin
Result := CreateTwoColorsBrushPattern(BkColor, FgColor);
end;
(******************** NOT CONVERTED
{ Icons } { Icons }
{$IFNDEF CLR} {$IFNDEF CLR}
@ -2198,14 +2248,14 @@ begin
DeleteObject(Rgn); DeleteObject(Rgn);
end; end;
end; end;
******************** NOT CONVERTED *)
function PaletteColor(Color: TColor): Longint; function PaletteColor(Color: TColor): Longint;
begin begin
Result := ColorToRGB(Color) or PaletteMask; Result := ColorToRGB(Color) or PaletteMask;
end; end;
(******************** NOT CONVERTED
function CreateRotatedFont(Font: TFont; Angle: Integer): HFONT; function CreateRotatedFont(Font: TFont; Angle: Integer): HFONT;
var var
LogFont: TLogFont; LogFont: TLogFont;
@ -3000,75 +3050,50 @@ function AppMinimized: Boolean;
begin begin
Result := IsIconic(GetAppHandle); Result := IsIconic(GetAppHandle);
end; end;
******************** NOT CONVERTED *)
{$IFDEF MSWINDOWS} {$IFDEF MSWINDOWS}
{ Check if this is the active Windows task } { Check if this is the active Windows task }
{ Copied from implementation of FORMS.PAS }
type type
{$IFNDEF CLR}
PCheckTaskInfo = ^TCheckTaskInfo; PCheckTaskInfo = ^TCheckTaskInfo;
{$ENDIF !CLR}
TCheckTaskInfo = record TCheckTaskInfo = record
FocusWnd: Windows.HWND; FocusWnd: HWND;
Found: Boolean; Found: Boolean;
end; end;
{$IFDEF CLR}
PCheckTaskInfo = TCheckTaskInfo;
var function CheckTaskWindow(Window: HWND; Data: PtrInt): LongBool; stdcall;
CheckTaskHashLock: TObject = nil;
CheckTaskInfo: PCheckTaskInfo;
{$ENDIF CLR}
function CheckTaskWindow(Window: HWND; Data: Longint): LongBool; {$IFNDEF CLR}stdcall;{$ENDIF}
begin begin
Result := True; Result := True;
{$IFDEF CLR} if PCheckTaskInfo(Data)^.FocusWnd = Window then
if CheckTaskInfo.FocusWnd = Window then
begin begin
CheckTaskInfo.Found := True; PCheckTaskInfo(Data)^.Found := True;
{$ELSE}
if PCheckTaskInfo(Data).FocusWnd = Window then
begin
PCheckTaskInfo(Data).Found := True;
{$ENDIF CLR}
Result := False; Result := False;
end; end;
end; end;
{$ENDIF}
function IsForegroundTask: Boolean; function IsForegroundTask: Boolean;
{$IFDEF MSWINDOWS}
var var
Info: TCheckTaskInfo; Info: TCheckTaskInfo;
{$ENDIF}
begin begin
Info.FocusWnd := Windows.GetActiveWindow; {$IFDEF MSWINDOWS}
Info.FocusWnd := GetActiveWindow;
Info.Found := False; Info.Found := False;
EnumThreadWindows(GetCurrentThreadID, @CheckTaskWindow, PtrInt(@Info));
{$IFDEF CLR}
if CheckTaskHashLock = nil then
CheckTaskHashLock := TObject.Create;
Monitor.Enter(CheckTaskHashLock);
try
CheckTaskInfo := Info;
EnumThreadWindows(GetCurrentThreadId, CheckTaskWindow, 0);
Info := CheckTaskInfo;
finally
Monitor.Exit(CheckTaskHashLock);
end;
{$ELSE}
EnumThreadWindows(GetCurrentThreadId, @CheckTaskWindow, Longint(@Info));
{$ENDIF CLR}
Result := Info.Found; Result := Info.Found;
end; {$ELSE}
{$IFDEF UNIX}
{$ENDIF MSWINDOWS}
{$IFDEF UNIX}
function IsForegroundTask: Boolean;
begin
Result := Application.Active; Result := Application.Active;
{$ELSE}
Result := true;
{$ENDIF}
{$ENDIF}
end; end;
{$ENDIF UNIX}
(******************** NOT CONVERTED
function MessageBox(const Msg, Caption: string; const Flags: Integer): Integer; function MessageBox(const Msg, Caption: string; const Flags: Integer): Integer;
{$IFDEF CLR} {$IFDEF CLR}

View File

@ -31,7 +31,8 @@ Known Issues:
// Conversion is done in incremental way: as types / classes / routines // Conversion is done in incremental way: as types / classes / routines
// are needed they are converted. // are needed they are converted.
{$mode objfpc}{$H+} //{$mode objfpc}{$H+}
{$MODE DELPHI}
unit JvTypes; unit JvTypes;
@ -98,6 +99,7 @@ type
{$IFDEF CLR} {$IFDEF CLR}
IUnknown = IInterface; IUnknown = IInterface;
{$ENDIF CLR} {$ENDIF CLR}
********************)
// Base class for persistent properties that can show events. // Base class for persistent properties that can show events.
// By default, Delphi and BCB don't show the events of a class // By default, Delphi and BCB don't show the events of a class
@ -107,14 +109,10 @@ type
// from having events for a sub property. // from having events for a sub property.
// The design time editor associated with TJvPersistent will display // The design time editor associated with TJvPersistent will display
// the events, thus mimicking a Sub Component. // the events, thus mimicking a Sub Component.
{$IFDEF COMPILER6_UP}
TJvPersistent = class(TComponent) TJvPersistent = class(TComponent)
public public
constructor Create(AOwner: TComponent); override; constructor Create(AOwner: TComponent); override;
end; end;
{$ELSE}
TJvPersistent = class(TPersistent);
{$ENDIF COMPILER6_UP}
// Added by dejoy (2005-04-20) // Added by dejoy (2005-04-20)
// A lot of TJVxxx control persistent properties used TPersistent, // A lot of TJVxxx control persistent properties used TPersistent,
@ -122,7 +120,7 @@ type
// and property change notify. // and property change notify.
TJvPropertyChangeEvent = procedure(Sender: TObject; const PropName: string) of object; TJvPropertyChangeEvent = procedure(Sender: TObject; const PropName: string) of object;
TJvPersistentProperty = class(TPersistent)//?? TJvPersistent TJvPersistentProperty = class(TPersistent) // ?? TJvPersistent)
private private
FUpdateCount: Integer; FUpdateCount: Integer;
FOnChanging: TNotifyEvent; FOnChanging: TNotifyEvent;
@ -145,6 +143,7 @@ type
property OnChangingProperty: TJvPropertyChangeEvent read FOnChangingProperty write FOnChangingProperty; property OnChangingProperty: TJvPropertyChangeEvent read FOnChangingProperty write FOnChangingProperty;
end; end;
(********************
TJvRegKey = (hkClassesRoot, hkCurrentUser, hkLocalMachine, hkUsers, TJvRegKey = (hkClassesRoot, hkCurrentUser, hkLocalMachine, hkUsers,
hkPerformanceData, hkCurrentConfig, hkDynData); hkPerformanceData, hkCurrentConfig, hkDynData);
TJvRegKeys = set of TJvRegKey; TJvRegKeys = set of TJvRegKey;
@ -675,8 +674,6 @@ type
implementation implementation
(***************
{$IFDEF COMPILER6_UP}
constructor TJvPersistent.Create(AOwner: TComponent); constructor TJvPersistent.Create(AOwner: TComponent);
begin begin
inherited Create(AOwner); inherited Create(AOwner);
@ -684,7 +681,6 @@ begin
SetSubComponent(True); SetSubComponent(True);
Name := 'SubComponent'; Name := 'SubComponent';
end; end;
{$ENDIF COMPILER6_UP}
{ TJvPersistentProperty } { TJvPersistentProperty }
@ -733,7 +729,6 @@ begin
else else
Changed; Changed;
end; end;
***************)
end. end.

View File

@ -1,923 +0,0 @@
{-----------------------------------------------------------------------------
The contents of this file are subject to the Mozilla Public License
Version 1.1 (the "License"); you may not use this file except in compliance
with the License. You may obtain a copy of the License at
http://www.mozilla.org/MPL/MPL-1.1.html
Software distributed under the License is distributed on an "AS IS" basis,
WITHOUT WARRANTY OF ANY KIND, either expressed or implied. See the License for
the specific language governing rights and limitations under the License.
The Original Code is: JvButton.PAS, released on 2001-02-28.
The Initial Developer of the Original Code is S�bastien Buysse [sbuysse att buypin dott com]
Portions created by S�bastien Buysse are Copyright (C) 2001 S�bastien Buysse.
All Rights Reserved.
Contributor(s): Michael Beck [mbeck att bigfoot dott com].
You may retrieve the latest version of this file at the Project JEDI's JVCL home page,
located at http://jvcl.sourceforge.net
Known Issues:
-----------------------------------------------------------------------------}
// $Id: JvButton.pas 11400 2007-06-28 21:24:06Z ahuser $
// Initial port to Lazarus by Sergio Samayoa - september 2007.
// Conversion is done in incremental way: as types / classes / routines
// are needed they are converted.
{$mode objfpc}{$H+}
unit JvButton;
interface
uses
Classes, Controls, Graphics, JvComponent, JvConsts, JvTypes, LMessages, Menus;
type
TJvButtonMouseState = (bsMouseInside, bsMouseDown);
TJvButtonMouseStates = set of TJvButtonMouseState;
TJvCustomGraphicButton = class(TJvGraphicControl)
private
FStates: TJvButtonMouseStates;
FBuffer: TBitmap;
FFlat: Boolean;
FDropDownMenu: TPopupMenu;
FDown: Boolean;
FForceSameSize: Boolean;
FAllowAllUp: Boolean;
FGroupIndex: Integer;
FHotTrack: Boolean;
FHotFont: TFont;
FHotTrackFontOptions: TJvTrackFontOptions;
FOnDropDownMenu: TContextPopupEvent;
FDropArrow: Boolean;
FOnDropDownClose: TNotifyEvent;
function GetPattern: TBitmap;
procedure SetFlat(const Value: Boolean);
procedure SetDown(Value: Boolean);
procedure CMButtonPressed(var Msg: TCMButtonPressed); message CM_JVBUTTONPRESSED;
procedure CMForceSize(var Msg: TCMForceSize); message CM_FORCESIZE;
procedure CMSysColorChange(var Msg: TLMessage); message CM_SYSCOLORCHANGE;
procedure SetForceSameSize(const Value: Boolean);
procedure SetAllowAllUp(const Value: Boolean);
procedure SetGroupIndex(const Value: Integer);
procedure SetHotFont(const Value: TFont);
procedure SetHotTrackFontOptions(const Value: TJvTrackFontOptions);
procedure SetDropArrow(const Value: Boolean);
procedure SetDropDownMenu(const Value: TPopupMenu);
protected
procedure ButtonPressed(Sender: TJvCustomGraphicButton; AGroupIndex: Integer); virtual;
procedure ForceSize(Sender: TControl; AWidth, AHeight: Integer);
function DoDropDownMenu(Button: TMouseButton; Shift: TShiftState; X, Y: Integer): Boolean; virtual;
procedure DropDownClose;
procedure UpdateExclusive;
procedure Notification(AComponent: TComponent; Operation: TOperation); override;
procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override;
procedure MouseMove(Shift: TShiftState; X, Y: Integer); override;
procedure MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override;
procedure MouseEnter(Control: TControl); override;
procedure MouseLeave(Control: TControl); override;
procedure Paint; override;
procedure PaintButton(ACanvas: TCanvas); virtual;
procedure PaintFrame(ACanvas: TCanvas); virtual;
function InsideBtn(X, Y: Integer): Boolean; virtual;
function WantKey(Key: Integer; Shift: TShiftState;
const KeyText: WideString): Boolean; override;
procedure EnabledChanged; override;
procedure FontChanged; override;
procedure RepaintBackground; virtual;
procedure TextChanged; override;
property AllowAllUp: Boolean read FAllowAllUp write SetAllowAllUp default False;
property GroupIndex: Integer read FGroupIndex write SetGroupIndex default 0;
property MouseStates: TJvButtonMouseStates read FStates write FStates default [];
property ForceSameSize: Boolean read FForceSameSize write SetForceSameSize default False;
property Pattern: TBitmap read GetPattern;
property Flat: Boolean read FFlat write SetFlat default False;
property HotTrack: Boolean read FHotTrack write FHotTrack default False;
property HotTrackFont: TFont read FHotFont write SetHotFont;
property HotTrackFontOptions: TJvTrackFontOptions read FHotTrackFontOptions write SetHotTrackFontOptions default
DefaultTrackFontOptions;
property Down: Boolean read FDown write SetDown default False;
property DropDownMenu: TPopupMenu read FDropDownMenu write SetDropDownMenu;
property DropArrow: Boolean read FDropArrow write SetDropArrow default False;
property OnDropDownMenu: TContextPopupEvent read FOnDropDownMenu write FOnDropDownMenu;
property OnDropDownClose: TNotifyEvent read FOnDropDownClose write FOnDropDownClose;
public
procedure Click; override;
procedure SetBounds(ALeft, ATop, AWidth, AHeight: Integer); override;
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
procedure DrawDropArrow(ACanvas: TCanvas; ArrowRect: TRect); virtual;
end;
(******************** NOT CONVERTED
TJvCustomButton = class(TJvExButton)
private
FDropDownMenu: TPopupMenu;
FHotTrack: Boolean;
FHotFont: TFont;
FFontSave: TFont;
FWordWrap: Boolean;
FForceSameSize: Boolean;
FHotTrackFontOptions: TJvTrackFontOptions;
FOnDropDownMenu: TContextPopupEvent;
FDropArrow: Boolean;
procedure SetHotFont(const Value: TFont);
procedure SetWordWrap(const Value: Boolean);
procedure SetForceSameSize(const Value: Boolean);
procedure CMForceSize(var Msg: TCMForceSize); message CM_FORCESIZE;
procedure SetHotTrackFontOptions(const Value: TJvTrackFontOptions);
procedure SetDropArrow(const Value: Boolean);
procedure SetDropDownMenu(const Value: TPopupMenu);
protected
function DoDropDownMenu(X, Y: Integer): Boolean; virtual;
procedure ForceSize(Sender: TControl; AWidth, AHeight: Integer);
procedure MouseEnter(Control: TControl); override;
procedure MouseLeave(Control: TControl); override;
procedure FontChanged; override;
procedure CreateParams(var Params: TCreateParams); override;
function GetRealCaption: string; dynamic;
procedure Notification(AComponent: TComponent; Operation: TOperation); override;
property WordWrap: Boolean read FWordWrap write SetWordWrap default True;
property ForceSameSize: Boolean read FForceSameSize write SetForceSameSize default False;
property DropArrow: Boolean read FDropArrow write SetDropArrow default False;
property DropDownMenu: TPopupMenu read FDropDownMenu write SetDropDownMenu;
property HotTrack: Boolean read FHotTrack write FHotTrack default False;
property HotTrackFont: TFont read FHotFont write SetHotFont;
property HotTrackFontOptions: TJvTrackFontOptions read FHotTrackFontOptions write SetHotTrackFontOptions default
DefaultTrackFontOptions;
property HintColor;
property OnParentColorChange;
property OnDropDownMenu: TContextPopupEvent read FOnDropDownMenu write FOnDropDownMenu;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
procedure Click;override;
procedure DrawDropArrow(Canvas: TCanvas; ArrowRect: TRect); virtual;
procedure SetBounds(ALeft: Integer; ATop: Integer; AWidth: Integer; AHeight: Integer); override;
end;
// TJvDropDownButton draws a DropDown button with the DropDown glyph
// (also themed). It ignores the properties Glyph and Flat
TJvDropDownButton = class(TSpeedButton)
protected
procedure Paint; override;
public
constructor Create(AOwner: TComponent); override;
end;
******************** NOT CONVERTED *)
implementation
uses
Forms, JvJVCLUtils, LCLIntf, LCLType, SysUtils;
(******************** NOT CONVERTED
const
JvBtnLineSeparator = '|';
******************** NOT CONVERTED *)
var
GlobalPattern: TBitmap = nil;
function CreateBrushPattern: TBitmap;
var
X, Y: Integer;
begin
if GlobalPattern = nil then
begin
GlobalPattern := TBitmap.Create;
try
GlobalPattern.Width := 8; { must have this size }
GlobalPattern.Height := 8;
with GlobalPattern.Canvas do
begin
Brush.Style := bsSolid;
Brush.Color := clBtnFace;
FillRect(Rect(0, 0, GlobalPattern.Width, GlobalPattern.Height));
for Y := 0 to 7 do
for X := 0 to 7 do
if (Y mod 2) = (X mod 2) then { toggles between even/odd pixels }
Pixels[X, Y] := clWhite; { on even/odd rows }
end;
except
FreeAndNil(GlobalPattern);
end;
end;
Result := GlobalPattern;
end;
//=== { TJvCustomGraphicButton } =============================================
constructor TJvCustomGraphicButton.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
ControlStyle := ControlStyle -
[csOpaque, csDoubleClicks ];
FStates := [];
SetBounds(0, 0, 40, 40);
FBuffer := TBitmap.Create;
FFlat := False;
FDropArrow := False;
FForceSameSize := False;
FHotFont := TFont.Create;
FHotTrackFontOptions := DefaultTrackFontOptions;
end;
destructor TJvCustomGraphicButton.Destroy;
begin
FBuffer.Free;
FHotFont.Free;
inherited Destroy;
end;
procedure TJvCustomGraphicButton.DrawDropArrow(ACanvas: TCanvas; ArrowRect: TRect);
var
I: Integer;
begin
if not Enabled then
ACanvas.Pen.Color := clInactiveCaption
else
ACanvas.Pen.Color := clWindowText;
for I := 0 to 3 do
begin
if ArrowRect.Left + I <= ArrowRect.Right - I then
begin
ACanvas.MoveTo(ArrowRect.Left + I, ArrowRect.Top + I);
ACanvas.LineTo(ArrowRect.Right - I, ArrowRect.Top + I);
end;
end;
end;
{ Handle speedkeys (Alt + key) }
function TJvCustomGraphicButton.WantKey(Key: Integer; Shift: TShiftState;
const KeyText: WideString): Boolean;
begin
Result := IsAccel(Key, Caption) and Enabled and (Shift * KeyboardShiftStates = [ssAlt]);
if Result then
Click
else
Result := inherited WantKey(Key, Shift, KeyText);
end;
procedure TJvCustomGraphicButton.EnabledChanged;
begin
inherited EnabledChanged;
if not Enabled then
FStates := [];
RepaintBackground;
end;
procedure TJvCustomGraphicButton.MouseEnter(Control: TControl);
begin
if csDesigning in ComponentState then
Exit;
if Enabled and not MouseOver then
begin
Include(FStates, bsMouseInside);
inherited MouseEnter(Control);
if Flat then
RepaintBackground;
if HotTrack then
Repaint;
end;
end;
procedure TJvCustomGraphicButton.MouseLeave(Control: TControl);
begin
if Enabled and MouseOver then
begin
Exclude(FStates, bsMouseInside);
inherited MouseLeave(Control);
if Flat then
RepaintBackground;
if HotTrack then
Repaint;
end;
end;
procedure TJvCustomGraphicButton.Paint;
var
ArrowRect: TRect;
begin
// FBuffer.Width := Width;
// FBuffer.Height := Height;
PaintFrame(Canvas);
PaintButton(Canvas);
if DropArrow and Assigned(DropDownMenu) then
begin
ArrowRect := Rect(Width - 16, Height div 2, Width - 9, Height div 2 + 9);
if bsMouseDown in FStates then
OffsetRect(ArrowRect, 1, 1);
DrawDropArrow(Canvas, ArrowRect);
end;
// BitBlt(Canvas.Handle, 0, 0, Width,Height, FBuffer.Canvas.Handle, 0, 0, SRCCOPY);
end;
procedure TJvCustomGraphicButton.PaintFrame(ACanvas: TCanvas);
begin
// do nothing
end;
procedure TJvCustomGraphicButton.PaintButton(ACanvas: TCanvas);
begin
if (bsMouseInside in FStates) and HotTrack then
ACanvas.Font := FHotFont
else
ACanvas.Font := Font;
end;
function TJvCustomGraphicButton.InsideBtn(X, Y: Integer): Boolean;
begin
Result := PtInRect(Rect(0, 0, Width, Height), Point(X, Y));
end;
procedure TJvCustomGraphicButton.MouseDown(Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
Tmp: TPoint;
begin
if not Enabled then
Exit;
inherited MouseDown(Button, Shift, X, Y);
if InsideBtn(X, Y) then
begin
FStates := [bsMouseDown, bsMouseInside];
RepaintBackground;
end;
SetCaptureControl(Self);
Tmp := ClientToScreen(Point(0, Height));
DoDropDownMenu(Button, Shift, Tmp.X, Tmp.Y);
end;
procedure TJvCustomGraphicButton.MouseMove(Shift: TShiftState;
X, Y: Integer);
begin
inherited MouseMove(Shift, X, Y);
if MouseCapture then
begin
if not InsideBtn(X, Y) then
begin
if bsMouseInside in FStates then
begin
Exclude(FStates, bsMouseInside);
RepaintBackground;
end;
end
else
begin
if not (bsMouseInside in FStates) then
begin
Include(FStates, bsMouseInside);
RepaintBackground;
end;
end;
end;
end;
procedure TJvCustomGraphicButton.MouseUp(Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if GetCaptureControl = Self then
ReleaseCapture;
if not Enabled then
Exit;
inherited MouseUp(Button, Shift, X, Y);
Exclude(FStates, bsMouseDown);
// 26.09.2007 - SESS:
// Update bsMouseInside flag also.
if not InsideBtn(X, Y) and (bsMouseInside in FStates) then
Exclude(FStates, bsMouseInside);
RepaintBackground;
end;
function TJvCustomGraphicButton.DoDropDownMenu(Button: TMouseButton; Shift: TShiftState; X, Y: Integer): Boolean;
var
Msg: TMsg;
Handled: Boolean;
begin
Result := (Button = mbLeft) and (DropDownMenu <> nil);
if Result then
begin
DropDownMenu.PopupComponent := Self;
Handled := False;
if Assigned(FOnDropDownMenu) then
FOnDropDownMenu(Self, Point(X, Y), Handled);
if not Handled then
DropDownMenu.Popup(X, Y)
else
Exit;
{ wait 'til menu is done }
while PeekMessage(Msg, 0, LM_MOUSEFIRST, LM_MOUSELAST, PM_REMOVE) do
{nothing};
{ release button }
MouseUp(Button, Shift, X, Y);
DropDownClose;
end;
end;
procedure TJvCustomGraphicButton.SetFlat(const Value: Boolean);
begin
if FFlat <> Value then
begin
FFlat := Value;
if FFlat then
ControlStyle := ControlStyle - [csOpaque]
else
ControlStyle := ControlStyle + [csOpaque];
RepaintBackground;
end;
end;
procedure TJvCustomGraphicButton.Notification(AComponent: TComponent;
Operation: TOperation);
begin
inherited Notification(AComponent, Operation);
if (Operation = opRemove) and (AComponent = DropDownMenu) then
DropDownMenu := nil;
end;
procedure TJvCustomGraphicButton.SetDown(Value: Boolean);
begin
if GroupIndex = 0 then
Value := False;
if FDown <> Value then
begin
if FDown and not AllowAllUp then
Exit;
FDown := Value;
UpdateExclusive;
Invalidate;
end;
end;
procedure TJvCustomGraphicButton.SetForceSameSize(const Value: Boolean);
begin
if FForceSameSize <> Value then
begin
FForceSameSize := Value;
if FForceSameSize then
SetBounds(Left, Top, Width, Height);
end;
end;
procedure TJvCustomGraphicButton.SetBounds(ALeft, ATop, AWidth, AHeight: Integer);
var
Form: TCustomForm;
Msg: TCMForceSize;
begin
inherited SetBounds(ALeft, ATop, AWidth, AHeight);
if ForceSameSize then
begin
Form := GetParentForm(Self);
if Assigned(Form) then
begin
Msg.Msg := CM_FORCESIZE;
Msg.Sender := Self;
Msg.NewSize.X := AWidth;
Msg.NewSize.Y := AHeight;
Form.Broadcast(Msg);
end;
end;
end;
procedure TJvCustomGraphicButton.CMForceSize(var Msg: TCMForceSize);
begin
with Msg do
ForceSize(Sender, NewSize.x, NewSize.y);
end;
function TJvCustomGraphicButton.GetPattern: TBitmap;
begin
Result := CreateBrushPattern;
end;
procedure TJvCustomGraphicButton.SetAllowAllUp(const Value: Boolean);
begin
if FAllowAllUp <> Value then
begin
FAllowAllUp := Value;
UpdateExclusive;
end;
end;
procedure TJvCustomGraphicButton.SetGroupIndex(const Value: Integer);
begin
if FGroupIndex <> Value then
begin
FGroupIndex := Value;
UpdateExclusive;
end;
end;
procedure TJvCustomGraphicButton.UpdateExclusive;
var
Msg: TCMButtonPressed;
begin
if (GroupIndex <> 0) and (Parent <> nil) then
begin
Msg.Msg := CM_JVBUTTONPRESSED;
Msg.Index := GroupIndex;
Msg.Control := Self;
Msg.Result := 0;
Parent.Broadcast(Msg);
end;
end;
procedure TJvCustomGraphicButton.CMButtonPressed(var Msg: TCMButtonPressed);
begin
ButtonPressed(TJvCustomGraphicButton(Msg.Control), Msg.Index);
end;
procedure TJvCustomGraphicButton.SetHotFont(const Value: TFont);
begin
FHotFont.Assign(Value);
end;
procedure TJvCustomGraphicButton.SetHotTrackFontOptions(const Value: TJvTrackFontOptions);
begin
if FHotTrackFontOptions <> Value then
begin
FHotTrackFontOptions := Value;
UpdateTrackFont(HotTrackFont, Font, HotTrackFontOptions);
end;
end;
procedure TJvCustomGraphicButton.SetDropArrow(const Value: Boolean);
begin
if FDropArrow <> Value then
begin
FDropArrow := Value;
Invalidate;
end;
end;
procedure TJvCustomGraphicButton.SetDropDownMenu(const Value: TPopupMenu);
begin
if FDropDownMenu <> Value then
begin
FDropDownMenu := Value;
if DropArrow then
Invalidate;
end;
end;
procedure TJvCustomGraphicButton.CMSysColorChange(var Msg: TLMessage);
begin
inherited;
RepaintBackground;
end;
procedure TJvCustomGraphicButton.FontChanged;
begin
inherited FontChanged;
UpdateTrackFont(HotTrackFont, Font, HotTrackFontOptions);
end;
procedure TJvCustomGraphicButton.TextChanged;
begin
inherited TextChanged;
RepaintBackground;
end;
procedure TJvCustomGraphicButton.Click;
begin
if GroupIndex <> 0 then
begin
if AllowAllUp then
Down := not Down
else
Down := True;
end;
try
inherited Click;
except
// Mantis 3097: In case there is an exception, we ensure here that the
// button is not left "down", and we reraise the exception as we can't
// handle it and don't want to ignore it.
Exclude(FStates, bsMouseDown);
RepaintBackground;
raise;
end;
end;
procedure TJvCustomGraphicButton.ButtonPressed(Sender: TJvCustomGraphicButton;
AGroupIndex: Integer);
begin
if AGroupIndex = GroupIndex then
if Sender <> Self then
begin
if Sender.Down and Down then
begin
FDown := False;
Exclude(FStates, bsMouseDown);
RepaintBackground;
end;
FAllowAllUp := Sender.AllowAllUp;
end;
end;
procedure TJvCustomGraphicButton.ForceSize(Sender: TControl; AWidth, AHeight: Integer);
begin
if Sender <> Self then
inherited SetBounds(Left, Top, AWidth, AHeight);
end;
(******************** NOT CONVERTED
//=== { TJvCustomButton } ====================================================
constructor TJvCustomButton.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FDropArrow := False;
FHotTrack := False;
FHotFont := TFont.Create;
FFontSave := TFont.Create;
// ControlStyle := ControlStyle + [csAcceptsControls];
FWordWrap := True;
FForceSameSize := False;
FHotTrackFontOptions := DefaultTrackFontOptions;
end;
destructor TJvCustomButton.Destroy;
begin
FHotFont.Free;
FFontSave.Free;
inherited Destroy;
end;
procedure TJvCustomButton.Click;
var
Tmp: TPoint;
begin
// Call ClientToScreen before the inherited Click as the OnClick handler might
// reset the parent, which is needed by ClientToScreen.
Tmp := ClientToScreen(Point(0, Height));
inherited Click;
DoDropDownMenu(Tmp.X, Tmp.Y);
end;
procedure TJvCustomButton.DrawDropArrow(Canvas: TCanvas; ArrowRect: TRect);
var
I: Integer;
begin
if not Enabled then
Canvas.Pen.Color := clInactiveCaption
else
Canvas.Pen.Color := clWindowText;
for I := 0 to (ArrowRect.Bottom - ArrowRect.Top) do
begin
if ArrowRect.Left + I <= ArrowRect.Right - I then
begin
Canvas.MoveTo(ArrowRect.Left + I, ArrowRect.Top + I);
Canvas.LineTo(ArrowRect.Right - I, ArrowRect.Top + I);
end;
end;
end;
procedure TJvCustomButton.CreateParams(var Params: TCreateParams);
begin
inherited CreateParams(Params);
Params.Style := Params.Style or BS_MULTILINE;
end;
procedure TJvCustomButton.SetHotTrackFontOptions(const Value: TJvTrackFontOptions);
begin
if FHotTrackFontOptions <> Value then
begin
FHotTrackFontOptions := Value;
UpdateTrackFont(HotTrackFont, Font, HotTrackFontOptions);
end;
end;
procedure TJvCustomButton.SetDropArrow(const Value: Boolean);
begin
if FDropArrow <> Value then
begin
FDropArrow := Value;
Invalidate;
end;
end;
procedure TJvCustomButton.SetHotFont(const Value: TFont);
begin
FHotFont.Assign(Value);
end;
procedure TJvCustomButton.SetDropDownMenu(const Value: TPopupMenu);
begin
if FDropDownMenu <> Value then
begin
FDropDownMenu := Value;
if DropArrow then
Invalidate;
end;
end;
procedure TJvCustomButton.MouseEnter(Control: TControl);
begin
if not MouseOver then
begin
if FHotTrack then
begin
FFontSave.Assign(Font);
Font.Assign(FHotFont);
end;
inherited MouseEnter(Control);
end;
end;
procedure TJvCustomButton.MouseLeave(Control: TControl);
begin
if MouseOver then
begin
if FHotTrack then
Font.Assign(FFontSave);
inherited MouseLeave(Control);
end;
end;
procedure TJvCustomButton.FontChanged;
begin
inherited FontChanged;
UpdateTrackFont(HotTrackFont, Font, HotTrackFontOptions);
end;
function TJvCustomButton.GetRealCaption: string;
begin
if WordWrap then
Result := StringReplace(Caption, JvBtnLineSeparator, Lf, [rfReplaceAll])
else
Result := Caption;
end;
procedure TJvCustomButton.SetWordWrap(const Value: Boolean);
begin
if FWordWrap <> Value then
begin
FWordWrap := Value;
Invalidate;
end;
end;
procedure TJvCustomButton.SetForceSameSize(const Value: Boolean);
begin
if FForceSameSize <> Value then
begin
FForceSameSize := Value;
if FForceSameSize then
SetBounds(Left, Top, Width, Height);
end;
end;
procedure TJvCustomButton.SetBounds(ALeft, ATop, AWidth, AHeight: Integer);
var
Form: TCustomForm;
Msg: TCMForceSize;
begin
inherited SetBounds(ALeft, ATop, AWidth, AHeight);
if ForceSameSize then
begin
Form := GetParentForm(Self);
if Assigned(Form) then
begin
Msg.Msg := CM_FORCESIZE;
Msg.Sender := Self;
Msg.NewSize.X := AWidth;
Msg.NewSize.Y := AHeight;
Form.Broadcast(Msg);
end;
end;
end;
procedure TJvCustomButton.CMForceSize(var Msg: TCMForceSize);
begin
with Msg do
ForceSize(Sender, NewSize.x, NewSize.y);
end;
procedure TJvCustomButton.Notification(AComponent: TComponent;
Operation: TOperation);
begin
inherited Notification(AComponent, Operation);
if (Operation = opRemove) and (AComponent = FDropDownMenu) then
DropDownMenu := nil;
end;
******************** NOT CONVERTED *)
procedure TJvCustomGraphicButton.RepaintBackground;
var
R: TRect;
begin
if (Parent <> nil) and Parent.HandleAllocated then
begin
R := BoundsRect;
InvalidateRect(Parent.Handle, @R, True);
end;
Repaint;
end;
(******************** NOT CONVERTED
procedure TJvCustomButton.ForceSize(Sender: TControl; AWidth, AHeight: Integer);
begin
if Sender <> Self then
inherited SetBounds(Left, Top, AWidth, AHeight);
end;
function TJvCustomButton.DoDropDownMenu(X, Y: Integer): Boolean;
var
Msg: TMsg;
Handled: Boolean;
begin
Result := (DropDownMenu <> nil);
if Result then
begin
DropDownMenu.PopupComponent := Self;
case DropDownMenu.Alignment of
paRight:
Inc(X, Width);
paCenter:
Inc(X, Width div 2);
end;
Handled := False;
if Assigned(FOnDropDownMenu) then
FOnDropDownMenu(Self, Point(X, Y), Handled);
if not Handled then
DropDownMenu.Popup(X, Y)
else
Exit;
{ wait 'til menu is done }
while PeekMessage(Msg, 0, WM_MOUSEFIRST, WM_MOUSELAST, PM_REMOVE) do
{nothing};
end;
end;
//=== { TJvDropDownButton } ==================================================
constructor TJvDropDownButton.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
Width := 16;
Height := 16;
end;
procedure TJvDropDownButton.Paint;
var
PaintRect: TRect;
DrawFlags: Integer;
DC: HDC;
Bmp: TBitmap;
begin
// adjust FState and FDragging
DC := Canvas.Handle;
Bmp := TBitmap.Create;
try
Bmp.Width := 1;
Bmp.Height := 1;
Canvas.Handle := Bmp.Canvas.Handle;
try
inherited Paint;
finally
Canvas.Handle := DC;
end;
finally
Bmp.Free;
end;
PaintRect := Rect(0, 0, Width, Height);
DrawFlags := DFCS_SCROLLCOMBOBOX or DFCS_ADJUSTRECT;
if FState in [bsDown, bsExclusive] then
DrawFlags := DrawFlags or DFCS_PUSHED;
{$IFDEF JVCLThemesEnabled}
if ThemeServices.ThemesEnabled then
DrawThemedFrameControl(Self, Canvas.Handle, PaintRect, DFC_SCROLL, DrawFlags)
else
{$ENDIF JVCLThemesEnabled}
begin
DrawFrameControl(Canvas.Handle, PaintRect, DFC_SCROLL, DrawFlags);
end;
end;
******************** NOT CONVERTED *)
procedure TJvCustomGraphicButton.DropDownClose;
begin
if Assigned(FOnDropDownClose) then
FOnDropDownClose(Self);
end;
finalization
FreeAndNil(GlobalPattern);
end.