summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAndrew Haines <andrewd207@aol.com>2010-11-05 17:28:50 -0400
committerAndrew Haines <andrewd207@aol.com>2010-11-05 17:28:50 -0400
commite320dfae6add39c66ea554dbb161a844ee06db4d (patch)
tree78451d8f643babcfb50376c1b6a53da6ef5ff616 /src
parent917a2daf4ff769ad27631e6c71a7b919c47e4ecb (diff)
parent735aec8207036adb17f2174ffcb9056bee712ed3 (diff)
downloadfpGUI-e320dfae6add39c66ea554dbb161a844ee06db4d.tar.xz
Merge branch 'master' of ssh://fpgui.git.sourceforge.net/gitroot/fpgui/fpgui
Diffstat (limited to 'src')
-rw-r--r--src/corelib/fpg_base.pas370
-rw-r--r--src/corelib/fpg_constants.pas17
-rw-r--r--src/corelib/fpg_imgfmt_bmp.pas3
-rw-r--r--src/corelib/fpg_imgutils.pas2
-rw-r--r--src/corelib/fpg_main.pas419
-rw-r--r--src/corelib/fpg_msgqueue.inc13
-rw-r--r--src/corelib/fpg_stdimages.pas31
-rw-r--r--src/corelib/fpg_stringutils.pas1181
-rw-r--r--src/corelib/fpg_utils.pas50
-rw-r--r--src/corelib/fpg_widget.pas227
-rw-r--r--src/corelib/gdi/fpg_gdi.pas638
-rw-r--r--src/corelib/gdi/fpg_interface.pas2
-rw-r--r--src/corelib/gdi/fpg_oledragdrop.pas1061
-rw-r--r--src/corelib/gdi/fpg_utils_impl.inc21
-rw-r--r--src/corelib/gdi/fpgui_toolkit.lpk9
-rw-r--r--src/corelib/gdi/fpgui_toolkit.pas4
-rw-r--r--src/corelib/keys.inc2
-rw-r--r--src/corelib/lang_af.inc12
-rw-r--r--src/corelib/lang_de.inc6
-rw-r--r--src/corelib/lang_en.inc6
-rw-r--r--src/corelib/lang_es.inc6
-rw-r--r--src/corelib/lang_fr.inc10
-rw-r--r--src/corelib/lang_it.inc6
-rw-r--r--src/corelib/lang_pt.inc6
-rw-r--r--src/corelib/lang_ru.inc6
-rw-r--r--src/corelib/predefinedcolors.inc4
-rw-r--r--src/corelib/stdimages.inc3961
-rw-r--r--src/corelib/x11/fpg_interface.pas2
-rw-r--r--src/corelib/x11/fpg_utils_impl.inc10
-rw-r--r--src/corelib/x11/fpg_x11.pas1158
-rw-r--r--src/fpmake.pp (renamed from src/fpmake.pas)101
-rw-r--r--src/gui/colordialog.inc107
-rw-r--r--src/gui/fpg_animation.pas1
-rw-r--r--src/gui/fpg_basegrid.pas55
-rw-r--r--src/gui/fpg_button.pas74
-rw-r--r--src/gui/fpg_checkbox.pas2
-rw-r--r--src/gui/fpg_colorwheel.pas30
-rw-r--r--src/gui/fpg_combobox.pas7
-rw-r--r--src/gui/fpg_dialogs.pas254
-rw-r--r--src/gui/fpg_edit.pas32
-rw-r--r--src/gui/fpg_editbtn.pas47
-rw-r--r--src/gui/fpg_editcombo.pas133
-rw-r--r--src/gui/fpg_form.pas30
-rw-r--r--src/gui/fpg_grid.pas4
-rw-r--r--src/gui/fpg_hyperlink.pas1
-rw-r--r--src/gui/fpg_iniutils.pas11
-rw-r--r--src/gui/fpg_label.pas7
-rw-r--r--src/gui/fpg_listbox.pas68
-rw-r--r--src/gui/fpg_listview.pas2
-rw-r--r--src/gui/fpg_memo.pas531
-rw-r--r--src/gui/fpg_menu.pas115
-rw-r--r--src/gui/fpg_panel.pas34
-rw-r--r--src/gui/fpg_popupcalendar.pas2
-rw-r--r--src/gui/fpg_progressbar.pas2
-rw-r--r--src/gui/fpg_radiobutton.pas2
-rw-r--r--src/gui/fpg_scrollbar.pas35
-rw-r--r--src/gui/fpg_spinedit.pas45
-rw-r--r--src/gui/fpg_splitter.pas78
-rw-r--r--src/gui/fpg_tab.pas210
-rw-r--r--src/gui/fpg_trackbar.pas3
-rw-r--r--src/gui/fpg_tree.pas200
-rw-r--r--src/gui/inputquerydialog.inc12
-rw-r--r--src/gui/managebookmarksdialog.inc227
-rw-r--r--src/gui/selectdirdialog.inc19
64 files changed, 9066 insertions, 2658 deletions
diff --git a/src/corelib/fpg_base.pas b/src/corelib/fpg_base.pas
index 199004ba..a5289474 100644
--- a/src/corelib/fpg_base.pas
+++ b/src/corelib/fpg_base.pas
@@ -25,7 +25,8 @@ uses
Classes,
SysUtils,
fpg_impl,
- syncobjs; // TCriticalSection usage
+ syncobjs, // TCriticalSection usage
+ URIParser, variants, contnrs;
type
TfpgCoord = integer; // we might use floating point coordinates in the future...
@@ -59,7 +60,7 @@ type
TMouseCursor = (mcDefault, mcArrow, mcCross, mcIBeam, mcSizeEW, mcSizeNS,
mcSizeNWSE, mcSizeNESW, mcSizeSWNE, mcSizeSENW, mcMove, mcHourGlass,
- mcHand);
+ mcHand, mcDrag, mcNoDrop);
TGradientDirection = (gdVertical, // Fill vertical
gdHorizontal); // Fill Horizontal
@@ -70,6 +71,9 @@ type
TfpgModalResult = (mrNone, mrOK, mrCancel, mrYes, mrNo, mrAbort, mrRetry,
mrIgnore, mrAll, mrNoToAll, mrYesToAll);
+ TfpgDropAction = (daIgnore, daCopy, daMove, daLink, daAsk);
+ TfpgDropActions = set of TfpgDropAction;
+
const
MOUSE_LEFT = 1;
MOUSE_RIGHT = 3;
@@ -95,21 +99,20 @@ const
FPGM_POPUPCLOSE = 17;
FPGM_HINTTIMER = 18;
FPGM_FREEME = 19;
+ FPGM_DROPENTER = 20;
+ FPGM_DROPEXIT = 21;
FPGM_USER = 50000;
FPGM_KILLME = MaxInt;
// The special keys, based on the well-known keyboard scan codes
{$I keys.inc}
- { Default fpGUI help viewer }
- FPG_HELPVIEWER = 'docview';
var
FPG_DEFAULT_FONT_DESC: string = 'Arial-10:antialias=true';
const
UserNamedColorStart = 128;
-
{$I predefinedcolors.inc}
type
@@ -126,6 +129,22 @@ type
end;
+ TfpgPoint = object // not class for static allocations
+ X: integer;
+ Y: integer;
+ procedure SetPoint(AX, AY: integer);
+ function ManhattanLength: integer; { See URL for explanation http://en.wikipedia.org/wiki/Taxicab_geometry }
+ function ManhattanLength(const PointB: TfpgPoint): integer;
+ end;
+
+
+ TfpgSize = object // not class for static allocations
+ W: integer;
+ H: integer;
+ procedure SetSize(AWidth, AHeight: integer);
+ end;
+
+
TfpgMsgParmMouse = record
x: TfpgCoord;
y: TfpgCoord;
@@ -416,6 +435,8 @@ type
FSizeIsDirty: Boolean;
FPosIsDirty: Boolean;
FMouseCursorIsDirty: Boolean;
+ FOnDragStartDetected: TNotifyEvent;
+ FDragActive: boolean;
function HandleIsValid: boolean; virtual; abstract;
procedure DoUpdateWindowPosition; virtual; abstract;
procedure DoAllocateWindowHandle(AParent: TfpgWindowBase); virtual; abstract;
@@ -426,6 +447,9 @@ type
function DoWindowToScreen(ASource: TfpgWindowBase; const AScreenPos: TPoint): TPoint; virtual; abstract;
procedure DoSetWindowTitle(const ATitle: string); virtual; abstract;
procedure DoSetMouseCursor; virtual; abstract;
+ procedure DoDNDEnabled(const AValue: boolean); virtual; abstract;
+ procedure DoAcceptDrops(const AValue: boolean); virtual; abstract;
+ procedure DoDragStartDetected; virtual;
procedure SetParent(const AValue: TfpgWindowBase); virtual;
function GetParent: TfpgWindowBase; virtual;
function GetCanvas: TfpgCanvasBase; virtual;
@@ -438,6 +462,7 @@ type
procedure SetWidth(const AValue: TfpgCoord);
procedure HandleMove(x, y: TfpgCoord); virtual;
procedure HandleResize(AWidth, AHeight: TfpgCoord); virtual;
+ property OnDragStartDetected: TNotifyEvent read FOnDragStartDetected write FOnDragStartDetected;
public
// The standard constructor.
constructor Create(AOwner: TComponent); override;
@@ -453,6 +478,8 @@ type
procedure MoveWindow(const x: TfpgCoord; const y: TfpgCoord);
function WindowToScreen(ASource: TfpgWindowBase; const AScreenPos: TPoint): TPoint;
function HasParent: Boolean; override;
+ function GetClientRect: TfpgRect; virtual;
+ function GetBoundsRect: TfpgRect; virtual;
procedure ActivateWindow; virtual; abstract;
procedure CaptureMouse; virtual; abstract;
procedure ReleaseMouse; virtual; abstract;
@@ -466,8 +493,8 @@ type
property Height: TfpgCoord read FHeight write SetHeight;
property MinWidth: TfpgCoord read FMinWidth write FMinWidth;
property MinHeight: TfpgCoord read FMinHeight write FMinHeight;
- property MaxWidth: TfpgCoord read FMaxWidth write FMaxWidth;
- property MaxHeight: TfpgCoord read FMaxHeight write FMaxHeight;
+ property MaxWidth: TfpgCoord read FMaxWidth write FMaxWidth default 0;
+ property MaxHeight: TfpgCoord read FMaxHeight write FMaxHeight default 0;
property Canvas: TfpgCanvasBase read GetCanvas;
property Parent: TfpgWindowBase read GetParent write SetParent;
property MouseCursor: TMouseCursor read FMouseCursor write SetMouseCursor;
@@ -531,7 +558,7 @@ type
procedure DoSetText(const AValue: TfpgString); virtual; abstract;
procedure InitClipboard; virtual; abstract;
public
- constructor Create;
+ constructor Create; virtual;
property Text: TfpgString read DoGetText write DoSetText;
end;
@@ -605,6 +632,54 @@ type
end;
+ TfpgMimeDataItem = class(TObject)
+ public
+ format: TfpgString; { mime string type }
+ data: Variant;
+ constructor Create(const AFormat: TfpgString; const AData: variant); reintroduce;
+ end;
+
+
+ TfpgMimeDataBase = class(TObject)
+ private
+ { TODO: This is wrong, we must have one Data Storage object }
+ FDataList: TObjectList;
+ FUrlList: TList;
+ function GetItem(AIndex: Integer): TfpgMimeDataItem;
+ function Geturls: TList;
+ procedure Seturls(const AValue: TList);
+ function GetText: TfpgString;
+ procedure SetText(const AValue: TfpgString);
+ function GetHTML: TfpgString;
+ procedure SetHTML(const AValue: TfpgString);
+ function GetCount: integer;
+ public
+ constructor Create;
+ destructor Destroy; override;
+ procedure Clear;
+ function HasFormat(const AMimeType: TfpgString): boolean;
+ function Formats: TStrings;
+ function GetData(const AMimeType: TfpgString): Variant;
+ procedure SetData(const AMimeType: TfpgString; const AData: Variant);
+ property Items[AIndex: Integer]: TfpgMimeDataItem read GetItem; default;
+ property urls: TList read Geturls write Seturls;
+ property Text: TfpgString read GetText write SetText;
+ property HTML: TfpgString read GetHTML write SetHTML;
+ property Count: integer read GetCount;
+ end;
+
+ TfpgDragBase = class(TObject)
+ protected
+ FDragging: Boolean;
+ FMimeData: TfpgMimeDataBase;
+ public
+ constructor Create;
+ destructor Destroy; override;
+ function Execute(const ADropActions: TfpgDropActions; const ADefaultAction: TfpgDropAction = daCopy): TfpgDropAction; virtual; abstract;
+ end;
+
+
+
{ ******** Helper functions ******** }
{ Keyboard }
function KeycodeToText(AKey: Word; AShiftState: TShiftState): string;
@@ -628,11 +703,14 @@ procedure SortRect(var ARect: TRect);
procedure SortRect(var ARect: TfpgRect);
procedure SortRect(var left, top, right, bottom: integer);
+
+
implementation
uses
fpg_main, // needed for fpgApplication & fpgNamedColor
fpg_utils, // needed for fpgFileList
+ fpg_constants,
typinfo,
process;
@@ -962,11 +1040,15 @@ begin
GetPropList(Obj.ClassInfo, tkPropsWithDefault, PropInfos);
{ Loop through all the selected properties }
for Loop := 0 to Count - 1 do
+ begin
with PropInfos^[Loop]^ do
+ begin
{ If there is supposed to be a default value... }
if Default <> NoDefault then
{ ...then jolly well set it }
SetOrdProp(Obj, PropInfos^[Loop], Default)
+ end;
+ end;
finally
FreeMem(PropInfos, Count * SizeOf(PPropInfo));
end;
@@ -1002,6 +1084,35 @@ begin
Width := Value - Left + 1;
end;
+
+{ TfpgPoint }
+
+procedure TfpgPoint.SetPoint(AX, AY: integer);
+begin
+ X := AX;
+ Y := AY;
+end;
+
+function TfpgPoint.ManhattanLength: integer;
+begin
+ Result := Abs(X) + Abs(Y);
+end;
+
+function TfpgPoint.ManhattanLength(const PointB: TfpgPoint): integer;
+begin
+ Result := Abs(PointB.X-X) + Abs(PointB.Y-Y);
+end;
+
+
+{ TfpgSize }
+
+procedure TfpgSize.SetSize(AWidth, AHeight: integer);
+begin
+ W := AWidth;
+ H := AHeight;
+end;
+
+
{ TfpgWindowBase }
procedure TfpgWindowBase.SetMouseCursor(const AValue: TMouseCursor);
@@ -1030,6 +1141,12 @@ begin
Result := MinHeight;
end;
+procedure TfpgWindowBase.DoDragStartDetected;
+begin
+ if Assigned(FOnDragStartDetected) then
+ FOnDragStartDetected(self);
+end;
+
procedure TfpgWindowBase.SetParent(const AValue: TfpgWindowBase);
begin
FParent := AValue;
@@ -1150,6 +1267,7 @@ begin
FSizeIsDirty := True;
FMaxWidth := 0;
FMaxHeight := 0;
+ FDragActive := False;
end;
procedure TfpgWindowBase.AfterConstruction;
@@ -1205,6 +1323,16 @@ begin
Result := FParent <> nil;
end;
+function TfpgWindowBase.GetClientRect: TfpgRect;
+begin
+ Result.SetRect(0, 0, Width, Height);
+end;
+
+function TfpgWindowBase.GetBoundsRect: TfpgRect;
+begin
+ Result.SetRect(Left, Top, Width+1, Height+1);
+end;
+
procedure TfpgWindowBase.SetFullscreen(AValue: Boolean);
begin
if AValue then
@@ -2138,7 +2266,7 @@ var
begin
// Default location is in same directory as current running application
// This location might change in the future.
- ext := ExtractFileExt(ParamStr(0));
+ ext := fpgExtractFileExt(ParamStr(0));
Result := fpgExtractFilePath(ParamStr(0)) + FPG_HELPVIEWER + ext;
end;
@@ -2255,6 +2383,7 @@ function TfpgApplicationBase.ContextHelp(const AHelpContext: THelpContext): Bool
var
p: TProcess;
begin
+ Result := False;
p := TProcess.Create(nil);
try
if fpgFileExists(HelpFile) then
@@ -2267,6 +2396,7 @@ begin
end
else
p.CommandLine := GetHelpViewer;
+ Result := True;
p.Execute;
finally
p.Free;
@@ -2277,6 +2407,7 @@ function TfpgApplicationBase.KeywordHelp(const AHelpKeyword: string): Boolean;
var
p: TProcess;
begin
+ Result := False;
p := TProcess.Create(nil);
try
if fpgFileExists(HelpFile) then
@@ -2286,6 +2417,7 @@ begin
end
else
p.CommandLine := GetHelpViewer;
+ Result := True;
p.Execute;
finally
p.Free;
@@ -2296,6 +2428,7 @@ end;
constructor TfpgClipboardBase.Create;
begin
+ inherited Create;
InitClipboard;
end;
@@ -2415,7 +2548,7 @@ var
begin
e := TFileEntry.Create;
e.Name := sr.Name;
- e.Extension := ExtractFileExt(e.Name);
+ e.Extension := fpgExtractFileExt(e.Name);
e.Size := sr.Size;
// e.Attributes := sr.Attr; // this is incorrect and needs to improve!
e.ModTime := FileDateToDateTime(sr.Time);
@@ -2627,8 +2760,225 @@ begin
inherited Create(AOwner);
FHelpType := htKeyword;
FHelpContext := 0;
+ FHelpKeyword := '';
FTagPointer := nil;
end;
+{ TfpgMimeDataItem }
+
+constructor TfpgMimeDataItem.Create(const AFormat: TfpgString; const AData: variant);
+begin
+ inherited Create;
+ format := AFormat;
+ data := AData;
+end;
+
+
+{ TfpgMimeDataBase }
+
+function TfpgMimeDataBase.Geturls: TList;
+begin
+ { TODO: We should only return data related to MIME type: text/uri-list }
+ Result := nil;
+end;
+
+function TfpgMimeDataBase.GetItem(AIndex: Integer): TfpgMimeDataItem;
+begin
+ Result := TfpgMimeDataItem(FDataList[AIndex]);
+end;
+
+procedure TfpgMimeDataBase.Seturls(const AValue: TList);
+begin
+ if AValue = nil then
+ raise Exception.Create('Source URI list must not be nil');
+
+ if Assigned(FUrlList) then
+ FUrlList.Free;
+
+ { We take ownership of AValue. Can we do this? }
+ FUrlList := AValue;
+// FFormats.Clear;
+// Formats.Add('text/uri-list');
+end;
+
+function TfpgMimeDataBase.GetText: TfpgString;
+var
+ i: integer;
+ s: string;
+begin
+ { TODO: if no text/plain, but we have HTML, we must strip all tags and return that }
+ for i := 0 to Count-1 do
+ begin
+ if Items[i].format = 'text/plain' then
+ begin
+ s := Items[i].data;
+ Result := s;
+ break;
+ end;
+ end;
+end;
+
+procedure TfpgMimeDataBase.SetText(const AValue: TfpgString);
+var
+ i: integer;
+ r: TfpgMimeDataItem;
+begin
+ { remove existing 'text/plain' first }
+ for i := Count-1 downto 0 do
+ begin
+ r := Items[i];
+ if r.format = 'text/plain' then
+ begin
+ FDataList.Remove(r);
+ break;
+ end;
+ end;
+ { now add new structure }
+ r := TfpgMimeDataItem.Create('text/plain', AValue);
+ FDataList.Add(r);
+end;
+
+function TfpgMimeDataBase.GetHTML: TfpgString;
+var
+ i: integer;
+ s: string;
+begin
+ { TODO: if data was HTML, we must strip all tags - regex will make this easy }
+ for i := 0 to Count-1 do
+ begin
+ if Items[i].format = 'text/html' then
+ begin
+ s := Items[i].data;
+ Result := s;
+ break;
+ end;
+ end;
+end;
+
+procedure TfpgMimeDataBase.SetHTML(const AValue: TfpgString);
+var
+ i: integer;
+ r: TfpgMimeDataItem;
+begin
+ { remove existing 'text/html' first }
+ for i := Count-1 downto 0 do
+ begin
+ r := Items[i];
+ if r.format = 'text/html' then
+ begin
+ FDataList.Remove(r);
+ break;
+ end;
+ end;
+ { now add new structure }
+ r := TfpgMimeDataItem.Create('text/html', AValue);
+ FDataList.Add(r);
+end;
+
+function TfpgMimeDataBase.GetCount: integer;
+begin
+ Result := FDataList.Count;
+end;
+
+constructor TfpgMimeDataBase.Create;
+begin
+ inherited Create;
+ FDataList := TObjectList.Create;
+end;
+
+destructor TfpgMimeDataBase.Destroy;
+begin
+ FDataList.Free;
+ inherited Destroy;
+end;
+
+procedure TfpgMimeDataBase.Clear;
+begin
+ FUrlList.Clear;
+ FDataList.Clear;
+end;
+
+function TfpgMimeDataBase.HasFormat(const AMimeType: TfpgString): boolean;
+var
+ i: integer;
+begin
+ Result := False;
+ for i := 0 to Count-1 do
+ begin
+ Result := Items[i].format = AMimeType;
+ if Result then
+ break;
+ end;
+end;
+
+function TfpgMimeDataBase.Formats: TStrings;
+var
+ i: integer;
+ r: TfpgMimeDataItem;
+ s: string;
+begin
+ if Count = 0 then
+ Result := nil
+ else
+ begin
+ Result := TStringList.Create;
+ for i := 0 to Count-1 do
+ begin
+ s := Items[i].format;
+ Result.Add(s);
+ end;
+ end;
+end;
+
+function TfpgMimeDataBase.GetData(const AMimeType: TfpgString): Variant;
+var
+ i: integer;
+begin
+ for i := 0 to Count-1 do
+ begin
+ if Items[i].format = AMimeType then
+ begin
+ Result := Items[i].data;
+ break;
+ end;
+ end;
+end;
+
+procedure TfpgMimeDataBase.SetData(const AMimeType: TfpgString; const AData: Variant);
+var
+ i: integer;
+ r: TfpgMimeDataItem;
+begin
+ { remove existing mime type first }
+ for i := Count-1 downto 0 do
+ begin
+ r := Items[i];
+ if r.format = AMimeType then
+ begin
+ FDataList.Remove(r);
+ break;
+ end;
+ end;
+ { now add new structure }
+ r := TfpgMimeDataItem.Create(AMimeType, AData);
+ FDataList.Add(r);
+end;
+
+
+{ TfpgDragBase }
+
+constructor TfpgDragBase.Create;
+begin
+ inherited Create;
+ FDragging := False;
+end;
+
+destructor TfpgDragBase.Destroy;
+begin
+ FMimeData.Free;
+ inherited Destroy;
+end;
+
+
end.
diff --git a/src/corelib/fpg_constants.pas b/src/corelib/fpg_constants.pas
index d93e5208..d83f855b 100644
--- a/src/corelib/fpg_constants.pas
+++ b/src/corelib/fpg_constants.pas
@@ -30,7 +30,7 @@ unit fpg_constants;
interface
uses
- SysUtils, fpg_base;
+ SysUtils;
resourcestring
@@ -92,21 +92,20 @@ const
ONE_MILISEC = 1/MSecsPerDay;
DEFAULT_HINT_PAUSE = 500; // in milliseconds
+
+ { Default fpGUI help viewer }
+ FPG_HELPVIEWER = 'docview';
+
+ FPG_CONFIG_DIR = 'fpgui_toolkit' + PathDelim;
+ FPG_BOOKMARKS_FILE = 'bookmarks.ini';
+ FPG_BOOKMARK_SECTION = 'bookmarks';
-{ This is so that when we support LTR and RTL languages, the colon will be
- added at the correct place. }
-function fpgAddColon(const AText: TfpgString): TfpgString;
implementation
-function fpgAddColon(const AText: TfpgString): TfpgString;
-begin
- { TODO : Check language direction and add colon at appropriate end. }
- result := AText + ':';
-end;
end.
diff --git a/src/corelib/fpg_imgfmt_bmp.pas b/src/corelib/fpg_imgfmt_bmp.pas
index 48b25d5b..1ea61551 100644
--- a/src/corelib/fpg_imgfmt_bmp.pas
+++ b/src/corelib/fpg_imgfmt_bmp.pas
@@ -25,8 +25,7 @@ interface
uses
Classes,
SysUtils,
- fpg_main,
- fpg_base;
+ fpg_main;
procedure ReadImage_BMP(img: TfpgImage; bmp: Pointer; bmpsize: longword);
function LoadImage_BMP(const AFileName: String): TfpgImage;
diff --git a/src/corelib/fpg_imgutils.pas b/src/corelib/fpg_imgutils.pas
index afb4d4fe..97f33fb7 100644
--- a/src/corelib/fpg_imgutils.pas
+++ b/src/corelib/fpg_imgutils.pas
@@ -104,7 +104,7 @@ end;
initialization
GrayConvMatrix := GCM_NTSC;
GrayBrightness := True;
- GrayBrightnessPercentage := 20;
+ GrayBrightnessPercentage := 40;
end.
diff --git a/src/corelib/fpg_main.pas b/src/corelib/fpg_main.pas
index c8023408..b5b7fb17 100644
--- a/src/corelib/fpg_main.pas
+++ b/src/corelib/fpg_main.pas
@@ -29,7 +29,8 @@ uses
Classes,
SysUtils,
fpg_base,
- fpg_interface;
+ fpg_interface,
+ fpg_impl;
type
TOrientation = (orVertical, orHorizontal);
@@ -43,6 +44,8 @@ type
TFButtonFlags = set of (btfIsEmbedded, btfIsDefault, btfIsPressed,
btfIsSelected, btfHasFocus, btfHasParentColor, btfFlat, btfHover);
+
+ TfpgMenuItemFlags = set of (mifSelected, mifHasFocus, mifSeparator, mifEnabled, mifChecked, mifSubMenu);
TFTextFlags = set of (txtLeft, txtHCenter, txtRight, txtTop, txtVCenter, txtBottom, txtWrap, txtDisabled,
txtAutoSize);
@@ -177,6 +180,8 @@ type
procedure DrawButtonFace(r: TfpgRect; AFlags: TFButtonFlags);
procedure DrawControlFrame(x, y, w, h: TfpgCoord);
procedure DrawControlFrame(r: TfpgRect);
+ procedure DrawBevel(x, y, w, h: TfpgCoord; ARaised: Boolean = True);
+ procedure DrawBevel(r: TfpgRect; ARaised: Boolean = True);
procedure DrawDirectionArrow(x, y, w, h: TfpgCoord; direction: TArrowDirection);
procedure DrawDirectionArrow(r: TfpgRect; direction: TArrowDirection);
procedure DrawFocusRect(r: TfpgRect);
@@ -187,10 +192,9 @@ type
{ This is very basic for now, just to remind us of theming support. Later we
- will rework this to use a Style Manager like the previous fpGUI. Styles must
- also move out of fpGFX. Also support Bitmap based styles for easier theme
- implementations. }
- TfpgStyle = class
+ will rework this to use a Style Manager like the previous fpGUI.
+ Also support Bitmap based styles for easier theme implementations. }
+ TfpgStyle = class(TObject)
public
DefaultFont: TfpgFont;
FixedFont: TfpgFont;
@@ -201,9 +205,14 @@ type
destructor Destroy; override;
procedure DrawButtonFace(ACanvas: TfpgCanvas; x, y, w, h: TfpgCoord; AFlags: TFButtonFlags); virtual;
procedure DrawControlFrame(ACanvas: TfpgCanvas; x, y, w, h: TfpgCoord); virtual;
+ procedure DrawBevel(ACanvas: TfpgCanvas; x, y, w, h: TfpgCoord; ARaised: Boolean = True); virtual;
procedure DrawDirectionArrow(ACanvas: TfpgCanvas; x, y, w, h: TfpgCoord; direction: TArrowDirection); virtual;
procedure DrawString(ACanvas: TfpgCanvas; x, y: TfpgCoord; AText: string; AEnabled: boolean = True); virtual;
procedure DrawFocusRect(ACanvas: TfpgCanvas; r: TfpgRect); virtual;
+ procedure DrawMenuRow(ACanvas: TfpgCanvas; r: TfpgRect; AFlags: TfpgMenuItemFlags); virtual;
+ procedure DrawMenuItem(ACanvas: TfpgCanvas; r: TfpgRect; AFlags: TfpgMenuItemFlags; AText: TfpgString); virtual;
+ procedure DrawMenuItemSeparator(ACanvas: TfpgCanvas; r: TfpgRect); virtual;
+ procedure DrawMenuItemImage(ACanvas: TfpgCanvas; x, y: TfpgCoord; r: TfpgRect; AFlags: TfpgMenuItemFlags); virtual;
end;
@@ -224,6 +233,8 @@ type
FHintTimer: TfpgTimer;
FHintWidget: TfpgWindow;
FHintPos: TPoint;
+ FOnKeyPress: TKeyPressEvent;
+ FStartDragDistance: integer;
procedure SetHintPause(const AValue: Integer);
procedure SetupLocalizationStrings;
procedure InternalMsgFreeMe(var msg: TfpgMessageRec); message FPGM_FREEME;
@@ -231,6 +242,7 @@ type
procedure CreateHintWindow;
procedure HintTimerFired(Sender: TObject);
procedure SetShowHint(const AValue: boolean);
+ procedure SetStartDragDistance(const AValue: integer);
protected
FDisplayParams: string;
FScreenWidth: integer;
@@ -263,8 +275,10 @@ type
property ScreenWidth: integer read FScreenWidth;
property ScreenHeight: integer read FScreenHeight;
property ShowHint: boolean read FShowHint write SetShowHint default True;
+ property StartDragDistance: integer read FStartDragDistance write SetStartDragDistance default 5;
property StopOnException: Boolean read FStopOnException write FStopOnException;
property OnException: TExceptionEvent read FOnException write FOnException;
+ property OnKeyPress: TKeyPressEvent read FOnKeyPress write FOnKeyPress;
end;
@@ -278,10 +292,11 @@ type
procedure SetInterval(const AValue: integer);
public
{ AInterval is in milliseconds. }
- constructor Create(ainterval: integer);
+ constructor Create(ainterval: integer); virtual;
destructor Destroy; override;
procedure CheckAlarm(ctime: TDateTime);
- procedure Reset;
+ procedure Reset; virtual;
+ procedure Pause(ASeconds: integer);
property Enabled: boolean read FEnabled write SetEnabled;
property NextAlarm: TDateTime read FNextAlarm;
{ Interval is in milliseconds. }
@@ -322,6 +337,25 @@ type
end;
+ TfpgMimeData = class(TfpgMimeDataImpl)
+ end;
+
+
+ TfpgDrag = class(TfpgDragImpl)
+ private
+ FTarget: TfpgWinHandle;
+ procedure SetMimeData(const AValue: TfpgMimeDataBase);
+ protected
+ function GetSource: TfpgWindow; reintroduce;
+ public
+ constructor Create(ASource: TfpgWindow);
+ function Execute(const ADropActions: TfpgDropActions = [daCopy]; const ADefaultAction: TfpgDropAction = daCopy): TfpgDropAction; override;
+ property Source: TfpgWindow read GetSource;
+ property Target: TfpgWinHandle read FTarget write FTarget;
+ property MimeData: TfpgMimeDataBase read FMimeData write SetMimeData;
+ end;
+
+
var
fpgStyle: TfpgStyle; { TODO -ograemeg : move this into fpgApplication }
fpgCaret: TfpgCaret; { TODO -ograemeg : move this into fpgApplication }
@@ -349,6 +383,7 @@ procedure fpgDeleteFirstMessage;
function fpgColorToRGB(col: TfpgColor): TfpgColor;
function fpgGetNamedColor(col: TfpgColor): TfpgColor;
procedure fpgSetNamedColor(colorid, rgbvalue: longword);
+function fpgIsNamedColor(col: TfpgColor): boolean;
function fpgGetNamedFontDesc(afontid: string): string;
procedure fpgSetNamedFont(afontid, afontdesc: string);
function fpgGetNamedFontList: TStringlist;
@@ -356,10 +391,11 @@ function fpgGetNamedFontList: TStringlist;
// Timers rountines
procedure fpgInitTimers;
procedure fpgCheckTimers;
+procedure fpgResetAllTimers;
function fpgClosestTimer(ctime: TDateTime; amaxtime: integer): integer;
function fpgGetTickCount: DWord;
-// Rectangle routines
+// Rectangle, Point & Size routines
function InflateRect(var Rect: TRect; dx: Integer; dy: Integer): Boolean;
function InflateRect(var Rect: TfpgRect; dx: Integer; dy: Integer): Boolean;
function OffsetRect(var Rect: TRect; dx: Integer; dy: Integer): Boolean;
@@ -368,6 +404,8 @@ function CenterPoint(const Rect: TRect): TPoint;
function CenterPoint(const Rect: TfpgRect): TPoint;
function fpgRect(ALeft, ATop, AWidth, AHeight: integer): TfpgRect;
function fpgRectToRect(const ARect: TfpgRect): TRect;
+function fpgPoint(const AX, AY: integer): TfpgPoint;
+function fpgSize(const AWidth, AHeight: integer): TfpgSize;
// Debug rountines
procedure PrintRect(const Rect: TRect);
@@ -386,12 +424,34 @@ procedure DebugLn(const s1, s2, s3, s4: TfpgString);
// operator overloading of some useful structures
operator = (a: TRect; b: TRect): boolean;
+operator = (const ASize1, ASize2: TfpgSize) b: Boolean;
+operator = (const APoint1, APoint2: TPoint) b: Boolean;
+operator + (const APoint1, APoint2: TPoint) p: TPoint;
+operator + (const APoint1, APoint2: TfpgPoint) p: TfpgPoint;
+operator + (const APoint: TPoint; ASize: TfpgSize) p: TPoint;
+operator + (const APoint: TfpgPoint; ASize: TfpgSize) p: TfpgPoint;
+operator + (const ASize: TfpgSize; APoint: TPoint) s: TfpgSize;
+operator + (const ASize: TfpgSize; APoint: TfpgPoint) s: TfpgSize;
+operator + (const ASize1, ASize2: TfpgSize) s: TfpgSize;
+operator + (const APoint: TPoint; i: Integer) p: TPoint;
+operator + (const APoint: TfpgPoint; i: Integer) p: TfpgPoint;
+operator + (const ASize: TfpgSize; i: Integer) s: TfpgSize;
+operator - (const APoint1, APoint2: TPoint) p: TPoint;
+operator - (const APoint1, APoint2: TfpgPoint) p: TfpgPoint;
+operator - (const APoint: TPoint; i: Integer) p: TPoint;
+operator - (const APoint: TfpgPoint; i: Integer) p: TfpgPoint;
+operator - (const ASize: TfpgSize; const APoint: TPoint) s: TfpgSize;
+operator - (const ASize: TfpgSize; const APoint: TfpgPoint) s: TfpgSize;
+operator - (const ASize: TfpgSize; i: Integer) s: TfpgSize;
+operator = (const AColor1, AColor2: TFPColor) b: Boolean;
+
implementation
uses
strutils,
math,
+ dateutils,
fpg_imgfmt_bmp,
fpg_stdimages,
fpg_translations,
@@ -446,19 +506,25 @@ var
ctime: TDateTime;
begin
ctime := now;
- i := 0;
- while i < fpgTimers.Count do
+ i := fpgTimers.Count;
+ while i > 0 do
begin
+ dec(i);
if fpgTimers[i] = nil then
fpgTimers.Delete(i)
else
- begin
TfpgTimer(fpgTimers[i]).CheckAlarm(ctime);
- Inc(i);
- end;
end;
end;
+procedure fpgResetAllTimers;
+var
+ i: integer;
+begin
+ for i := 0 to fpgTimers.Count-1 do
+ TfpgTimer(fpgTimers[i]).Reset;
+end;
+
function fpgClosestTimer(ctime: TDateTime; amaxtime: integer): integer;
var
i: integer;
@@ -583,6 +649,16 @@ begin
Result.Bottom := ARect.Bottom;
end;
+function fpgPoint(const AX, AY: integer): TfpgPoint;
+begin
+ Result.SetPoint(AX, AY);
+end;
+
+function fpgSize(const AWidth, AHeight: integer): TfpgSize;
+begin
+ Result.SetSize(AWidth, AHeight);
+end;
+
procedure InitializeDebugOutput;
var
DebugFileName: string;
@@ -789,6 +865,126 @@ begin
Result := False;
end;
+operator = (const ASize1, ASize2: TfpgSize) b: Boolean;
+begin
+ b := (ASize1.w = ASize2.w) and (ASize1.h = ASize2.h);
+end;
+
+operator = (const APoint1, APoint2: TPoint) b: Boolean;
+begin
+ b := (APoint1.X = APoint2.X) and (APoint1.Y = APoint2.Y);
+end;
+
+operator + (const APoint1, APoint2: TPoint) p: TPoint;
+begin
+ p.x := APoint1.x + APoint2.x;
+ p.y := APoint1.y + APoint2.y;
+end;
+
+operator + (const APoint1, APoint2: TfpgPoint) p: TfpgPoint;
+begin
+ p.x := APoint1.x + APoint2.x;
+ p.y := APoint1.y + APoint2.y;
+end;
+
+operator + (const APoint: TPoint; ASize: TfpgSize) p: TPoint;
+begin
+ p.x := APoint.x + ASize.w;
+ p.y := APoint.y + ASize.h;
+end;
+
+operator + (const APoint: TfpgPoint; ASize: TfpgSize) p: TfpgPoint;
+begin
+ p.x := APoint.x + ASize.w;
+ p.y := APoint.y + ASize.h;
+end;
+
+operator + (const ASize: TfpgSize; APoint: TPoint) s: TfpgSize;
+begin
+ s.w := ASize.w + APoint.x;
+ s.h := ASize.h + APoint.y;
+end;
+
+operator + (const ASize: TfpgSize; APoint: TfpgPoint) s: TfpgSize;
+begin
+ s.w := ASize.w + APoint.x;
+ s.h := ASize.h + APoint.y;
+end;
+
+operator + (const ASize1, ASize2: TfpgSize) s: TfpgSize;
+begin
+ s.w := ASize1.w + ASize2.w;
+ s.h := ASize1.h + ASize2.h;
+end;
+
+operator + (const APoint: TPoint; i: Integer) p: TPoint;
+begin
+ p.x := APoint.x + i;
+ p.y := APoint.y + i;
+end;
+
+operator + (const APoint: TfpgPoint; i: Integer) p: TfpgPoint;
+begin
+ p.x := APoint.x + i;
+ p.y := APoint.y + i;
+end;
+
+operator + (const ASize: TfpgSize; i: Integer) s: TfpgSize;
+begin
+ s.w := ASize.w + i;
+ s.h := ASize.h + i;
+end;
+
+operator - (const APoint1, APoint2: TPoint) p: TPoint;
+begin
+ p.x := APoint1.x - APoint2.x;
+ p.y := APoint1.y - APoint2.y;
+end;
+
+operator - (const APoint1, APoint2: TfpgPoint) p: TfpgPoint;
+begin
+ p.x := APoint1.x - APoint2.x;
+ p.y := APoint1.y - APoint2.y;
+end;
+
+operator - (const APoint: TPoint; i: Integer) p: TPoint;
+begin
+ p.x := APoint.x - i;
+ p.y := APoint.y - i;
+end;
+
+operator - (const APoint: TfpgPoint; i: Integer) p: TfpgPoint;
+begin
+ p.x := APoint.x - i;
+ p.y := APoint.y - i;
+end;
+
+operator - (const ASize: TfpgSize; const APoint: TPoint) s: TfpgSize;
+begin
+ s.w := ASize.w - APoint.x;
+ s.h := ASize.h - APoint.y;
+end;
+
+operator - (const ASize: TfpgSize; const APoint: TfpgPoint) s: TfpgSize;
+begin
+ s.w := ASize.w - APoint.x;
+ s.h := ASize.h - APoint.y;
+end;
+
+operator - (const ASize: TfpgSize; i: Integer) s: TfpgSize;
+begin
+ s.w := ASize.w - i;
+ s.h := ASize.h - i;
+end;
+
+operator = (const AColor1, AColor2: TFPColor) b: Boolean;
+begin
+ b := (AColor1.Red = AColor2.Red)
+ and (AColor1.Green = AColor2.Green)
+ and (AColor1.Blue = AColor2.Blue)
+ and (AColor1.Alpha = AColor2.Alpha);
+end;
+
{ TfpgTimer }
procedure TfpgTimer.SetEnabled(const AValue: boolean);
@@ -845,6 +1041,14 @@ begin
Enabled := True;
end;
+procedure TfpgTimer.Pause(ASeconds: integer);
+begin
+ if Enabled then
+ begin
+ FNextAlarm := incSecond(Now, ASeconds);
+ end;
+end;
+
function fpgApplication: TfpgApplication;
begin
if not Assigned(uApplication) then
@@ -869,7 +1073,10 @@ end;
function fpgGetNamedColor(col: TfpgColor): TfpgColor;
begin
- Result := fpgNamedColors[col and $FF];
+ if fpgIsNamedColor(col) then
+ Result := col // nothing to do, it is already a named color
+ else
+ Result := fpgNamedColors[col and $FF];
end;
procedure fpgSetNamedColor(colorid, rgbvalue: longword);
@@ -882,6 +1089,11 @@ begin
fpgNamedColors[i] := rgbvalue;
end;
+function fpgIsNamedColor(col: TfpgColor): boolean;
+begin
+ Result := (col and cl_BaseNamedColor) <> 0;
+end;
+
function fpgGetNamedFontDesc(afontid: string): string;
var
n: integer;
@@ -893,9 +1105,9 @@ begin
Exit; //==>
end;
- {.$IFDEF DEBUG}
+ {$IFDEF DEBUG}
Writeln('GetNamedFontDesc error: "' + afontid + '" is missing. Default is used.');
- {.$ENDIF}
+ {$ENDIF}
Result := FPG_DEFAULT_FONT_DESC;
end;
@@ -952,6 +1164,7 @@ begin
FHintPause := DEFAULT_HINT_PAUSE;
FHintWidget := nil; // widget the mouse is over and whos hint text we need.
FShowHint := True;
+ FStartDragDistance := 5; // pixels
try
inherited Create(AParams);
@@ -1262,6 +1475,14 @@ begin
FShowHint := AValue;
end;
+procedure TfpgApplication.SetStartDragDistance(const AValue: integer);
+begin
+ if AValue < 0 then
+ FStartDragDistance := 0
+ else
+ FStartDragDistance := AValue;
+end;
+
procedure TfpgApplication.FreeFontRes(afontres: TfpgFontResource);
var
n: integer;
@@ -1302,11 +1523,11 @@ end;
procedure TfpgApplication.ProcessMessages;
begin
Flush;
- while DoMessagesPending do
- begin
- WaitWindowMessage(0);
- Flush;
- end;
+// while DoMessagesPending do // this blocked timers and other non-OS code
+// begin
+ WaitWindowMessage(250);
+// Flush;
+// end;
end;
procedure TfpgApplication.SetMessageHook(AWidget: TObject; const AMsgCode: integer; AListener: TObject);
@@ -1389,7 +1610,7 @@ end;
procedure TfpgApplication.RunMessageLoop;
begin
- WaitWindowMessage(1000);
+ WaitWindowMessage(2000);
end;
{ TfpgFont }
@@ -1513,6 +1734,16 @@ begin
DrawControlFrame(r.Left, r.Top, r.Width, r.Height);
end;
+procedure TfpgCanvas.DrawBevel(x, y, w, h: TfpgCoord; ARaised: Boolean);
+begin
+ fpgStyle.DrawBevel(self, x, y, w, h, ARaised);
+end;
+
+procedure TfpgCanvas.DrawBevel(r: TfpgRect; ARaised: Boolean);
+begin
+ DrawBevel(r.Left, r.Top, r.Width, r.Height, ARaised);
+end;
+
procedure TfpgCanvas.DrawDirectionArrow(x, y, w, h: TfpgCoord; direction: TArrowDirection);
begin
fpgStyle.DrawDirectionArrow(self, x, y, w, h, direction);
@@ -1683,7 +1914,7 @@ begin
fpgSetNamedColor(clText4, $404000);
fpgSetNamedColor(clSelection, $08246A);
fpgSetNamedColor(clSelectionText, $FFFFFF);
- fpgSetNamedColor(clInactiveSel, $D0D0FF);
+ fpgSetNamedColor(clInactiveSel, $99A6BF); // win 2000 buttonface = $D4D0C8
fpgSetNamedColor(clInactiveSelText, $000000);
fpgSetNamedColor(clScrollBar, $E8E4DB);
fpgSetNamedColor(clButtonFace, $D5D2CD);
@@ -1694,14 +1925,15 @@ begin
fpgSetNamedColor(clInactiveWgFrame, $A0A0A0);
fpgSetNamedColor(clTextCursor, $000000);
fpgSetNamedColor(clChoiceListBox, $E8E8E8);
- fpgSetNamedColor(clUnset, $D0D0FF);
+ fpgSetNamedColor(clUnset, $99A6BF); // dull (gray) blue
fpgSetNamedColor(clMenuText, $000000);
fpgSetNamedColor(clMenuDisabled, $909090);
fpgSetNamedColor(clHintWindow, $FFFFBF);
fpgSetNamedColor(clGridSelection, $08246A); // same as clSelection
fpgSetNamedColor(clGridSelectionText, $FFFFFF); // same as clSelectionText
- fpgSetNamedColor(clGridInactiveSel, $D0D0FF); // same as clInactiveSel
+ fpgSetNamedColor(clGridInactiveSel, $99A6BF); // same as clInactiveSel
fpgSetNamedColor(clGridInactiveSelText, $000000); // same as clInactiveSelText
+ fpgSetNamedColor(clSplitterGrabBar, $839EFE); // pale blue
// Global Font Objects
@@ -1752,7 +1984,12 @@ begin
if (btfIsEmbedded in AFlags) then
ACanvas.SetColor(clHilite2)
else
- ACanvas.SetColor(clShadow2);
+ begin
+ if (btfFlat in AFlags) or (btfHover in AFlags) then
+ ACanvas.SetColor(clShadow1) { light shadow }
+ else
+ ACanvas.SetColor(clShadow2); { dark shadow }
+ end;
end
else
ACanvas.SetColor(clHilite2);
@@ -1774,14 +2011,27 @@ begin
if (btfIsEmbedded in AFlags) then
ACanvas.SetColor(clHilite1)
else
- ACanvas.SetColor(clShadow2);
+ begin
+ if (btfFlat in AFlags) or (btfHover in AFlags) then
+ ACanvas.SetColor(clHilite2) { light shadow }
+ else
+ ACanvas.SetColor(clShadow2); { dark shadow }
+ end;
end
else
- ACanvas.SetColor(clShadow2);
-
+ begin
+ if btfHover in AFlags then
+ ACanvas.SetColor(clShadow1) { light shadow }
+ else
+ ACanvas.SetColor(clShadow2); { dark shadow }
+ end;
+
ACanvas.DrawLine(r.Right, r.Top, r.Right, r.Bottom); // right
ACanvas.DrawLine(r.Right, r.Bottom, r.Left-1, r.Bottom); // bottom
+ if (btfFlat in AFlags) or (btfHover in AFlags) then
+ exit; { "toolbar" style buttons need a nice thing/flat border }
+
// Right and Bottom (inner)
if btfIsPressed in AFlags then
begin
@@ -1819,6 +2069,36 @@ begin
ACanvas.DrawLine(r.Right-1, r.Bottom-1, r.Left+1, r.Bottom-1); // bottom (inner)
end;
+procedure TfpgStyle.DrawBevel(ACanvas: TfpgCanvas; x, y, w, h: TfpgCoord; ARaised: Boolean);
+var
+ r: TfpgRect;
+begin
+ r.SetRect(x, y, w, h);
+ ACanvas.SetColor(clWindowBackground);
+ ACanvas.SetLineStyle(1, lsSolid);
+ ACanvas.FillRectangle(x, y, w, h);
+
+ if ARaised then
+ ACanvas.SetColor(clHilite2)
+ else
+ ACanvas.SetColor(clShadow1);
+
+ { top }
+ ACanvas.DrawLine(r.Right-1, r.Top, r.Left, r.Top);
+
+ { left }
+ ACanvas.DrawLine(r.Left, r.Top, r.Left, r.Bottom);
+
+ if ARaised then
+ ACanvas.SetColor(clShadow1)
+ else
+ ACanvas.SetColor(clHilite2);
+
+ { right, then bottom }
+ ACanvas.DrawLine(r.Right, r.Top, r.Right, r.Bottom);
+ ACanvas.DrawLine(r.Right, r.Bottom, r.Left-1, r.Bottom);
+end;
+
procedure TfpgStyle.DrawDirectionArrow(ACanvas: TfpgCanvas; x, y, w, h: TfpgCoord; direction: TArrowDirection);
var
{
@@ -1917,6 +2197,50 @@ begin
ACanvas.SetLineStyle(oldLineWidth, oldLineStyle);
end;
+procedure TfpgStyle.DrawMenuRow(ACanvas: TfpgCanvas; r: TfpgRect; AFlags: TfpgMenuItemFlags);
+begin
+ ACanvas.FillRectangle(r);
+end;
+
+procedure TfpgStyle.DrawMenuItem(ACanvas: TfpgCanvas; r: TfpgRect;
+ AFlags: TfpgMenuItemFlags; AText: TfpgString);
+begin
+ //
+end;
+
+procedure TfpgStyle.DrawMenuItemSeparator(ACanvas: TfpgCanvas; r: TfpgRect);
+begin
+ ACanvas.SetColor(clShadow1);
+ ACanvas.DrawLine(r.Left+1, r.Top+2, r.Right, r.Top+2);
+ ACanvas.SetColor(clHilite2);
+ ACanvas.DrawLine(r.Left+1, r.Top+3, r.Right, r.Top+3);
+end;
+
+procedure TfpgStyle.DrawMenuItemImage(ACanvas: TfpgCanvas; x, y: TfpgCoord; r: TfpgRect; AFlags: TfpgMenuItemFlags);
+var
+ img: TfpgImage;
+ lx: TfpgCoord;
+ ly: TfpgCoord;
+begin
+ if mifChecked in AFlags then
+ begin
+ img := fpgImages.GetImage('stdimg.check'); // Do NOT localize
+ if mifSelected in AFlags then
+ img.Invert; // invert modifies the original image, so we must restore it later
+ ACanvas.DrawImage(x, y, img);
+ if mifSelected in AFlags then
+ img.Invert; // restore image to original state
+ end;
+ if mifSubMenu in AFlags then
+ begin
+ img := fpgImages.GetImage('sys.sb.right'); // Do NOT localize
+ lx := (r.height div 2) - 3;
+ lx := r.right-lx-2;
+ ly := y + ((r.Height-img.Height) div 2);
+ ACanvas.DrawImage(lx, ly, img);
+ end;
+end;
+
{ TfpgCaret }
@@ -1967,6 +2291,7 @@ procedure TfpgCaret.UnSetCaret(ACanvas: TfpgCanvas);
begin
if (FCanvas = ACanvas) or (ACanvas = nil) then
begin
+ FTimer.Enabled := False;
FEnabled := False;
FCanvas := nil;
end;
@@ -2158,6 +2483,42 @@ begin
Result.UpdateImage;
end;
+
+{ TfpgDrag }
+
+procedure TfpgDrag.SetMimeData(const AValue: TfpgMimeDataBase);
+begin
+ if Assigned(FMimeData) then
+ FMimeData.Free;
+ FMimeData := AValue;
+end;
+
+function TfpgDrag.GetSource: TfpgWindow;
+begin
+ Result := TfpgWindow(inherited GetSource);
+end;
+
+constructor TfpgDrag.Create(ASource: TfpgWindow);
+begin
+ inherited Create;
+ FSource := ASource;
+end;
+
+function TfpgDrag.Execute(const ADropActions: TfpgDropActions;
+ const ADefaultAction: TfpgDropAction): TfpgDropAction;
+begin
+ {$NOTE These exception messages need to become resource strings }
+ if not Assigned(FMimeData) then
+ raise Exception.Create(ClassName + ': No mimedata was set before starting the drag');
+ if not Assigned(FSource) then
+ raise Exception.Create(ClassName + ': No Source window was specified before starting the drag');
+ if ADropActions = [] then
+ raise Exception.Create(ClassName + ': No Drop Action was specified');
+ inherited Execute(ADropActions, ADefaultAction);
+end;
+
+
+
initialization
uApplication := nil;
uClipboard := nil;
diff --git a/src/corelib/fpg_msgqueue.inc b/src/corelib/fpg_msgqueue.inc
index 386178d9..00862cc1 100644
--- a/src/corelib/fpg_msgqueue.inc
+++ b/src/corelib/fpg_msgqueue.inc
@@ -86,10 +86,15 @@ end;
function fpgGetFirstMessage: PfpgMessageRec;
begin
- if UsedFirstMessage <> nil then
- Result := @(UsedFirstMessage.msg)
- else
- Result := nil;
+ fpgApplication.Lock;
+ try
+ if UsedFirstMessage <> nil then
+ Result := @(UsedFirstMessage.msg)
+ else
+ Result := nil;
+ finally
+ fpgApplication.Unlock;
+ end;
end;
procedure fpgInitMsgQueue;
diff --git a/src/corelib/fpg_stdimages.pas b/src/corelib/fpg_stdimages.pas
index 2682ce3f..b25890ad 100644
--- a/src/corelib/fpg_stdimages.pas
+++ b/src/corelib/fpg_stdimages.pas
@@ -72,25 +72,25 @@ procedure fpgCreateStandardImages;
begin
// system images. Change these to the composite arrow bmp that includes
// disabled state
- fpgImages.AddBMP(
+ fpgImages.AddMaskedBMP( // 7x4 image
'sys.sb.up',
@stdimg_arrow_up,
- sizeof(stdimg_arrow_up));
+ sizeof(stdimg_arrow_up), 0, 0);
- fpgImages.AddBMP(
+ fpgImages.AddMaskedBMP( // 7x4 image
'sys.sb.down',
@stdimg_arrow_down,
- sizeof(stdimg_arrow_down));
+ sizeof(stdimg_arrow_down), 0, 3);
- fpgImages.AddBMP(
+ fpgImages.AddMaskedBMP( // 4x7 image
'sys.sb.left',
@stdimg_arrow_left,
- sizeof(stdimg_arrow_left));
+ sizeof(stdimg_arrow_left), 0, 0);
- fpgImages.AddBMP(
+ fpgImages.AddMaskedBMP( // 4x7 image
'sys.sb.right',
@stdimg_arrow_right,
- sizeof(stdimg_arrow_right));
+ sizeof(stdimg_arrow_right), 3, 0);
fpgImages.AddMaskedBMP( // 60x12 in total. 5 images of 12x12 each.
'sys.radiobuttons',
@@ -225,6 +225,16 @@ begin
sizeof(stdimg_folder_open_file_16), 0,0);
fpgImages.AddMaskedBMP(
+ 'stdimg.folderhome',
+ @stdimg_folder_home_16,
+ sizeof(stdimg_folder_home_16), 0,0);
+
+ fpgImages.AddMaskedBMP(
+ 'stdimg.bookmark',
+ @stdimg_bookmark_16,
+ sizeof(stdimg_bookmark_16), 0,0);
+
+ fpgImages.AddMaskedBMP(
'stdimg.open',
@stdimg_folder_open_16,
sizeof(stdimg_folder_open_16), 0,0);
@@ -250,6 +260,11 @@ begin
sizeof(stdimg_help_16), 0,0);
fpgImages.AddMaskedBMP(
+ 'stdimg.about',
+ @stdimg_about_16,
+ sizeof(stdimg_about_16), 0,0);
+
+ fpgImages.AddMaskedBMP(
'stdimg.hidden',
@stdimg_hidden,
sizeof(stdimg_hidden), 0,0);
diff --git a/src/corelib/fpg_stringutils.pas b/src/corelib/fpg_stringutils.pas
index f97f1b61..e4d75f86 100644
--- a/src/corelib/fpg_stringutils.pas
+++ b/src/corelib/fpg_stringutils.pas
@@ -25,6 +25,9 @@ interface
uses
Classes, SysUtils, fpg_base;
+type
+ TCharToUTF8Table = array[char] of PChar;
+
function UTF8CharacterLength(p: PChar): integer;
function UTF8CharStart(UTF8Str: PChar; Len, Index: integer): PChar;
@@ -34,7 +37,7 @@ function UTF8Length(const s: string): integer;
function UTF8Length(p: PChar; ByteCount: integer): integer;
function UTF8Pos(const SearchForText, SearchInText: string): integer;
procedure UTF8Delete(var S: string; Index, Size: integer);
-procedure UTF8Insert(const Source: string; var S: string; Index: integer);
+procedure UTF8Insert(const SubStr: string; var AText: string; Index: integer);
function UTF8CharAtByte(const s: string; const BytePos: integer; out aChar: string): integer;
@@ -48,6 +51,16 @@ procedure Insert8(const Source: string; var S: string; Index: integer);
function fpgCharAt(const s: TfpgString; Index: integer): TfpgChar;
function fpgAppendPathDelim(const Path: TfpgString): TfpgString;
function fpgRemovePathDelim(const Path: TfpgString): TfpgString;
+function fpgTrimR(const AString, ATrim: TfpgString; ACaseSensitive: boolean = false): TfpgString;
+
+
+// Encoding conversions
+function CP437ToUTF8(const s: string): TfpgString; // DOS central europe
+function CP850ToUTF8(const s: string): TfpgString; // DOS western europe
+function IBMGraphToUTF8(const s: string): TfpgString; // IBM PC / DOS http://www.unicode.org/Public/MAPPINGS/VENDORS/MISC/IBMGRAPH.TXT
+function IPFToUTF8(const s: string): TfpgString; // minor replacements to improve DocView output
+function SingleByteToUTF8(const s: string; const Table: TCharToUTF8Table): TfpgString;
+
implementation
@@ -261,16 +274,16 @@ begin
S := b + e;
end;
-procedure UTF8Insert(const Source: string; var S: string; Index: integer);
+procedure UTF8Insert(const SubStr: string; var AText: string; Index: integer);
var
b: string;
e: string;
begin
- if UTF8Length(Source) = 0 then
+ if UTF8Length(SubStr) = 0 then
Exit; //==>
- b := UTF8Copy(S, 1, Index-1); // beginning string
- e := UTF8Copy(S, Index, UTF8Length(S)-Index+1); // ending string
- S := b + Source + e;
+ b := UTF8Copy(AText, 1, Index-1); // beginning string
+ e := UTF8Copy(AText, Index, UTF8Length(AText)-Index+1); // ending string
+ AText := b + SubStr + e;
end;
function UTF8CharAtByte(const s: string; const BytePos: integer; out aChar: string): integer;
@@ -335,5 +348,1161 @@ begin
Result := Path;
end;
+function fpgTrimR(const AString, ATrim: TfpgString; ACaseSensitive: boolean): TfpgString;
+var
+ li: integer;
+begin
+ if ACaseSensitive then
+ li := UTF8Pos(ATrim, AString)
+ else
+ li := UTF8Pos(UpperCase(ATrim), UpperCase(AString));
+
+ if li <> 0 then
+ Result := UTF8Copy(AString, 1, li - 1)
+ else
+ Result := AString;
+end;
+
+const
+ ArrayCP437ToUTF8 : TCharToUTF8Table = (
+ #0, // #0
+ #1, // #1
+ #2, // #2
+ #3, // #3
+ #4, // #4
+ #5, // #5
+ #6, // #6
+ #$E2#$80#$A2, // #7 bullet
+ #8, // #8
+ #9, // #9
+ #10, // #10
+ #11, // #11
+ #12, // #12
+ #13, // #13
+ #14, // #14
+ #15, // #15
+ #16, // #16
+ #17, // #17
+ #18, // #18
+ #19, // #19
+ #20, // #20
+ #21, // #21
+ #22, // #22
+ #23, // #23
+ #$E2#$86#$91, // #24 up arrow
+ #$E2#$86#$93, // #25 down arrow
+ #$E2#$86#$92, // #26 right arrow
+ #$E2#$86#$90, // #27 left arrow
+ #28, // #28
+ #29, // #29
+ #30, // #30
+ #31, // #31
+ ' ', // ' '
+ '!', // '!'
+ '"', // '"'
+ '#', // '#'
+ '$', // '$'
+ '%', // '%'
+ '&', // '&'
+ '''', // ''''
+ '(', // '('
+ ')', // ')'
+ '*', // '*'
+ '+', // '+'
+ ',', // ','
+ '-', // '-'
+ '.', // '.'
+ '/', // '/'
+ '0', // '0'
+ '1', // '1'
+ '2', // '2'
+ '3', // '3'
+ '4', // '4'
+ '5', // '5'
+ '6', // '6'
+ '7', // '7'
+ '8', // '8'
+ '9', // '9'
+ ':', // ':'
+ ';', // ';'
+ '<', // '<'
+ '=', // '='
+ '>', // '>'
+ '?', // '?'
+ '@', // '@'
+ 'A', // 'A'
+ 'B', // 'B'
+ 'C', // 'C'
+ 'D', // 'D'
+ 'E', // 'E'
+ 'F', // 'F'
+ 'G', // 'G'
+ 'H', // 'H'
+ 'I', // 'I'
+ 'J', // 'J'
+ 'K', // 'K'
+ 'L', // 'L'
+ 'M', // 'M'
+ 'N', // 'N'
+ 'O', // 'O'
+ 'P', // 'P'
+ 'Q', // 'Q'
+ 'R', // 'R'
+ 'S', // 'S'
+ 'T', // 'T'
+ 'U', // 'U'
+ 'V', // 'V'
+ 'W', // 'W'
+ 'X', // 'X'
+ 'Y', // 'Y'
+ 'Z', // 'Z'
+ '[', // '['
+ '\', // '\'
+ ']', // ']'
+ '^', // '^'
+ '_', // '_'
+ '`', // '`'
+ 'a', // 'a'
+ 'b', // 'b'
+ 'c', // 'c'
+ 'd', // 'd'
+ 'e', // 'e'
+ 'f', // 'f'
+ 'g', // 'g'
+ 'h', // 'h'
+ 'i', // 'i'
+ 'j', // 'j'
+ 'k', // 'k'
+ 'l', // 'l'
+ 'm', // 'm'
+ 'n', // 'n'
+ 'o', // 'o'
+ 'p', // 'p'
+ 'q', // 'q'
+ 'r', // 'r'
+ 's', // 's'
+ 't', // 't'
+ 'u', // 'u'
+ 'v', // 'v'
+ 'w', // 'w'
+ 'x', // 'x'
+ 'y', // 'y'
+ 'z', // 'z'
+ '{', // '{'
+ '|', // '|'
+ '}', // '}'
+ '~', // '~'
+ #127, // #127
+ #195#135, // #128
+ #195#188, // #129
+ #195#169, // #130
+ #195#162, // #131
+ #195#164, // #132
+ #195#160, // #133
+ #195#165, // #134
+ #195#167, // #135
+ #195#170, // #136
+ #195#171, // #137
+ #195#168, // #138
+ #195#175, // #139
+ #195#174, // #140
+ #195#172, // #141
+ #195#132, // #142
+ #195#133, // #143
+ #195#137, // #144
+ #195#166, // #145
+ #195#134, // #146
+ #195#180, // #147
+ #195#182, // #148
+ #195#178, // #149
+ #195#187, // #150
+ #195#185, // #151
+ #195#191, // #152
+ #195#150, // #153
+ #195#156, // #154
+ #194#162, // #155
+ #194#163, // #156
+ #194#165, // #157
+ #226#130#167, // #158
+ #198#146, // #159
+ #195#161, // #160
+ #195#173, // #161
+ #195#179, // #162
+ #195#186, // #163
+ #195#177, // #164
+ #195#145, // #165
+ #194#170, // #166
+ #194#186, // #167
+ #194#191, // #168
+ #226#140#144, // #169
+ #194#172, // #170
+ #194#189, // #171
+ #194#188, // #172
+ #194#161, // #173
+ #194#171, // #174
+ #194#187, // #175
+ #226#150#145, // #176
+ #226#150#146, // #177
+ #226#150#147, // #178
+ #226#148#130, // #179
+ #226#148#164, // #180
+ #226#149#161, // #181
+ #226#149#162, // #182
+ #226#149#150, // #183
+ #226#149#149, // #184
+ #226#149#163, // #185
+ #226#149#145, // #186
+ #226#149#151, // #187
+ #226#149#157, // #188
+ #226#149#156, // #189
+ #226#149#155, // #190
+ #226#148#144, // #191
+ #226#148#148, // #192
+ #226#148#180, // #193
+ #226#148#172, // #194
+ #226#148#156, // #195
+ #226#148#128, // #196
+ #226#148#188, // #197
+ #226#149#158, // #198
+ #226#149#159, // #199
+ #226#149#154, // #200
+ #226#149#148, // #201
+ #226#149#169, // #202
+ #226#149#166, // #203
+ #226#149#160, // #204
+ #226#149#144, // #205
+ #226#149#172, // #206
+ #226#149#167, // #207
+ #226#149#168, // #208
+ #226#149#164, // #209
+ #226#149#165, // #210
+ #226#149#153, // #211
+ #226#149#152, // #212
+ #226#149#146, // #213
+ #226#149#147, // #214
+ #226#149#171, // #215
+ #226#149#170, // #216
+ #226#148#152, // #217
+ #226#148#140, // #218
+ #226#150#136, // #219
+ #226#150#132, // #220
+ #226#150#140, // #221
+ #226#150#144, // #222
+ #226#150#128, // #223
+ #206#177, // #224
+ #195#159, // #225
+ #206#147, // #226
+ #207#128, // #227
+ #206#163, // #228
+ #207#131, // #229
+ #194#181, // #230
+ #207#132, // #231
+ #206#166, // #232
+ #206#152, // #233
+ #206#169, // #234
+ #206#180, // #235
+ #226#136#158, // #236
+ #207#134, // #237
+ #206#181, // #238
+ #226#136#169, // #239
+ #226#137#161, // #240
+ #194#177, // #241
+ #226#137#165, // #242
+ #226#137#164, // #243
+ #226#140#160, // #244
+ #226#140#161, // #245
+ #195#183, // #246
+ #226#137#136, // #247
+ #194#176, // #248
+ #226#136#153, // #249
+ #194#183, // #250
+ #226#136#154, // #251
+ #226#129#191, // #252
+ #194#178, // #253
+ #226#150#160, // #254
+ #194#160 // #255
+ );
+
+ ArrayCP850ToUTF8 : TCharToUTF8Table = (
+ #0, // #0
+ #1, // #1
+ #2, // #2
+ #3, // #3
+ #4, // #4
+ #5, // #5
+ #6, // #6
+ #$E2#$80#$A2, // #7 bullet
+ #8, // #8
+ #9, // #9
+ #10, // #10
+ #11, // #11
+ #12, // #12
+ #13, // #13
+ #14, // #14
+ #15, // #15
+ #16, // #16
+ #17, // #17
+ #18, // #18
+ #19, // #19
+ #20, // #20
+ #21, // #21
+ #22, // #22
+ #23, // #23
+ #24, // #24
+ #25, // #25
+ #26, // #26
+ #27, // #27
+ #28, // #28
+ #29, // #29
+ #30, // #30
+ #31, // #31
+ ' ', // ' '
+ '!', // '!'
+ '"', // '"'
+ '#', // '#'
+ '$', // '$'
+ '%', // '%'
+ '&', // '&'
+ '''', // ''''
+ '(', // '('
+ ')', // ')'
+ '*', // '*'
+ '+', // '+'
+ ',', // ','
+ '-', // '-'
+ '.', // '.'
+ '/', // '/'
+ '0', // '0'
+ '1', // '1'
+ '2', // '2'
+ '3', // '3'
+ '4', // '4'
+ '5', // '5'
+ '6', // '6'
+ '7', // '7'
+ '8', // '8'
+ '9', // '9'
+ ':', // ':'
+ ';', // ';'
+ '<', // '<'
+ '=', // '='
+ '>', // '>'
+ '?', // '?'
+ '@', // '@'
+ 'A', // 'A'
+ 'B', // 'B'
+ 'C', // 'C'
+ 'D', // 'D'
+ 'E', // 'E'
+ 'F', // 'F'
+ 'G', // 'G'
+ 'H', // 'H'
+ 'I', // 'I'
+ 'J', // 'J'
+ 'K', // 'K'
+ 'L', // 'L'
+ 'M', // 'M'
+ 'N', // 'N'
+ 'O', // 'O'
+ 'P', // 'P'
+ 'Q', // 'Q'
+ 'R', // 'R'
+ 'S', // 'S'
+ 'T', // 'T'
+ 'U', // 'U'
+ 'V', // 'V'
+ 'W', // 'W'
+ 'X', // 'X'
+ 'Y', // 'Y'
+ 'Z', // 'Z'
+ '[', // '['
+ '\', // '\'
+ ']', // ']'
+ '^', // '^'
+ '_', // '_'
+ '`', // '`'
+ 'a', // 'a'
+ 'b', // 'b'
+ 'c', // 'c'
+ 'd', // 'd'
+ 'e', // 'e'
+ 'f', // 'f'
+ 'g', // 'g'
+ 'h', // 'h'
+ 'i', // 'i'
+ 'j', // 'j'
+ 'k', // 'k'
+ 'l', // 'l'
+ 'm', // 'm'
+ 'n', // 'n'
+ 'o', // 'o'
+ 'p', // 'p'
+ 'q', // 'q'
+ 'r', // 'r'
+ 's', // 's'
+ 't', // 't'
+ 'u', // 'u'
+ 'v', // 'v'
+ 'w', // 'w'
+ 'x', // 'x'
+ 'y', // 'y'
+ 'z', // 'z'
+ '{', // '{'
+ '|', // '|'
+ '}', // '}'
+ '~', // '~'
+ #127, // #127
+ #195#135, // #128
+ #195#188, // #129
+ #195#169, // #130
+ #195#162, // #131
+ #195#164, // #132
+ #195#160, // #133
+ #195#165, // #134
+ #195#167, // #135
+ #195#170, // #136
+ #195#171, // #137
+ #195#168, // #138
+ #195#175, // #139
+ #195#174, // #140
+ #195#172, // #141
+ #195#132, // #142
+ #195#133, // #143
+ #195#137, // #144
+ #195#166, // #145
+ #195#134, // #146
+ #195#180, // #147
+ #195#182, // #148
+ #195#178, // #149
+ #195#187, // #150
+ #195#185, // #151
+ #195#191, // #152
+ #195#150, // #153
+ #195#156, // #154
+ #195#184, // #155
+ #194#163, // #156
+ #195#152, // #157
+ #195#151, // #158
+ #198#146, // #159
+ #195#161, // #160
+ #195#173, // #161
+ #195#179, // #162
+ #195#186, // #163
+ #195#177, // #164
+ #195#145, // #165
+ #194#170, // #166
+ #194#186, // #167
+ #194#191, // #168
+ #194#174, // #169
+ #194#172, // #170
+ #194#189, // #171
+ #194#188, // #172
+ #194#161, // #173
+ #194#171, // #174
+ #194#187, // #175
+ #226#150#145, // #176
+ #226#150#146, // #177
+ #226#150#147, // #178
+ #226#148#130, // #179
+ #226#148#164, // #180
+ #195#129, // #181
+ #195#130, // #182
+ #195#128, // #183
+ #194#169, // #184
+ #226#149#163, // #185
+ #226#149#145, // #186
+ #226#149#151, // #187
+ #226#149#157, // #188
+ #194#162, // #189
+ #194#165, // #190
+ #226#148#144, // #191
+ #226#148#148, // #192
+ #226#148#180, // #193
+ #226#148#172, // #194
+ #226#148#156, // #195
+ #226#148#128, // #196
+ #226#148#188, // #197
+ #195#163, // #198
+ #195#131, // #199
+ #226#149#154, // #200
+ #226#149#148, // #201
+ #226#149#169, // #202
+ #226#149#166, // #203
+ #226#149#160, // #204
+ #226#149#144, // #205
+ #226#149#172, // #206
+ #194#164, // #207
+ #195#176, // #208
+ #195#144, // #209
+ #195#138, // #210
+ #195#139, // #211
+ #195#136, // #212
+ #196#177, // #213
+ #195#141, // #214
+ #195#142, // #215
+ #195#143, // #216
+ #226#148#152, // #217
+ #226#148#140, // #218
+ #226#150#136, // #219
+ #226#150#132, // #220
+ #194#166, // #221
+ #195#140, // #222
+ #226#150#128, // #223
+ #195#147, // #224
+ #195#159, // #225
+ #195#148, // #226
+ #195#146, // #227
+ #195#181, // #228
+ #195#149, // #229
+ #194#181, // #230
+ #195#190, // #231
+ #195#158, // #232
+ #195#154, // #233
+ #195#155, // #234
+ #195#153, // #235
+ #195#189, // #236
+ #195#157, // #237
+ #194#175, // #238
+ #194#180, // #239
+ #194#173, // #240
+ #194#177, // #241
+ #226#128#151, // #242
+ #194#190, // #243
+ #194#182, // #244
+ #194#167, // #245
+ #195#183, // #246
+ #194#184, // #247
+ #194#176, // #248
+ #194#168, // #249
+ #194#183, // #250
+ #194#185, // #251
+ #194#179, // #252
+ #194#178, // #253
+ #226#150#160, // #254
+ #194#160 // #255
+ );
+
+
+
+ ArrayIBMGraphToUTF8: TCharToUTF8Table = (
+ #0, // #0
+ #1, // #1
+ #2, // #2
+ #3, // #3
+ #4, // #4
+ #5, // #5
+ #6, // #6
+ #$E2#$80#$A2, // #7 bullet
+ #8, // #8
+ #9, // #9
+ #10, // #10
+ #11, // #11
+ #12, // #12
+ #13, // #13
+ #14, // #14
+ #15, // #15
+ #16, // #16
+ #$E2#$86#$90, // #17
+ #18, // #18
+ #19, // #19
+ #20, // #20
+ #21, // #21
+ #22, // #22
+ #23, // #23
+ #$E2#$86#$91, // #24 up arrow
+ #$E2#$86#$93, // #25 down arrow
+ #$E2#$86#$92, // #26 right arrow
+ #$E2#$86#$90, // #27 left arrow
+ #28, // #28
+ #29, // #29 left arrow
+ #30, // #30
+ #31, // #31
+ ' ', // ' '
+ '!', // '!'
+ '"', // '"'
+ '#', // '#'
+ '$', // '$'
+ '%', // '%'
+ '&', // '&'
+ '''', // ''''
+ '(', // '('
+ ')', // ')'
+ '*', // '*'
+ '+', // '+'
+ ',', // ','
+ '-', // '-'
+ '.', // '.'
+ '/', // '/'
+ '0', // '0'
+ '1', // '1'
+ '2', // '2'
+ '3', // '3'
+ '4', // '4'
+ '5', // '5'
+ '6', // '6'
+ '7', // '7'
+ '8', // '8'
+ '9', // '9'
+ ':', // ':'
+ ';', // ';'
+ '<', // '<'
+ '=', // '='
+ '>', // '>'
+ '?', // '?'
+ '@', // '@'
+ 'A', // 'A'
+ 'B', // 'B'
+ 'C', // 'C'
+ 'D', // 'D'
+ 'E', // 'E'
+ 'F', // 'F'
+ 'G', // 'G'
+ 'H', // 'H'
+ 'I', // 'I'
+ 'J', // 'J'
+ 'K', // 'K'
+ 'L', // 'L'
+ 'M', // 'M'
+ 'N', // 'N'
+ 'O', // 'O'
+ 'P', // 'P'
+ 'Q', // 'Q'
+ 'R', // 'R'
+ 'S', // 'S'
+ 'T', // 'T'
+ 'U', // 'U'
+ 'V', // 'V'
+ 'W', // 'W'
+ 'X', // 'X'
+ 'Y', // 'Y'
+ 'Z', // 'Z'
+ '[', // '['
+ '\', // '\'
+ ']', // ']'
+ '^', // '^'
+ '_', // '_'
+ '`', // '`'
+ 'a', // 'a'
+ 'b', // 'b'
+ 'c', // 'c'
+ 'd', // 'd'
+ 'e', // 'e'
+ 'f', // 'f'
+ 'g', // 'g'
+ 'h', // 'h'
+ 'i', // 'i'
+ 'j', // 'j'
+ 'k', // 'k'
+ 'l', // 'l'
+ 'm', // 'm'
+ 'n', // 'n'
+ 'o', // 'o'
+ 'p', // 'p'
+ 'q', // 'q'
+ 'r', // 'r'
+ 's', // 's'
+ 't', // 't'
+ 'u', // 'u'
+ 'v', // 'v'
+ 'w', // 'w'
+ 'x', // 'x'
+ 'y', // 'y'
+ 'z', // 'z'
+ '{', // '{'
+ '|', // '|'
+ '}', // '}'
+ '~', // '~'
+ #127, // #127
+ #195#135, // #128
+ #195#188, // #129
+ #195#169, // #130
+ #195#162, // #131
+ #195#164, // #132
+ #195#160, // #133
+ #195#165, // #134
+ #195#167, // #135
+ #195#170, // #136
+ #195#171, // #137
+ #195#168, // #138
+ #195#175, // #139
+ #195#174, // #140
+ #195#172, // #141
+ #195#132, // #142
+ #195#133, // #143
+ #195#137, // #144
+ #195#166, // #145
+ #195#134, // #146
+ #195#180, // #147
+ #195#182, // #148
+ #195#178, // #149
+ #195#187, // #150
+ #195#185, // #151
+ #195#191, // #152
+ #195#150, // #153
+ #195#156, // #154
+ #194#162, // #155
+ #194#163, // #156
+ #194#165, // #157
+ #226#130#167, // #158
+ #198#146, // #159
+ #195#161, // #160
+ #195#173, // #161
+ #195#179, // #162
+ #195#186, // #163
+ #195#177, // #164
+ #195#145, // #165
+ #194#170, // #166
+ #194#186, // #167
+ #194#191, // #168
+ #226#140#144, // #169
+ #194#172, // #170
+ #194#189, // #171
+ #194#188, // #172
+ #194#161, // #173
+ #194#171, // #174
+ #194#187, // #175
+ #226#150#145, // #176
+ #226#150#146, // #177
+ #226#150#147, // #178
+ #226#148#130, // #179
+ #226#148#164, // #180
+ #226#149#161, // #181
+ #226#149#162, // #182
+ #226#149#150, // #183
+ #226#149#149, // #184
+ #226#149#163, // #185
+ #226#149#145, // #186
+ #226#149#151, // #187
+ #226#149#157, // #188
+ #226#149#156, // #189
+ #226#149#155, // #190
+ #226#148#144, // #191
+ #226#148#148, // #192
+ #226#148#180, // #193
+ #226#148#172, // #194
+ #226#148#156, // #195
+ #226#148#128, // #196
+ #226#148#188, // #197
+ #226#149#158, // #198
+ #226#149#159, // #199
+ #226#149#154, // #200
+ #226#149#148, // #201
+ #226#149#169, // #202
+ #226#149#166, // #203
+ #226#149#160, // #204
+ #226#149#144, // #205
+ #226#149#172, // #206
+ #226#149#167, // #207
+ #226#149#168, // #208
+ #226#149#164, // #209
+ #226#149#165, // #210
+ #226#149#153, // #211
+ #226#149#152, // #212
+ #226#149#146, // #213
+ #226#149#147, // #214
+ #226#149#171, // #215
+ #226#149#170, // #216
+ #226#148#152, // #217
+ #226#148#140, // #218
+ #226#150#136, // #219
+ #226#150#132, // #220
+ #226#150#140, // #221
+ #226#150#144, // #222
+ #226#150#128, // #223
+ #206#177, // #224
+ #195#159, // #225
+ #206#147, // #226
+ #207#128, // #227
+ #206#163, // #228
+ #207#131, // #229
+ #194#181, // #230
+ #207#132, // #231
+ #206#166, // #232
+ #206#152, // #233
+ #206#169, // #234
+ #206#180, // #235
+ #226#136#158, // #236
+ #207#134, // #237
+ #206#181, // #238
+ #226#136#169, // #239
+ #226#137#161, // #240
+ #194#177, // #241
+ #226#137#165, // #242
+ #226#137#164, // #243
+ #226#140#160, // #244
+ #226#140#161, // #245
+ #195#183, // #246
+ #226#137#136, // #247
+ #194#176, // #248
+ #226#136#153, // #249
+ #194#183, // #250
+ #226#136#154, // #251
+ #226#129#191, // #252
+ #194#178, // #253
+ #226#150#160, // #254
+ #194#160 // #255
+ );
+
+ ArrayIPFToUTF8 : TCharToUTF8Table = (
+ #0, // #0
+ #1, // #1
+ #2, // #2
+ #3, // #3
+ #4, // #4
+ #5, // #5
+ #6, // #6
+ #$E2#$80#$A2, // #7 bullet (hard-coded in IPF Compiler)
+ #8, // #8
+ #9, // #9
+ #10, // #10
+ #$E2#$97#$84, // #11
+ #12, // #12
+ #13, // #13
+ #14, // #14
+ #15, // #15
+ '>', // #16
+ '<', // #17
+ #18, // #18
+ #19, // #19
+ #20, // #20
+ #21, // #21
+ #22, // #22
+ #23, // #23
+ #24, // #24 up arrow
+ #25, // #25 down arrow
+ #26, // #26 right arrow
+ #27, // #27 left arrow
+ #28, // #28
+ #29, // #29
+ #30, // #30
+ #31, // #31
+ ' ', // ' '
+ '!', // '!'
+ '"', // '"'
+ '#', // '#'
+ '$', // '$'
+ '%', // '%'
+ '&', // '&'
+ '''', // ''''
+ '(', // '('
+ ')', // ')'
+ '*', // '*'
+ '+', // '+'
+ ',', // ','
+ '-', // '-'
+ '.', // '.'
+ '/', // '/'
+ '0', // '0'
+ '1', // '1'
+ '2', // '2'
+ '3', // '3'
+ '4', // '4'
+ '5', // '5'
+ '6', // '6'
+ '7', // '7'
+ '8', // '8'
+ '9', // '9'
+ ':', // ':'
+ ';', // ';'
+ '<', // '<'
+ '=', // '='
+ '>', // '>'
+ '?', // '?'
+ '@', // '@'
+ 'A', // 'A'
+ 'B', // 'B'
+ 'C', // 'C'
+ 'D', // 'D'
+ 'E', // 'E'
+ 'F', // 'F'
+ 'G', // 'G'
+ 'H', // 'H'
+ 'I', // 'I'
+ 'J', // 'J'
+ 'K', // 'K'
+ 'L', // 'L'
+ 'M', // 'M'
+ 'N', // 'N'
+ 'O', // 'O'
+ 'P', // 'P'
+ 'Q', // 'Q'
+ 'R', // 'R'
+ 'S', // 'S'
+ 'T', // 'T'
+ 'U', // 'U'
+ 'V', // 'V'
+ 'W', // 'W'
+ 'X', // 'X'
+ 'Y', // 'Y'
+ 'Z', // 'Z'
+ '[', // '['
+ '\', // '\'
+ ']', // ']'
+ '^', // '^'
+ '_', // '_'
+ '`', // '`'
+ 'a', // 'a'
+ 'b', // 'b'
+ 'c', // 'c'
+ 'd', // 'd'
+ 'e', // 'e'
+ 'f', // 'f'
+ 'g', // 'g'
+ 'h', // 'h'
+ 'i', // 'i'
+ 'j', // 'j'
+ 'k', // 'k'
+ 'l', // 'l'
+ 'm', // 'm'
+ 'n', // 'n'
+ 'o', // 'o'
+ 'p', // 'p'
+ 'q', // 'q'
+ 'r', // 'r'
+ 's', // 's'
+ 't', // 't'
+ 'u', // 'u'
+ 'v', // 'v'
+ 'w', // 'w'
+ 'x', // 'x'
+ 'y', // 'y'
+ 'z', // 'z'
+ '{', // '{'
+ '|', // '|'
+ '}', // '}'
+ '~', // '~'
+ #$E2#$8C#$82, // #127 house
+ #128, // #195#135
+ #129, // #195#188
+ #130, // #195#169
+ #131, // #195#162
+ #132, // #195#164
+ #133, // #195#160
+ #134, // #195#165
+ #135, // #195#167
+ #136, // #195#170
+ #137, // #195#171
+ #138, // #195#168
+ #139, // #195#175
+ #140, // #195#174
+ #141, // #195#172
+ #142, // #195#132
+ #143, // #195#133
+ #144, // #195#137
+ #145, // #195#166
+ #146, // #195#134
+ #147, // #195#180
+ #148, // #195#182
+ #149, // #195#178
+ #150, // #195#187
+ #151, // #195#185
+ #152, // #195#191
+ #153, // #195#150
+ #154, // #195#156
+ #155, // #194#162
+ #156, // #194#163
+ #157, // #194#165
+ #158, // #226#130#167
+ #159, // #198#146
+ #160, // #195#161
+ #161, // #195#173
+ #162, // #195#179
+ #163, // #195#186
+ #164, // #195#177
+ #165, // #195#145
+ #166, // #194#170
+ #167, // #194#186
+ #168, // #194#191
+ #169, // #226#140#144
+ #170, // #194#172
+ #171, // #194#189
+ #172, // #194#188
+ #173, // #194#161
+ #174, // #194#171
+ #175, // #194#187
+ #176, // #226#150#145
+ #177, // #226#150#146
+ #178, // #226#150#147
+ #179, // #226#148#130
+ #180, // #226#148#164
+ #181, // #226#149#161
+ #182, // #226#149#162
+ #183, // #226#149#150
+ #184, // #226#149#149
+ #185, // #226#149#163
+ #186, // #226#149#145
+ #187, // #226#149#151
+ #188, // #226#149#157
+ #189, // #226#149#156
+ #190, // #226#149#155
+ #191, // #226#148#144
+ #192, // #226#148#148
+ #193, // #226#148#180
+ #$E2#$94#$AC, // #226#148#172
+ #195, // #226#148#156
+ #$E2#$94#$80, // #196
+ #197, // #226#148#188
+ #198, // #226#149#158
+ #199, // #226#149#159
+ #200, // #226#149#154
+ #201, // #226#149#148
+ #202, // #226#149#169
+ #203, // #226#149#166
+ #204, // #226#149#160
+ #205, // #226#149#144
+ #206, // #226#149#172
+ #207, // #226#149#167
+ #208, // #226#149#168
+ #209, // #226#149#164
+ #210, // #226#149#165
+ #211, // #226#149#153
+ #212, // #226#149#152
+ #213, // #226#149#146
+ #214, // #226#149#147
+ #215, // #226#149#171
+ #216, // #226#149#170
+ #217, // #226#148#152
+ #218, // #226#148#140
+ #219, // #226#150#136
+ #220, // #226#150#132
+ #221, // #226#150#140
+ #222, // #226#150#144
+ #223, // #226#150#128
+ #224, // #206#177
+ #225, // #195#159
+ #226, // #206#147
+ #227, // #207#128
+ #228, // #206#163
+ #229, // #207#131
+ #230, // #194#181
+ #231, // #207#132
+ #232, // #206#166
+ #233, // #206#152
+ #234, // #206#169
+ #235, // #206#180
+ #236, // #226#136#158
+ #237, // #207#134
+ #238, // #206#181
+ #239, // #226#136#169
+ #240, // #226#137#161
+ #241, // #194#177
+ #242, // #226#137#165
+ #243, // #226#137#164
+ #244, // #226#140#160
+ #245, // #226#140#161
+ #246, // #195#183
+ #247, // #226#137#136
+ #248, // #194#176
+ #249, // #226#136#153
+ #250, // #194#183
+ #251, // #226#136#154
+ #252, // #226#129#191
+ #253, // #194#178
+ #254, // #226#150#160
+ #255 // #194#160
+ );
+
+
+function CP437ToUTF8(const s: string): TfpgString;
+begin
+ Result := SingleByteToUTF8(s, ArrayCP437ToUTF8);
+end;
+
+function CP850ToUTF8(const s: string): TfpgString;
+begin
+ Result := SingleByteToUTF8(s, ArrayCP850ToUTF8);
+end;
+
+function IBMGraphToUTF8(const s: string): TfpgString;
+begin
+ Result := SingleByteToUTF8(s, ArrayIBMGraphToUTF8);
+end;
+
+function IPFToUTF8(const s: string): TfpgString;
+ // Seaches <AValue> and replaces <ADel> with <AIns>. Case sensitive.
+ function tiStrTran(AValue, ADel, AIns : string): string;
+ var
+ i : integer;
+ sToChange : string;
+ begin
+ result := '';
+ sToChange := AValue;
+ i := UTF8Pos(ADel, sToChange);
+ while i <> 0 do
+ begin
+ result := result + UTF8Copy(sToChange, 1, i-1) + AIns;
+ UTF8Delete(sToChange, 1, i+UTF8length(ADel)-1);
+ i := UTF8Pos(ADel, sToChange);
+ end;
+ result := result + sToChange;
+ end;
+
+begin
+ // IBM Graph CodePage 437 (kind-of) to Unicode mapping.
+ // Below is what we had before this function
+ Result := SingleByteToUTF8(s, ArrayIPFToUTF8);
+ //Result := s;
+ //Result := StringReplace(Result, Chr($07), #$E2#$80#$A2, [rfReplaceAll, rfIgnoreCase]); // u+2022 small bullet
+ //Result := tiStrTran(Result, Char(16), '>' );
+ //Result := tiStrTran(Result, Char(17), '<' );
+ //Result := tiStrTran(Result, Char($1f), '▼' );
+ //Result := tiStrTran(Result, Char(179), '│' );
+ //Result := tiStrTran(Result, Char(180), '┤' );
+ //Result := tiStrTran(Result, Char(191), '┐' );
+ //Result := tiStrTran(Result, Char(192), '└' );
+ //Result := tiStrTran(Result, Char(193), '┴' );
+ //Result := tiStrTran(Result, Char(194), '┬' );
+ //Result := tiStrTran(Result, Char(195), '├' );
+ //Result := tiStrTran(Result, Char(196), '─' );
+ //Result := tiStrTran(Result, Char(197), '┼' );
+ //Result := tiStrTran(Result, Char(217), '┘' );
+ //Result := tiStrTran(Result, Char(218), '┌' );
+end;
+
+function SingleByteToUTF8(const s: string; const Table: TCharToUTF8Table): TfpgString;
+var
+ len: Integer;
+ i: Integer;
+ Src: PChar;
+ Dest: PChar;
+ p: PChar;
+ c: Char;
+begin
+ if s='' then
+ begin
+ Result := s;
+ exit;
+ end;
+ len := length(s);
+ SetLength(Result, len*4); // UTF-8 is at most 4 bytes
+ Src := PChar(s);
+ Dest := PChar(Result);
+ for i := 1 to len do
+ begin
+ c := Src^;
+ inc(Src);
+ //if ord(c) < 128 then
+ //begin
+ // Dest^ := c;
+ // inc(Dest);
+ //end
+ //else
+ begin
+ p := Table[c];
+ if p <> nil then
+ begin
+ while p^ <> #0 do
+ begin
+ Dest^ := p^;
+ inc(p);
+ inc(Dest);
+ end;
+ end;
+ end;
+ end;
+ SetLength(Result, PtrUInt(Dest)-PtrUInt(Result));
+end;
+
+
end.
diff --git a/src/corelib/fpg_utils.pas b/src/corelib/fpg_utils.pas
index d4d7886c..822051a5 100644
--- a/src/corelib/fpg_utils.pas
+++ b/src/corelib/fpg_utils.pas
@@ -31,6 +31,7 @@ uses
function fpgToOSEncoding(aString: TfpgString): string;
function fpgFromOSEncoding(aString: string): TfpgString;
procedure fpgOpenURL(const aURL: TfpgString);
+function fpgFileSize(const AFilename: TfpgString): integer;
// *** Common functions for all platforms ***
@@ -40,6 +41,11 @@ function fpgAppendPathDelim(const Path: TfpgString): TfpgString;
function fpgHasSubDirs(const Dir: TfpgString; AShowHidden: Boolean): Boolean;
function fpgAllFilesMask: TfpgString;
function fpgConvertLineEndings(const s: TfpgString): TfpgString;
+function fpgGetToolkitConfigDir: TfpgString;
+{ This is so that when we support LTR and RTL languages, the colon will be
+ added at the correct place. }
+function fpgAddColon(const AText: TfpgString): TfpgString;
+function fpgIsBitSet(const AData: integer; const AIndex: integer): boolean;
// RTL wrapper filesystem functions with platform independant encoding
@@ -51,12 +57,16 @@ function fpgGetCurrentDir: TfpgString;
function fpgSetCurrentDir(const NewDir: TfpgString): Boolean;
function fpgExpandFileName(const FileName: TfpgString): TfpgString;
function fpgFileExists(const FileName: TfpgString): Boolean;
+function fpgDeleteFile(const FileName: TfpgString): Boolean;
function fpgDirectoryExists(const ADirectory: TfpgString): Boolean;
function fpgExtractFileDir(const FileName: TfpgString): TfpgString;
function fpgExtractFilePath(const FileName: TfpgString): TfpgString;
function fpgExtractFileName(const FileName: TfpgString): TfpgString;
function fpgExtractFileExt(const FileName: TfpgString): TfpgString;
function fpgForceDirectories(const ADirectory: TfpgString): Boolean;
+function fpgChangeFileExt(const FileName, Extension: TfpgString): TfpgString;
+function fpgGetAppConfigDir(const Global: Boolean): TfpgString;
+function fpgGetAppConfigFile(const Global: Boolean; const SubDir: Boolean): TfpgString;
implementation
@@ -120,6 +130,13 @@ begin
Result := FileExists(fpgToOSEncoding(FileName));
end;
+function fpgDeleteFile(const FileName: TfpgString): Boolean;
+begin
+ { Don't remove 'SysUtils.' prefix, it is required under Windows, other
+ FPC tries to use Windows.DeleteFile API - which is wrong }
+ Result := SysUtils.DeleteFile(fpgToOSEncoding(FileName));
+end;
+
function fpgDirectoryExists(const ADirectory: TfpgString): Boolean;
begin
Result := DirectoryExists(fpgToOSEncoding(ADirectory));
@@ -150,6 +167,21 @@ begin
Result := ForceDirectories(fpgToOSEncoding(ADirectory));
end;
+function fpgChangeFileExt(const FileName, Extension: TfpgString): TfpgString;
+begin
+ Result := ChangeFileExt(fpgToOSEncoding(Filename), Extension);
+end;
+
+function fpgGetAppConfigDir(const Global: Boolean): TfpgString;
+begin
+ Result := fpgFromOSEncoding(GetAppConfigDir(Global));
+end;
+
+function fpgGetAppConfigFile(const Global: Boolean; const SubDir: Boolean): TfpgString;
+begin
+ Result := fpgFromOSEncoding(GetAppConfigFile(Global, SubDir));
+end;
+
function fpgAppendPathDelim(const Path: TfpgString): TfpgString;
begin
if (Path <> '') and (Path[length(Path)] <> PathDelim) then
@@ -191,7 +223,7 @@ begin
break;
until fpgFindNext(FileInfo) <> 0;
finally
- FindClose(FileInfo);
+ SysUtils.FindClose(FileInfo);
end;
end;
end;
@@ -227,6 +259,22 @@ begin
Inc(i);
end;
+function fpgGetToolkitConfigDir: TfpgString;
+begin
+ Result := fpgTrimR(fpgGetAppConfigDir(False), ApplicationName, True) + FPG_CONFIG_DIR;
+end;
+
+function fpgAddColon(const AText: TfpgString): TfpgString;
+begin
+ { TODO : Check language direction and add colon at appropriate end. This is very crude! }
+ Result := AText + ':';
+end;
+
+function fpgIsBitSet(const AData: integer; const AIndex: integer): boolean;
+begin
+ Result := (AData and (1 shl AIndex) <> 0);
+end;
+
end.
diff --git a/src/corelib/fpg_widget.pas b/src/corelib/fpg_widget.pas
index 39bb4193..5e3ba007 100644
--- a/src/corelib/fpg_widget.pas
+++ b/src/corelib/fpg_widget.pas
@@ -34,12 +34,19 @@ type
THintEvent = procedure(Sender: TObject; var AHint: TfpgString) of object;
+ TfpgDragEnterEvent = procedure(Sender, Source: TObject; AMimeList: TStringList; var AMimeChoice: TfpgString; var ADropAction: TfpgDropAction; var Accept: Boolean) of object;
+ TfpgDragDropEvent = procedure(Sender, Source: TObject; X, Y: integer; AData: variant) of object;
+
TfpgWidget = class(TfpgWindow)
private
+ FAcceptDrops: boolean;
FAlignRect: TfpgRect;
FOnClick: TNotifyEvent;
FOnDoubleClick: TMouseButtonEvent;
+ FOnDragDrop: TfpgDragDropEvent;
+ FOnDragEnter: TfpgDragEnterEvent;
+ FOnDragLeave: TNotifyEvent;
FOnEnter: TNotifyEvent;
FOnExit: TNotifyEvent;
FOnMouseDown: TMouseButtonEvent;
@@ -52,9 +59,12 @@ type
FOnResize: TNotifyEvent;
FOnScreen: boolean;
FOnShowHint: THintEvent;
+ FDragStartPos: TfpgPoint;
+ alist: TList;
procedure SetActiveWidget(const AValue: TfpgWidget);
function IsShowHintStored: boolean;
procedure SetFormDesigner(const AValue: TObject);
+ procedure SetAlign(const AValue: TAlign);
protected
procedure MsgPaint(var msg: TfpgMessageRec); message FPGM_PAINT;
procedure MsgResize(var msg: TfpgMessageRec); message FPGM_RESIZE;
@@ -69,6 +79,8 @@ type
procedure MsgMouseEnter(var msg: TfpgMessageRec); message FPGM_MOUSEENTER;
procedure MsgMouseExit(var msg: TfpgMessageRec); message FPGM_MOUSEEXIT;
procedure MsgMouseScroll(var msg: TfpgMessageRec); message FPGM_SCROLL;
+ procedure MsgDropEnter(var msg: TfpgMessageRec); message FPGM_DROPENTER;
+ procedure MsgDropExit(var msg: TfpgMessageRec); message FPGM_DROPEXIT;
protected
FFormDesigner: TObject;
FVisible: boolean;
@@ -85,6 +97,8 @@ type
FBackgroundColor: TfpgColor;
FTextColor: TfpgColor;
FIsContainer: Boolean;
+ FOnClickPending: Boolean;
+ procedure SetAcceptDrops(const AValue: boolean); virtual;
function GetOnShowHint: THintEvent; virtual;
procedure SetOnShowHint(const AValue: THintEvent); virtual;
procedure SetBackgroundColor(const AValue: TfpgColor); virtual;
@@ -98,7 +112,7 @@ type
function GetHint: TfpgString; virtual;
procedure SetHint(const AValue: TfpgString); virtual;
procedure DoUpdateWindowPosition; override;
- procedure DoAlign(AAlign: TAlign);
+ procedure DoAlignment;
procedure DoResize;
procedure DoShowHint(var AHint: TfpgString);
procedure HandlePaint; virtual;
@@ -122,7 +136,7 @@ type
procedure InternalHandleShow; virtual;
procedure HandleHide; virtual;
procedure MoveAndResize(ALeft, ATop, AWidth, AHeight: TfpgCoord);
- procedure RePaint;
+ procedure RePaint; virtual;
{ property events }
property OnClick: TNotifyEvent read FOnClick write FOnClick;
property OnDoubleClick: TMouseButtonEvent read FOnDoubleClick write FOnDoubleClick;
@@ -141,8 +155,6 @@ type
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
procedure AfterConstruction; override;
- function GetClientRect: TfpgRect; virtual;
- function GetBoundsRect: TfpgRect; virtual;
function InDesigner: boolean;
procedure InvokeHelp; virtual;
procedure Realign;
@@ -153,6 +165,7 @@ type
procedure Invalidate; // double check this works as developers expect????
property FormDesigner: TObject read FFormDesigner write SetFormDesigner;
property Parent: TfpgWidget read GetParent write SetParent;
+ property AcceptDrops: boolean read FAcceptDrops write SetAcceptDrops default False;
property ActiveWidget: TfpgWidget read FActiveWidget write SetActiveWidget;
property IsContainer: Boolean read FIsContainer;
property Visible: boolean read FVisible write SetVisible default True;
@@ -161,13 +174,16 @@ type
{ Is the widget allowed to receive keyboard focus. }
property Focusable: boolean read FFocusable write FFocusable default False;
property Focused: boolean read FFocused write FFocused default False;
- property Anchors: TAnchors read FAnchors write FAnchors;
- property Align: TAlign read FAlign write FAlign;
+ property Anchors: TAnchors read FAnchors write FAnchors default [anLeft, anTop];
+ property Align: TAlign read FAlign write SetAlign default alNone;
property Hint: TfpgString read GetHint write SetHint;
property ShowHint: boolean read FShowHint write SetShowHint stored IsShowHintStored;
property ParentShowHint: boolean read FParentShowHint write SetParentShowHint default True;
property BackgroundColor: TfpgColor read FBackgroundColor write SetBackgroundColor default clWindowBackground;
property TextColor: TfpgColor read FTextColor write SetTextColor default clText1;
+ property OnDragEnter: TfpgDragEnterEvent read FOnDragEnter write FOnDragEnter;
+ property OnDragLeave: TNotifyEvent read FOnDragLeave write FOnDragLeave;
+ property OnDragDrop: TfpgDragDropEvent read FOnDragDrop write FOnDragDrop;
end;
@@ -181,7 +197,8 @@ implementation
uses
fpg_constants,
- fpg_menu;
+ fpg_menu,
+ fpg_form; { for OnKeyPress handling }
var
@@ -202,6 +219,33 @@ begin
end;
end;
+function CompareInts(i1, i2: integer): integer;
+begin
+ if i1 < i2 then
+ Result := -1
+ else if i1 > i2 then
+ Result := 1
+ else
+ Result := 0;
+end;
+
+function AlignCompare(p1, p2: Pointer): integer;
+var
+ w1: TfpgWidget;
+ w2: TfpgWidget;
+begin
+ w1 := TfpgWidget(p1);
+ w2 := TfpgWidget(p2);
+ case w1.Align of
+ alTop: Result := CompareInts(w1.Top, w2.Top);
+ alBottom: Result := CompareInts(w2.Top, w1.Top);
+ alLeft: Result := CompareInts(w1.Left, w2.Left);
+ alRight: Result := CompareInts(w2.Left, w1.Left);
+ else
+ Result := 0;
+ end;
+end;
+
{ TfpgWidget }
@@ -234,6 +278,14 @@ begin
FActiveWidget.HandleSetFocus;
end;
+procedure TfpgWidget.SetAcceptDrops(const AValue: boolean);
+begin
+ if FAcceptDrops = AValue then
+ exit;
+ FAcceptDrops := AValue;
+ DoAcceptDrops(AValue);
+end;
+
function TfpgWidget.GetHint: TfpgString;
begin
Result := FHint;
@@ -256,6 +308,14 @@ begin
end;
end;
+procedure TfpgWidget.SetAlign(const AValue: TAlign);
+begin
+ if FAlign = AValue then
+ Exit;
+ FAlign := AValue;
+ Realign;
+end;
+
procedure TfpgWidget.SetVisible(const AValue: boolean);
begin
if FVisible = AValue then
@@ -341,16 +401,6 @@ begin
end;
end;
-function TfpgWidget.GetClientRect: TfpgRect;
-begin
- Result.SetRect(0, 0, Width, Height);
-end;
-
-function TfpgWidget.GetBoundsRect: TfpgRect;
-begin
- Result.SetRect(Left, Top, Width+1, Height+1);
-end;
-
function TfpgWidget.InDesigner: boolean;
begin
Result := (FFormDesigner <> nil)
@@ -416,7 +466,9 @@ begin
FShowHint := False;
FParentShowHint := True;
FBackgroundColor := clWindowBackground;
- FTextColor := clText1;
+ FTextColor := clText1;
+ FAcceptDrops := False;
+ FOnClickPending := False;
inherited Create(AOwner);
@@ -487,6 +539,7 @@ var
ss: TShiftState;
consumed: boolean;
wg: TfpgWidget;
+ wlast: TfpgWidget;
begin
if InDesigner then
begin
@@ -502,13 +555,27 @@ begin
HandleKeyPress(key, ss, consumed);
if not consumed then
begin
+ { work it's way to one before top level form - forms are not focusable remember }
wg := Parent;
+ wlast := wg;
while (not consumed) and (wg <> nil) do
begin
wg.HandleKeyPress(key, ss, consumed);
+ wlast := wg;
wg := wg.Parent;
end;
end;
+ { we should now be at the top level form }
+ if (not consumed) and (wlast <> nil) then
+ begin
+ if (wlast is TfpgForm) and Assigned(wlast.OnKeyPress) then
+ wlast.OnKeyPress(self, key, ss, consumed);
+ end;
+ { now finaly, lets give fpgApplication a chance }
+ if (not consumed) and Assigned(fpgApplication.OnKeyPress) then
+ begin
+ fpgApplication.OnKeyPress(self, key, ss, consumed);
+ end;
end;
procedure TfpgWidget.MsgKeyRelease(var msg: TfpgMessageRec);
@@ -559,6 +626,7 @@ begin
case msg.Params.mouse.Buttons of
MOUSE_LEFT:
begin
+ FDragStartPos.SetPoint(msg.Params.mouse.x, msg.Params.mouse.y);
mb := mbLeft;
HandleLMouseDown(msg.Params.mouse.x, msg.Params.mouse.y, msg.Params.mouse.shiftstate);
end;
@@ -585,6 +653,7 @@ var
IsDblClick: boolean;
begin
// writeln('TfpgWidget.MsgMouseUp');
+ FDragActive := False;
if InDesigner then
begin
FFormDesigner.Dispatch(msg);
@@ -600,6 +669,7 @@ begin
case msg.Params.mouse.Buttons of
MOUSE_LEFT:
begin
+ FOnClickPending := True;
mb := mbLeft;
if uLastClickWidget = self then
IsDblClick := ((fpgGetTickCount - uLastClickTime) <= DOUBLECLICK_MS)
@@ -613,7 +683,7 @@ begin
uLastClickTime := fpgGetTickCount;
if IsDblClick then
begin
-
+ FOnClickPending := False; { When Double Click occurs we don't want single click }
HandleDoubleClick(msg.Params.mouse.x, msg.Params.mouse.y, msg.Params.mouse.Buttons, msg.Params.mouse.shiftstate);
if Assigned(FOnDoubleClick) then
FOnDoubleClick(self, mb, msg.Params.mouse.shiftstate,
@@ -649,6 +719,16 @@ begin
Exit;
end;
+ if (msg.Params.mouse.Buttons and MOUSE_LEFT) = MOUSE_LEFT then
+ begin
+ if not FDragActive and (FDragStartPos.ManhattanLength(fpgPoint(msg.Params.mouse.x, msg.Params.mouse.y)) > fpgApplication.StartDragDistance) then
+ begin
+ FDragActive := True;
+ // In Windows dragging is a blocking function, so FDragActive is false after this call
+ DoDragStartDetected;
+ end;
+ end;
+
HandleMouseMove(msg.Params.mouse.x, msg.Params.mouse.y, msg.Params.mouse.Buttons, msg.Params.mouse.shiftstate);
if Assigned(OnMouseMove) then
OnMouseMove(self, msg.Params.mouse.shiftstate,
@@ -710,6 +790,16 @@ begin
msg.Params.mouse.shiftstate, msg.Params.mouse.delta);
end;
+procedure TfpgWidget.MsgDropEnter(var msg: TfpgMessageRec);
+begin
+ // do nothing
+end;
+
+procedure TfpgWidget.MsgDropExit(var msg: TfpgMessageRec);
+begin
+ // do nothing
+end;
+
function TfpgWidget.GetOnShowHint: THintEvent;
begin
Result := FOnShowHint;
@@ -942,7 +1032,7 @@ end;
procedure TfpgWidget.HandleLMouseUp(x, y: integer; shiftstate: TShiftState);
begin
- if Assigned(FOnClick) then
+ if FOnClickPending and Assigned(FOnClick) then
FOnClick(self);
end;
@@ -1119,25 +1209,39 @@ var
dy: integer;
dw: integer;
dh: integer;
+ w: TfpgWidget;
begin
if (csLoading in ComponentState) then
Exit; //==>
// writeln('HandleAlignments - ', Classname);
FAlignRect := GetClientRect;
- DoAlign(alTop);
- DoAlign(alBottom);
- DoAlign(alLeft);
- DoAlign(alRight);
- DoAlign(alClient);
+ alist := TList.Create;
+ try
+ for n := 0 to ComponentCount - 1 do
+ if Components[n] is TfpgWidget then
+ begin
+ w := TfpgWidget(Components[n]);
+ if (w.Align <> alNone) and (w.Visible) then
+ alist.Add(w);
+ end;
+
+ DoAlignment;
+ //DoAlign(alTop);
+ //DoAlign(alBottom);
+ //DoAlign(alLeft);
+ //DoAlign(alRight);
+ //DoAlign(alClient);
+ finally
+ alist.Free;
+ end;
// handle anchors finally for alNone
for n := 0 to ComponentCount - 1 do
if (Components[n] is TfpgWidget) then
begin
wg := TfpgWidget(Components[n]);
- if (wg.FAlign = alNone) and
- ((anBottom in wg.Anchors) or (anRight in wg.Anchors)) then
+ if (wg.FAlign = alNone) and ([anLeft, anTop] <> wg.Anchors) then
begin
// we must alter the window
dx := 0;
@@ -1145,15 +1249,21 @@ begin
dw := 0;
dh := 0;
- if (anLeft in wg.Anchors) and (anRight in wg.Anchors) then
- dw := dwidth
- else if anRight in wg.Anchors then
- dx := dwidth;
-
- if (anTop in wg.Anchors) and (anBottom in wg.Anchors) then
- dh := dheight
- else if anBottom in wg.Anchors then
- dy := dheight;
+ if (anRight in wg.Anchors) then
+ if (anLeft in wg.Anchors) then
+ dw := dwidth
+ else
+ dx := dwidth
+ else if not (anLeft in wg.Anchors) then
+ dx := (dwidth div 2);
+
+ if (anBottom in wg.Anchors) then
+ if (anTop in wg.Anchors) then
+ dh := dheight
+ else
+ dy := dheight
+ else if not (anTop in wg.Anchors) then
+ dy := (dheight div 2);
wg.MoveAndResizeBy(dx, dy, dw, dh);
end;
@@ -1188,55 +1298,16 @@ begin
MoveAndResize(FLeft + dx, FTop + dy, FWidth + dw, FHeight + dh);
end;
-function CompareInts(i1, i2: integer): integer;
-begin
- if i1 < i2 then
- Result := -1
- else if i1 > i2 then
- Result := 1
- else
- Result := 0;
-end;
-
-function AlignCompare(p1, p2: Pointer): integer;
+procedure TfpgWidget.DoAlignment;
var
- w1: TfpgWidget;
- w2: TfpgWidget;
-begin
- w1 := TfpgWidget(p1);
- w2 := TfpgWidget(p2);
- case w1.Align of
- alTop: Result := CompareInts(w1.Top, w2.Top);
- alBottom: Result := CompareInts(w2.Top, w1.Top);
- alLeft: Result := CompareInts(w1.Left, w2.Left);
- alRight: Result := CompareInts(w2.Left, w1.Left);
- else
- Result := 0;
- end;
-end;
-
-procedure TfpgWidget.DoAlign(AAlign: TAlign);
-var
- alist: TList;
w: TfpgWidget;
n: integer;
begin
- alist := TList.Create;
- for n := 0 to ComponentCount - 1 do
- if Components[n] is TfpgWidget then
- begin
- w := TfpgWidget(Components[n]);
- if (w.Align = AAlign) and (w.Visible) then
- alist.Add(w);
- end;
-
- alist.Sort(@AlignCompare);
-
// and process this list in order
for n := 0 to alist.Count - 1 do
begin
w := TfpgWidget(alist[n]);
- case AAlign of
+ case w.Align of
alTop:
begin
w.MoveAndResize(FAlignRect.Left, FAlignRect.Top, FAlignRect.Width, w.Height);
@@ -1267,8 +1338,6 @@ begin
w.MoveAndResize(FAlignRect.Left, FAlignRect.Top, FAlignRect.Width, FAlignRect.Height);
end; { case }
end;
-
- alist.Free;
end;
procedure TfpgWidget.DoResize;
diff --git a/src/corelib/gdi/fpg_gdi.pas b/src/corelib/gdi/fpg_gdi.pas
index e242bfb6..6f95d8a8 100644
--- a/src/corelib/gdi/fpg_gdi.pas
+++ b/src/corelib/gdi/fpg_gdi.pas
@@ -24,19 +24,25 @@ unit fpg_gdi;
{$mode objfpc}{$H+}
{.$Define Debug}
+{.$Define DND_DEBUG}
interface
uses
- Windows,
Classes,
SysUtils,
+ Windows,
+ ActiveX,
fpg_base,
- fpg_impl;
+ fpg_impl
+ {$IFDEF DEBUG}
+ ,dbugintf
+ {$ENDIF DEBUG}
+ ,fpg_OLEDragDrop
+ ;
{ Constants missing on windows unit }
const
- WM_MOUSEWHEEL = $020a; // we could remove this since FPC 2.0.4
VER_PLATFORM_WIN32_CE = 3;
CLEARTYPE_QUALITY = 5;
@@ -50,6 +56,8 @@ var
type
// forward declaration
TfpgGDIWindow = class;
+ TGDIDragManager = class;
+ TfpgGDIDrag = class;
TfpgGDIFontResource = class(TfpgFontResourceBase)
@@ -140,13 +148,25 @@ type
TfpgGDIWindow = class(TfpgWindowBase)
private
+ FDropManager: TfpgOLEDropTarget;
+ FDropPos: TPoint;
+ FUserMimeSelection: TfpgString;
+ FUserAcceptDrag: Boolean;
+ function GetDropManager: TfpgOLEDropTarget;
+ procedure HandleDNDLeave(Sender: TObject);
+ procedure HandleDNDEnter(Sender: TObject; DataObj: IDataObject; KeyState: Longint; PT: TPoint; var Effect: DWORD);
+ procedure HandleDNDPosition(Sender: TObject; KeyState: Longint; PT: TPoint; var Effect: TfpgOLEDragDropEffect);
+ procedure HandleDNDDrop(Sender: TObject; DataObj: IDataObject; KeyState: Longint; PT: TPoint; Effect: TfpgOLEDragDropEffect);
+ private
FMouseInWindow: boolean;
FNonFullscreenRect: TfpgRect;
FNonFullscreenStyle: longword;
FFullscreenIsSet: boolean;
FSkipResizeMessage: boolean;
+ QueueAcceptDrops: boolean;
function DoMouseEnterLeaveCheck(AWindow: TfpgGDIWindow; uMsg, wParam, lParam: Cardinal): Boolean;
procedure WindowSetFullscreen(aFullScreen, aUpdate: boolean);
+ property DropManager: TfpgOLEDropTarget read GetDropManager;
protected
FWinHandle: TfpgWinHandle;
FModalForWin: TfpgGDIWindow;
@@ -164,9 +184,13 @@ type
//procedure MoveToScreenCenter; override;
procedure DoSetWindowTitle(const ATitle: string); override;
procedure DoSetMouseCursor; override;
+ procedure DoDNDEnabled(const AValue: boolean); override;
+ procedure DoAcceptDrops(const AValue: boolean); override;
+ procedure DoDragStartDetected; override;
property WinHandle: TfpgWinHandle read FWinHandle;
public
constructor Create(AOwner: TComponent); override;
+ destructor Destroy; override;
procedure ActivateWindow; override;
procedure CaptureMouse; override;
procedure ReleaseMouse; override;
@@ -175,6 +199,10 @@ type
TfpgGDIApplication = class(TfpgApplicationBase)
+ private
+ FDrag: TfpgGDIDrag;
+ procedure SetDrag(const AValue: TfpgGDIDrag);
+ property Drag: TfpgGDIDrag read FDrag write SetDrag;
protected
FDisplay: HDC;
WindowClass: TWndClass;
@@ -234,6 +262,42 @@ type
end;
+ TfpgGDIMimeDataBase = class(TfpgMimeDataBase)
+ end;
+
+
+ { Used mainly for sending drags - being the source of the drag }
+ TfpgGDIDrag = class(TfpgDragBase)
+ private
+ function StringToHandle(const AString: TfpgString): HGLOBAL;
+ protected
+ FSource: TfpgGDIWindow;
+ function GetSource: TfpgGDIWindow; virtual;
+ public
+ destructor Destroy; override;
+ function Execute(const ADropActions: TfpgDropActions; const ADefaultAction: TfpgDropAction=daCopy): TfpgDropAction; override;
+ end;
+
+
+ { Used mainly for receiving drags - being the target of the drag }
+ TGDIDragManager = class(TInterfacedObject, IDropTarget)
+ private
+ FDropTarget: TfpgWindowBase; { actually a TfpgWidget }
+ FRegistered: boolean;
+ { IDropTarget }
+ function DragEnter(const dataObj: IDataObject; grfKeyState: DWORD; pt: TPoint; var dwEffect: DWORD): HResult;StdCall;
+ function DragOver(grfKeyState: DWORD; pt: TPoint; var dwEffect: DWORD): HResult;StdCall;
+ function DragLeave: HResult;StdCall;
+ function Drop(const dataObj: IDataObject; grfKeyState: DWORD; pt: TPoint; var dwEffect: DWORD):HResult;StdCall;
+ public
+ constructor Create(ADropTarget: TfpgWindowBase); reintroduce;
+ destructor Destroy; override;
+ procedure RegisterDragDrop;
+ procedure RevokeDragDrop;
+ property DropTarget: TfpgWindowBase read FDropTarget; { actually a TfpgWidget }
+ end;
+
+
implementation
uses
@@ -249,7 +313,7 @@ var
wapplication: TfpgApplication;
MouseFocusedWH: HWND;
OldMousePos: TPoint; // used to detect fake MouseMove events
-
+ NeedToUnitialize: Boolean;
// some required keyboard functions
{$INCLUDE fpg_keys_gdi.inc}
@@ -434,20 +498,68 @@ begin
{$ENDIF}
end;
+{ ********** Some helper conversion functions ************* }
+
function WinkeystateToShiftstate(keystate: cardinal): TShiftState;
begin
- result:= [];
- if GetKeyState(vk_menu) < 0 then begin
+ Result := [];
+ if GetKeyState(vk_menu) < 0 then
Include(result, ssAlt);
- end;
- if GetKeyState(vk_shift) < 0 then begin
+ if GetKeyState(vk_shift) < 0 then
Include(result, ssShift);
- end;
- if GetKeyState(vk_control) < 0 then begin
+ if GetKeyState(vk_control) < 0 then
Include(result, ssCtrl);
- end;
end;
+function TranslateToFPGDropActions(const pdwEffects: DWORD): TfpgDropActions;
+begin
+ Result := [daIgnore];
+ if (pdwEffects and DROPEFFECT_LINK) <> 0 then
+ Result := Result + [daLink];
+ if (pdwEffects and DROPEFFECT_COPY) <> 0 then
+ Result := Result + [daCopy];
+ if (pdwEffects and DROPEFFECT_MOVE) <> 0 then
+ Result := Result + [daMove];
+end;
+
+function TranslateToFPGDropAction(const pdwEffects: DWORD): TfpgDropAction;
+begin
+ if (pdwEffects and DROPEFFECT_LINK) <> 0 then
+ Result := daLink
+ else if (pdwEffects and DROPEFFECT_COPY) <> 0 then
+ Result := daCopy
+ else if (pdwEffects and DROPEFFECT_MOVE) <> 0 then
+ Result := daMove
+ else
+ Result := daIgnore;
+end;
+
+function TranslateToWinDragEffects(const AActions: TfpgDropActions): DWORD;
+begin
+ Result := DROPEFFECT_NONE;
+ if daLink in AActions then
+ Result := Result or DROPEFFECT_LINK;
+ if daCopy in AActions then
+ Result := Result or DROPEFFECT_COPY;
+ if daMove in AActions then
+ Result := Result or DROPEFFECT_MOVE;
+end;
+
+function TranslateToWinDragEffect(const AAction: TfpgDropAction): DWORD;
+begin
+ if AAction = daIgnore then
+ Result := DROPEFFECT_NONE
+ else if daLink = AAction then
+ Result := DROPEFFECT_LINK
+ else if daCopy = AAction then
+ Result := DROPEFFECT_COPY
+ else if daMove = AAction then
+ Result := DROPEFFECT_MOVE
+ else
+ Result := DROPEFFECT_NONE; { fallback, but should never be reached }
+end;
+
+
{$IFDEF wince}
procedure WinCESetDibBits(BMP: HBITMAP; awidth, aheight: Integer; aimgdata: Pointer; var bi: TBitmapInfo);
var
@@ -631,7 +743,7 @@ begin
if not (w is TfpgGDIWindow) then
begin
- {$IFDEF DEBUG} writeln('fpGFX/GDI: Unable to detect Window - using DefWindowProc'); {$ENDIF}
+ {$IFDEF DEBUG} SendDebug('fpGFX/GDI: Unable to detect Window - using DefWindowProc'); {$ENDIF}
Result := Windows.DefWindowProc(hwnd, uMsg, wParam, lParam);
Exit; //==>
end;
@@ -646,8 +758,7 @@ begin
WM_KEYDOWN,
WM_SYSKEYDOWN:
begin
- {$IFDEF DEBUG} write(w.ClassName + ': '); {$ENDIF}
- {$IFDEF DEBUG} writeln('wm_char, wm_keyup, wm_keydown'); {$ENDIF}
+ {$IFDEF DEBUG} SendDebug(w.ClassName + ': wm_char, wm_keyup, wm_keydown'); {$ENDIF}
kwg := FindKeyboardFocus;
if kwg <> nil then
w := kwg;
@@ -725,16 +836,15 @@ begin
if uMsg = WM_MOUSEMOVE then
begin
{$IFDEF DEBUG}
- Writeln('old x=', OldMousePos.x, ' y=', OldMousePos.y);
- writeln('new x=', msgp.mouse.x, ' y=', msgp.mouse.y);
- writeln('---');
+ SendDebugFmt('old x=%d y=%d', [OldMousePos.x, OldMousePos.y]);
+ SendDebugFmt('new x=%d y=%d', [msgp.mouse.x, msgp.mouse.y]);
{$ENDIF}
// Check for fake MouseMove messages - Windows sucks!
if (OldMousePos.x = msgp.mouse.x) and
(OldMousePos.y = msgp.mouse.y) then
begin
{$IFDEF DEBUG}
- writeln('We received fake MouseMove messages');
+ SendDebug('We received fake MouseMove messages');
{$ENDIF}
Exit; //==>
end
@@ -790,7 +900,7 @@ begin
WM_RBUTTONDOWN:
begin
{$IFDEF DEBUG}
- writeln('fpGUI/GDI:', w.ClassName + ': MouseButtonDown event');
+ SendDebug('fpGUI/GDI: ' + w.ClassName + ': MouseButtonDown event');
{$ENDIF}
// This is temporary and we should try and move it to
// the UI Designer code instead.
@@ -807,7 +917,7 @@ begin
WM_RBUTTONUP:
begin
{$IFDEF DEBUG}
- writeln('fpGFX/GDI:', w.ClassName + ': MouseButtonUp event');
+ SendDebug('fpGFX/GDI: '+ w.ClassName + ': MouseButtonUp event');
{$ENDIF}
// This is temporary and we should try and move it to
// the UI Designer code instead.
@@ -875,8 +985,7 @@ begin
msgp.rect.Height := smallint((lParam and $FFFF0000) shr 16);
{$IFDEF DEBUG}
- write(w.ClassName + ': ');
- writeln('WM_SIZE: width=',msgp.rect.width, ' height=',msgp.rect.height);
+ SendDebugFmt('%s: WM_SIZE w=%d h=%d', [w.ClassName, msgp.rect.width, msgp.rect.Height]);
{$ENDIF}
// skip minimize...
if lparam <> 0 then
@@ -886,8 +995,7 @@ begin
WM_MOVE:
begin
{$IFDEF DEBUG}
- write(w.ClassName + ': ');
- writeln('WM_MOVE');
+ SendDebug(w.ClassName + ': WM_MOVE');
{$ENDIF}
// window decoration correction ...
if (GetWindowLong(w.WinHandle, GWL_STYLE) and WS_CHILD) = 0 then
@@ -908,8 +1016,7 @@ begin
WM_MOUSEWHEEL:
begin
{$IFDEF DEBUG}
- write(w.ClassName + ': ');
- writeln('WM_MOUSEWHEEL: wp=',IntToHex(wparam,8), ' lp=',IntToHex(lparam,8));
+ SendDebugFmt('%s: WM_MOUSEWHEEL: wp=%s lp=%s', [w.ClassName, IntToHex(wparam,8), IntToHex(lparam,8)]);
{$ENDIF}
pt.x := GET_X_LPARAM(lParam);
pt.y := GET_Y_LPARAM(lParam);
@@ -941,7 +1048,7 @@ begin
WM_ACTIVATE: // We currently use WM_NCACTIVATE instead!
begin
{$IFDEF DEBUG}
- writeln(w.ClassName + ': WM_ACTIVATE');
+ SendDebug(w.ClassName + ': WM_ACTIVATE');
{$ENDIF}
if (Lo(wParam) = WA_INACTIVE) then
fpgSendMessage(nil, w, FPGM_DEACTIVATE)
@@ -955,11 +1062,19 @@ begin
Result := 0;
end;
+ WM_TIMECHANGE:
+ begin
+ {$IFDEF DEBUG}
+ SendDebug(w.ClassName + ': WM_TIMECHANGE');
+ {$ENDIF}
+ writeln('fpGUI/GDI: ' + w.ClassName + ': WM_TIMECHANGE');
+ fpgResetAllTimers;
+ end;
+
WM_NCACTIVATE:
begin
{$IFDEF DEBUG}
- write(w.ClassName + ': WM_NCACTIVATE ');
- writeln(wParam);
+ SendDebugFmt('%s: WM_NCACTIVATE wparam=%d', [w.ClassName, wParam]);
{$ENDIF}
if (wParam = 0) then
fpgSendMessage(nil, w, FPGM_DEACTIVATE)
@@ -969,7 +1084,7 @@ begin
if (PopupListFirst <> nil) and (PopupListFirst.Visible) then
begin
{$IFDEF DEBUG}
- writeln(' Blockmsg = True (part 1) : ' + PopupListFirst.ClassName);
+ SendDebug(' Blockmsg = True (part 1) : ' + PopupListFirst.ClassName);
{$ENDIF}
// This is ugly but needed for now to get TfpgCombobox to work
if (PopupListFirst.ClassName <> 'TDropDownWindow') then
@@ -1002,8 +1117,7 @@ begin
WM_CLOSE:
begin
{$IFDEF DEBUG}
- write(w.ClassName + ': ');
- writeln('WM_Close');
+ SendDebug(w.ClassName + ': WM_Close');
{$ENDIF}
fpgSendMessage(nil, w, FPGM_CLOSE, msgp);
end;
@@ -1011,8 +1125,7 @@ begin
WM_PAINT:
begin
{$IFDEF DEBUG}
- write(w.ClassName + ': ');
- writeln('WM_PAINT');
+ SendDebug(w.ClassName + ': WM_PAINT');
{$ENDIF}
Windows.BeginPaint(w.WinHandle, @PaintStruct);
fpgSendMessage(nil, w, FPGM_PAINT, msgp);
@@ -1060,6 +1173,13 @@ begin
Result.Sort;
end;
+procedure TfpgGDIApplication.SetDrag(const AValue: TfpgGDIDrag);
+begin
+ if Assigned(FDrag) then
+ FDrag.Free;
+ FDrag := AValue;
+end;
+
function TfpgGDIApplication.GetHiddenWindow: HWND;
begin
if (FHiddenWindow = 0) then
@@ -1137,6 +1257,8 @@ end;
destructor TfpgGDIApplication.Destroy;
begin
+ if Assigned(FDrag) then
+ FDrag.Free;
UnhookWindowsHookEx(ActivationHook);
inherited Destroy;
end;
@@ -1163,6 +1285,8 @@ begin
if (atimeoutms >= 0) and (not DoMessagesPending) then
begin
+ if Assigned(FOnIdle) then
+ OnIdle(self);
if atimeoutms > 0 then
timerid := Windows.SetTimer(ltimerWnd, 1, atimeoutms, nil)
else
@@ -1229,7 +1353,153 @@ end;
var
// this are required for Windows MouseEnter & MouseExit detection.
uLastWindowHndl: TfpgWinHandle;
-
+
+procedure TfpgGDIWindow.HandleDNDLeave(Sender: TObject);
+var
+ wg: TfpgWidget;
+begin
+ {$IFDEF DND_DEBUG}
+ writeln('TfpgGDIWindow.HandleDNDLeave ');
+ {$ENDIF}
+ FUserMimeSelection := '';
+ wg := self as TfpgWidget;
+ if wg.AcceptDrops then { if we get here, this should always be true anyway }
+ begin
+ if Assigned(wg.OnDragLeave) then
+ wg.OnDragLeave(nil);
+ end;
+end;
+
+procedure TfpgGDIWindow.HandleDNDEnter(Sender: TObject; DataObj: IDataObject;
+ KeyState: Longint; PT: TPoint; var Effect: DWORD);
+var
+ wg: TfpgWidget;
+ lMimeList: TStringList;
+ lMimeChoice: TfpgString;
+ lAccept: Boolean;
+ lDropAction: TfpgDropAction;
+ EnumIntf: IEnumFORMATETC;
+ msgp: TfpgMessageParams;
+begin
+ {$IFDEF DND_DEBUG}
+ writeln('TfpgGDIWindow.HandleDNDEnter ');
+ {$ENDIF}
+ wg := self as TfpgWidget;
+ if wg.AcceptDrops then
+ begin
+ lAccept := False;
+
+ { enumerate the available formats and return them as a StringList }
+ lMimeList := EnumDataToStringList(DataObj);
+ try
+ if lMimeList.Count > 0 then
+ lMimeChoice := lMimeList[0]
+ else
+ {$NOTE We need to replace this message with a resouce string }
+ raise Exception.Create('fpGUI/GDI: no mime types available for DND operation');
+
+ lDropAction := TranslateToFPGDropAction(Effect);
+ if Assigned(wg.OnDragEnter) then
+ wg.OnDragEnter(self, nil, lMimeList, lMimeChoice, lDropAction, lAccept);
+ finally
+ lMimeList.Free;
+ end;
+ if not lAccept then
+ Effect := DROPEFFECT_NONE
+ else
+ begin
+ Effect := TranslateToWinDragEffect(lDropAction);
+ FUserMimeSelection := lMimeChoice;
+ FUserAcceptDrag := True;
+ end;
+
+ { Notify widget of drag status, so it can update its look }
+ if lAccept then
+ begin
+ FDropPos.x := PT.x;
+ FDropPos.y := PT.y;
+ fillchar(msgp, sizeof(msgp), 0);
+ msgp.mouse.x := PT.x;
+ msgp.mouse.y := PT.y;
+ fpgPostMessage(nil, wg, FPGM_DROPENTER, msgp);
+ end;
+ end;
+end;
+
+procedure TfpgGDIWindow.HandleDNDPosition(Sender: TObject; KeyState: Longint; PT: TPoint; var Effect: TfpgOLEDragDropEffect);
+var
+ msgp: TfpgMessageParams;
+ wg: TfpgWidget;
+begin
+ wg := self as TfpgWidget;
+ { Notify widget of drag status, so it can update its look. We do the pos
+ check because OLE framework calls DragOver repeatedly even if the mouse
+ doesn't move, but simply because the mouse is over the widget. We don't
+ want that, for performance reasons. }
+ if FDropPos <> PT then
+ begin
+ {$IFDEF DND_DEBUG}
+ writeln('TfpgGDIWindow.HandleDNDPosition ');
+ {$ENDIF}
+ FDropPos.x := PT.x;
+ FDropPos.y := PT.y;
+ fillchar(msgp, sizeof(msgp), 0);
+ msgp.mouse.x := PT.x;
+ msgp.mouse.y := PT.y;
+ fpgPostMessage(nil, wg, FPGM_DROPENTER, msgp);
+ end;
+end;
+
+procedure TfpgGDIWindow.HandleDNDDrop(Sender: TObject; DataObj: IDataObject;
+ KeyState: Longint; PT: TPoint; Effect: TfpgOLEDragDropEffect);
+var
+ FE: FORMATETC;
+ stgmed: STGMEDIUM;
+ data: pchar;
+ wg: TfpgWidget;
+ CF: DWORD;
+ lIsTranslated: Boolean;
+begin
+ if not FUserAcceptDrag then
+ exit;
+
+ {$IFDEF DND_DEBUG}
+ Writeln('TfpgGDIWindow.HandleDNDDrop');
+ {$ENDIF}
+
+ wg := self as TfpgWidget;
+ { construct a FORMATETC object }
+ CF := WindowsClipboardLookup(FUserMimeSelection, lIsTranslated);
+ FE := GetFormatEtc(CF);
+
+ if DataObj.QueryGetData(FE) = S_OK then
+ begin
+ if DataObj.GetData(FE, stgmed) = S_OK then
+ begin
+ { Yippie! the data is there, so go get it! }
+ data := GlobalLock(stgmed.HGLOBAL);
+ if Assigned(wg.OnDragDrop) then
+ wg.OnDragDrop(self, nil, pt.x, pt.y, data);
+ GlobalUnlock(stgmed.HGLOBAL);
+ { release the data using the COM API }
+ ReleaseStgMedium(stgmed);
+ end;
+ end;
+end;
+
+function TfpgGDIWindow.GetDropManager: TfpgOLEDropTarget;
+begin
+ if not Assigned(FDropManager) then
+ begin
+ FDropManager := TfpgOLEDropTarget.Create(self);
+ FDropManager.OnDragLeave := @HandleDNDLeave;
+ FDropManager.OnDragEnter := @HandleDNDEnter;
+ FDropManager.OnDragOver := @HandleDNDPosition;
+ FDropManager.OnDragDrop := @HandleDNDDrop;
+ end;
+ Result := FDropManager;
+end;
+
function TfpgGDIWindow.DoMouseEnterLeaveCheck(AWindow: TfpgGDIWindow; uMsg, wParam, lParam: Cardinal): Boolean;
var
pt, spt: Windows.POINT;
@@ -1392,8 +1662,12 @@ begin
end
else if WindowType = wtModalForm then
begin
- // set parent window to special hidden window. It helps to hide window taskbar button.
- FParentWinHandle := wapplication.GetHiddenWindow;
+ if FocusRootWidget <> nil then
+ FParentWinHandle := FocusRootWidget.WinHandle
+ else
+ // set parent window to special hidden window. It helps to hide window taskbar button.
+ FParentWinHandle := wapplication.GetHiddenWindow;
+
// for modal windows, this is necessary
FWinStyle := WS_OVERLAPPEDWINDOW or WS_POPUPWINDOW;
FWinStyle := FWinStyle and not (WS_MINIMIZEBOX);
@@ -1496,6 +1770,11 @@ begin
// the forms require some adjustments before the Window appears
SetWindowParameters;
FSkipResizeMessage := False;
+
+ if QueueAcceptDrops then
+ begin
+ DoAcceptDrops(True);
+ end;
end;
procedure TfpgGDIWindow.DoReleaseWindowHandle;
@@ -1611,11 +1890,56 @@ begin
SetCursor(hc);
end;
+procedure TfpgGDIWindow.DoDNDEnabled(const AValue: boolean);
+begin
+ { GDI has nothing to do here }
+end;
+
+procedure TfpgGDIWindow.DoAcceptDrops(const AValue: boolean);
+begin
+ if AValue then
+ begin
+ if HasHandle then
+ DropManager.RegisterDragDrop
+ else
+ QueueAcceptDrops := True; // we need to do this once we have a winhandle
+ end
+ else
+ begin
+ if HasHandle then
+ DropManager.RevokeDragDrop;
+ QueueAcceptDrops := False;
+ end;
+end;
+
+procedure TfpgGDIWindow.DoDragStartDetected;
+begin
+ inherited DoDragStartDetected;
+ { In windows OLE dragging is a blocking function, so it never returns until
+ OnStartDragDetected is complete. So we need to set FDragActive to False
+ here. }
+ FDragActive := False;
+ if Assigned(wapplication.FDrag) then
+ FreeAndNil(wapplication.FDrag);
+end;
+
constructor TfpgGDIWindow.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FWinHandle := 0;
+ FDropManager := nil;
+ FDropPos.x := 0;
+ FDropPos.y := 0;
FFullscreenIsSet := false;
+ FUserMimeSelection := '';
+ FUserAcceptDrag := False;
+end;
+
+destructor TfpgGDIWindow.Destroy;
+begin
+ if Assigned(FDropManager) then
+ FDropManager.Free;
+ inherited Destroy;
end;
procedure TfpgGDIWindow.ActivateWindow;
@@ -2350,36 +2674,47 @@ begin
end;
procedure TfpgGDIClipboard.DoSetText(const AValue: TfpgString);
+var
+ mem: THandle;
+ po2: PWideChar;
+ str: PWideChar;
begin
FClipboardText := AValue;
- if OpenClipboard(FClipboardWndHandle) then
+ if OpenClipboard(0) then
begin
- EmptyClipboard;
- SetClipboardData(CF_TEXT, 0);
+ str := PWideChar(Utf8Decode(AValue));
+ if EmptyClipboard then
+ begin
+ // Allocate a global memory object for the text.
+ mem:= globalalloc(GMEM_MOVEABLE or GMEM_DDESHARE, (length(AValue)+1)*2);
+ if mem <> 0 then
+ begin
+ po2:= globallock(mem);
+ if po2 <> nil then
+ begin
+ move(str^, po2^, (length(AValue)+1)*2);
+ globalunlock(mem);
+ if SetClipboardData(CF_UNICODETEXT,longword(mem)) <> 0 then
+ begin
+ //writeln('Successfully copied to clipboard');
+ end;
+ end
+ else
+ begin
+ globalfree(mem);
+ end;
+ end;
+ end;
CloseClipboard;
end;
end;
procedure TfpgGDIClipboard.InitClipboard;
begin
- {$WARNING This does not work! 'FPGUI' window class was not registered,
- so CreateWindowEx always returns 0}
- FClipboardWndHandle := Windows.CreateWindowEx(
- 0, // extended window style
- 'FPGUI', // registered class name
- nil, // window name
- 0, // window style
- 0, // horizontal position of window
- 0, // vertical position of window
- 10, // window width
- 10, // window height
- 0, // handle to parent or owner window
- 0, // menu handle or child identifier
- MainInstance, // handle to application instance
- nil // window-creation data
- );
+ // nothing to do here
end;
+
{ TfpgGDIFileList }
function TfpgGDIFileList.EncodeAttributesString(attrs: longword
@@ -2440,9 +2775,196 @@ begin
inherited PopulateSpecialDirs(aDirectory);
end;
+{ TfpgGDIDrag }
+
+function TfpgGDIDrag.StringToHandle(const AString: TfpgString): HGLOBAL;
+var
+ dest: HGLOBAL;
+ l: integer;
+ p: PChar;
+begin
+ p := PChar(AString);
+ l := Length(AString)+1;
+ { allocate and lock a global memory buffer. Make it fixed
+ data so we don't have to use GlobalLock }
+ dest := GlobalAlloc(GMEM_FIXED, l);
+ { Copy the string into the buffer }
+ Move(p^, PChar(dest)^, l);
+ Result := dest;
+end;
+
+function TfpgGDIDrag.GetSource: TfpgGDIWindow;
+begin
+ Result := FSource;
+end;
+
+destructor TfpgGDIDrag.Destroy;
+begin
+ {$IFDEF DND_DEBUG}
+ writeln('TfpgGDIDrag.Destroy ');
+ {$ENDIF}
+ inherited Destroy;
+end;
+
+function TfpgGDIDrag.Execute(const ADropActions: TfpgDropActions; const ADefaultAction: TfpgDropAction): TfpgDropAction;
+var
+ dwEffect: DWORD;
+ dwResult: HRESULT;
+ i: Integer;
+ F: PFormatEtc;
+ S: string;
+ M: PStgMedium;
+ itm: TfpgMimeDataItem;
+ lEffects: DWORD;
+ FDataObject: TfpgOLEDataObject;
+ FDropSource: TfpgOLEDropSource;
+ lIsTranslated: boolean;
+begin
+ { TODO: this still needs to be implemented }
+ if FDragging then
+ begin
+ {$IFDEF DND_DEBUG}
+ writeln('TfpgGDIDrag.Execute (already dragging)');
+ {$ENDIF}
+ Result := daIgnore;
+ end
+ else
+ begin
+ {$IFDEF DND_DEBUG}
+ writeln('TfpgGDIDrag.Execute (new drag)');
+ {$ENDIF}
+ FDragging := True;
+ wapplication.Drag := self;
+ lEffects := TranslateToWinDragEffects(ADropActions);
+ FDataObject := TfpgOLEDataObject.Create;
+
+ for i := 0 to FMimeData.Count-1 do
+ begin
+ F := nil;
+ M := nil;
+ lIsTranslated := False;
+ {$Note OLE DND: We are only handling strings at the moment, this needs to be extended to other types too }
+ itm := FMimeData[i];
+ {$IFDEF DND_DEBUG}
+ writeln(' Processing mime-type: ', itm.Format);
+ {$ENDIF}
+
+ { description of data we are sending }
+ New(F);
+ F^.cfFormat := WindowsClipboardLookup(itm.format, lIsTranslated);
+ F^.ptd := nil;
+ F^.dwAspect := DVASPECT_CONTENT;
+ F^.lindex := -1;
+ F^.tymed := TYMED_HGLOBAL;
+ FDataObject.FormatEtcList.Add(F);
+
+ { storage for data we are sending }
+ s := itm.data;
+ New(M);
+ M^.tymed := TYMED_HGLOBAL;
+ M^.hGlobal := StringToHandle(s);
+ FDataObject.StgMediumList.Add(M);
+
+ { Original mime type was translated to a known Windows CF_ formats, add
+ mimetype string as-is as well }
+ if lIsTranslated then
+ begin
+ New(F);
+ F^.cfFormat := RegisterClipboardFormat(PChar(itm.format));
+ F^.ptd := nil;
+ F^.dwAspect := DVASPECT_CONTENT;
+ F^.lindex := -1;
+ F^.tymed := TYMED_HGLOBAL;
+ FDataObject.FormatEtcList.Add(F);
+
+ { storage for data we are sending }
+ s := itm.data;
+ New(M);
+ M^.tymed := TYMED_HGLOBAL;
+ M^.hGlobal := StringToHandle(s);
+ FDataObject.StgMediumList.Add(M);
+ end;
+ end;
+
+ { Now let OLE take over from here }
+ FDropSource := TfpgOLEDropSource.Create;
+ dwResult := ActiveX.DoDragDrop( FDataObject as IDataObject,
+ FDropSource as IDropSource,
+ lEffects,
+ @dwEffect);
+ Result := TranslateToFPGDropAction(dwEffect);
+
+ if dwResult = DRAGDROP_S_DROP then
+ begin
+ { which action did the user select, and act accordingly }
+ if dwEffect = DROPEFFECT_COPY then
+ begin
+ // nothing to do here
+ end;
+ if dwEffect = DROPEFFECT_MOVE then
+ begin
+ // Sowehow we need to remove the data from source
+ end;
+ end;
+
+// (FDropSource as IUnknown)._Release;
+// (FDataObject as IUnknown)._Release;
+ end;
+end;
+
+{ TGDIDragManager }
+
+function TGDIDragManager.DragEnter(const dataObj: IDataObject;
+ grfKeyState: DWORD; pt: TPoint; var dwEffect: DWORD): HResult; StdCall;
+begin
+
+end;
+
+function TGDIDragManager.DragOver(grfKeyState: DWORD; pt: TPoint;
+ var dwEffect: DWORD): HResult; StdCall;
+begin
+
+end;
+
+function TGDIDragManager.DragLeave: HResult; StdCall;
+begin
+
+end;
+
+function TGDIDragManager.Drop(const dataObj: IDataObject; grfKeyState: DWORD;
+ pt: TPoint; var dwEffect: DWORD): HResult; StdCall;
+begin
+
+end;
+
+constructor TGDIDragManager.Create(ADropTarget: TfpgWindowBase);
+begin
+ inherited Create;
+ FDropTarget := ADropTarget;
+ FRegistered := False;
+end;
+
+destructor TGDIDragManager.Destroy;
+begin
+ if FRegistered then
+ RevokeDragDrop;
+ inherited Destroy;
+end;
+
+procedure TGDIDragManager.RegisterDragDrop;
+begin
+ Activex.RegisterDragDrop(TfpgWidget(FDropTarget).WinHandle, self as IDropTarget)
+end;
+
+procedure TGDIDragManager.RevokeDragDrop;
+begin
+ ActiveX.RevokeDragDrop(TfpgWidget(FDropTarget).WinHandle);
+end;
+
initialization
wapplication := nil;
MouseFocusedWH := 0;
+ NeedToUnitialize := Succeeded(OleInitialize(nil));
{$IFDEF WinCE}
UnicodeEnabledOS := True;
@@ -2460,5 +2982,9 @@ initialization
FontSmoothingType := ANTIALIASED_QUALITY;
{$ENDIF}
+finalization
+ if NeedToUnitialize then
+ OleUninitialize;
+
end.
diff --git a/src/corelib/gdi/fpg_interface.pas b/src/corelib/gdi/fpg_interface.pas
index c75aaa28..ef58e46d 100644
--- a/src/corelib/gdi/fpg_interface.pas
+++ b/src/corelib/gdi/fpg_interface.pas
@@ -33,6 +33,8 @@ type
TfpgApplicationImpl = TfpgGDIApplication;
TfpgClipboardImpl = TfpgGDIClipboard;
TfpgFileListImpl = TfpgGDIFileList;
+ TfpgMimeDataImpl = TfpgGDIMimeDataBase;
+ TfpgDragImpl = TfpgGDIDrag;
implementation
diff --git a/src/corelib/gdi/fpg_oledragdrop.pas b/src/corelib/gdi/fpg_oledragdrop.pas
new file mode 100644
index 00000000..fa17ba67
--- /dev/null
+++ b/src/corelib/gdi/fpg_oledragdrop.pas
@@ -0,0 +1,1061 @@
+{
+ fpGUI - Free Pascal GUI Toolkit
+
+ Copyright (C) 2006 - 2010 See the file AUTHORS.txt, included in this
+ distribution, for details of the copyright.
+
+ See the file COPYING.modifiedLGPL, included in this distribution,
+ for details about redistributing fpGUI.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+ Description:
+ This unit implements the OLE Drag-n-Drop functionality of Windows.
+ This unit is implemented based on the articles posted on
+ http://www.catch22.net/tuts/dragdrop/
+}
+unit fpg_OLEDragDrop;
+
+{$mode delphi}{$H+}
+
+interface
+
+uses
+ Windows, Classes, ActiveX, ShellAPI, fpg_base;
+
+const
+ CFSTR_FILENAMEMAPA = 'FileNameMap'; { CF_FILENAMEMAPA }
+ CFSTR_FILENAMEMAP = CFSTR_FILENAMEMAPA;
+ CFSTR_FILEDESCRIPTORA = 'FileGroupDescriptor'; { CF_FILEGROUPDESCRIPTORA }
+ CFSTR_FILEDESCRIPTOR = CFSTR_FILEDESCRIPTORA;
+ CFSTR_FILECONTENTS = 'FileContents'; { CF_FILECONTENTS }
+
+type
+ TfpgOLEFormatEtcList = class(TList)
+ private
+ function GetFormatEtc(Index: Integer): PFormatEtc;
+ protected
+ procedure Notify(Ptr: Pointer; Action: TListNotification); override;
+ public
+ constructor CreateCopy(AFormatEtcList: TfpgOLEFormatEtcList);
+ property FormatEtc[Index: Integer]: PFormatEtc read GetFormatEtc; default;
+ end;
+
+
+ TfpgOLEStgMediumList = class(TList)
+ private
+ function GetStgMedium(Index: Integer): PStgMedium;
+ protected
+ procedure Notify(Ptr: Pointer; Action: TListNotification); override;
+ public
+ property StgMedium[Index: Integer]: PStgMedium read GetStgMedium; default;
+ end;
+
+
+ TfpgOLEDropSource = class(TInterfacedObject, IDropSource)
+ private
+ { IDropSource }
+ function QueryContinueDrag(fEscapePressed: BOOL; grfKeyState: Longint): HResult; stdcall;
+ function GiveFeedback(dwEffect: Longint): HResult; stdcall;
+ end;
+
+
+ TfpgOLEDragDropEffect = (deNone, deCopy, deMove, deLink);
+ TfpgOLEDragEnterEvent = procedure(Sender: TObject; DataObj: IDataObject; KeyState: Longint; PT: TPoint; var Effect: DWORD) of object;
+ TfpgOLEDragOverEvent = procedure(Sender: TObject; KeyState: Longint; PT: TPoint; var Effect: TfpgOLEDragDropEffect) of object;
+ TfpgOLEDragDropEvent = procedure(Sender: TObject; DataObj: IDataObject; KeyState: Longint; PT: TPoint; Effect: TfpgOLEDragDropEffect) of object;
+
+
+ TfpgOLEDropTarget = class(TObject, IInterface, IDropTarget)
+ private
+ FDropTarget: TfpgWindowBase;
+ FRegistered: Boolean;
+ FOnDragEnter: TfpgOLEDragEnterEvent;
+ FOnDragOver: TfpgOLEDragOverEvent;
+ FOnDragLeave: TNotifyEvent;
+ FOnDragDrop: TfpgOLEDragDropEvent;
+ private
+ { IInterface }
+ function QueryInterface(const IID: TGUID; out Obj): HResult; stdcall;
+ function _AddRef: Integer; stdcall;
+ function _Release: Integer; stdcall;
+ { IDropTarget }
+ function DragEnter(const dataObj: IDataObject; grfKeyState: DWORD; pt: TPoint; var dwEffect: DWORD): HResult;StdCall;
+ function DragOver(grfKeyState: DWORD; pt: TPoint; var dwEffect: DWORD): HResult; stdcall;
+ function DragLeave: HResult; stdcall;
+ function Drop(const dataObj: IDataObject; grfKeyState: DWORD; pt: TPoint; var dwEffect: DWORD): HResult; stdcall;
+ protected
+ procedure DoDragEnter(DataObj: IDataObject; KeyState: Longint; PT: TPoint; var Effect: DWORD); virtual;
+ procedure DoDragOver(KeyState: Longint; PT: TPoint; var Effect: TfpgOLEDragDropEffect); virtual;
+ procedure DoDragLeave;
+ procedure DoDragDrop(DataObj: IDataObject; KeyState: Longint; PT: TPoint; Effect: TfpgOLEDragDropEffect); virtual;
+ public
+ property OnDragEnter: TfpgOLEDragEnterEvent read FOnDragEnter write FOnDragEnter;
+ property OnDragOver: TfpgOLEDragOverEvent read FOnDragOver write FOnDragOver;
+ property OnDragLeave: TNotifyEvent read FOnDragLeave write FOnDragLeave;
+ property OnDragDrop: TfpgOLEDragDropEvent read FOnDragDrop write FOnDragDrop;
+ public
+ constructor Create(ADropTargetWidget: TfpgWindowBase); reintroduce; { Actually a TfpgWidget }
+ destructor Destroy; override;
+ procedure RegisterDragDrop;
+ procedure RevokeDragDrop;
+ property DropTarget: TfpgWindowBase read FDropTarget;
+ end;
+
+
+ TfpgOLEDataObject = class(TInterfacedObject, IDataObject)
+ private
+ FFormatEtcList: TfpgOLEFormatEtcList;
+ FStgMediumList: TfpgOLEStgMediumList;
+ function LookupFormatEtc(AFormat: TFormatEtc): Integer;
+ protected
+ { IDataObject }
+ function GetData(const formatetcIn: TFormatEtc; out medium: TStgMedium): HResult; stdcall;
+ function GetDataHere(const formatetc: TFormatEtc; out medium: TStgMedium): HResult; stdcall;
+ function QueryGetData(const formatetc: TFormatEtc): HResult; stdcall;
+ function GetCanonicalFormatEtc(const formatetc: TFormatEtc; out formatetcOut: TFormatEtc): HResult; stdcall;
+ function SetData(const formatetc: TFormatEtc; const medium: TStgMedium; fRelease: BOOL): HResult; stdcall;
+ function EnumFormatEtc(dwDirection: DWORD; out enumFormatEtc: IEnumFormatEtc): HResult; stdcall;
+ function DAdvise(const formatetc: TFormatEtc; advf: DWORD; const advSink: IAdviseSink; out dwConnection: DWORD): HResult; stdcall;
+ function DUnadvise(dwConnection: DWORD): HResult; stdcall;
+ function EnumDAdvise(out enumAdvise: IEnumStatData): HResult; stdcall;
+ public
+ constructor Create; overload;
+ constructor Create(AFormatEtcList: TfpgOLEFormatEtcList); overload;
+ destructor Destroy; override;
+ property FormatEtcList: TfpgOLEFormatEtcList read FFormatEtcList;
+ property StgMediumList: TfpgOLEStgMediumList read FStgMediumList;
+ end;
+
+
+ TfpgOLEEnumFormatEtc = class(TInterfacedObject, IEnumFORMATETC)
+ private
+ FFormatEtcList: TfpgOLEFormatEtcList;
+ FIndex: Integer;
+ protected
+ { IEnumFORMATETC }
+ function Next(celt: ULong; out elt:FormatEtc; pceltFetched: pULong=nil): HResult; stdcall;
+ function Skip(celt: ULong): HResult; stdcall;
+ function Reset: HResult; stdcall;
+ function Clone(out Enum: IEnumFormatEtc): HResult; stdcall;
+ public
+ constructor Create(AFormatEtcList: TfpgOLEFormatEtcList);
+ destructor Destroy; override;
+ end;
+
+
+ TDragFilesSource = class(TObject)
+ private
+ FFileNames: TStrings;
+ FAliasFileNames: TStrings;
+ function GetAliasFileNames: TStrings;
+ function GetSourceFileNames: TStrings;
+ procedure SetAliasFileNames(const Value: TStrings);
+ procedure SetSourceFileNames(const Value: TStrings);
+ public
+ constructor Create;
+ destructor Destroy; override;
+ procedure Execute;
+ property SourceFileNames: TStrings read GetSourceFileNames write SetSourceFileNames;
+ property AliasFileNames: TStrings read GetAliasFileNames write SetAliasFileNames;
+ end;
+
+
+ TDragAcceptFilesEvent = function(Sender: TObject; FileNames: TStrings): Boolean of object;
+ TDragAcceptPositionEvent = function(Sender: TObject; PT: TPoint): Boolean of object;
+ TDropFilesEvent = procedure(Sender: TObject; PT: TPoint; FileNames: TStrings) of object;
+
+
+ TDragFilesTarget = class(TfpgOLEDropTarget)
+ private
+ FDragAcceptFiles: Boolean;
+ FOnDragAcceptFiles: TDragAcceptFilesEvent;
+ FOnDragAcceptPosition: TDragAcceptPositionEvent;
+ FOnDropFiles: TDropFilesEvent;
+ procedure GetFileNamesFromDropHandle(DropHandle: HDROP; SL: TStrings);
+ procedure StreamToFile(Stream: IStream; const FileName: string);
+ protected
+ function DoDragAcceptFiles(DataObj: IDataObject): Boolean;
+ function DoDragAcceptPosition(PT: TPoint): Boolean;
+ procedure DoDropFiles(DataObj: IDataObject; PT: TPoint);
+ procedure DoDragEnter(DataObj: IDataObject; KeyState: Longint; PT: TPoint; var Effect: DWORD); override;
+ procedure DoDragOver(KeyState: Longint; PT: TPoint; var Effect: TfpgOLEDragDropEffect); override;
+ procedure DoDragDrop(DataObj: IDataObject; KeyState: Longint; PT: TPoint; Effect: TfpgOLEDragDropEffect); override;
+ public
+ property OnDragAcceptFiles: TDragAcceptFilesEvent read FOnDragAcceptFiles write FOnDragAcceptFiles;
+ property OnDragAcceptPosition: TDragAcceptPositionEvent read FOnDragAcceptPosition write FOnDragAcceptPosition;
+ property OnDropFiles: TDropFilesEvent read FOnDropFiles write FOnDropFiles;
+ end;
+
+
+function WindowsMimeLookup(const CFFormat: string): string;
+function WindowsClipboardLookup(const AMime: string; var IsTranslated: Boolean): DWORD;
+function EnumDataToStringList(DataObj: IDataObject): TStringList;
+function GetFormatEtc(const CFFormat: DWORD): FORMATETC;
+
+implementation
+
+uses
+ SysUtils, ShlObj, fpg_widget;
+
+var
+ CF_FILENAMEMAP: Cardinal;
+ CF_FILEDESCRIPTOR: Cardinal;
+ CF_FILECONTENTS: Cardinal;
+
+
+function WindowsMimeLookup(const CFFormat: string): string;
+begin
+ { replace know clipboard formats with mime types }
+ if CFFormat = 'CF_TEXT' then
+ Result := 'text/plain'
+ else if CFFormat = 'CF_UNICODETEXT' then
+ Result := 'text/plain'
+ else if CFFormat = 'CF_OEMTEXT' then
+ Result := 'text/plain'
+ else if CFFormat = 'CF_HDROP' then
+ Result := 'text/uri-list'
+ else if CFFormat = 'CF_RICHTEXT' then
+ Result := 'text/html'
+ else
+ Result := CFFormat;
+end;
+
+function WindowsClipboardLookup(const AMime: string; var IsTranslated: Boolean): DWORD;
+begin
+ { TODO: We need to improve this implementation }
+ if AMime = 'text/html' then
+ begin
+ { We don't want duplicate CF_TEXT in DataObject, so register some of our
+ known convenience types (from TfpgMimeData) as-is }
+ IsTranslated := False;
+ Result := RegisterClipboardFormat('text/html');
+ end
+ else if Pos('text/', AMime) = 1 then
+ begin
+ IsTranslated := True;
+ Result := CF_TEXT; // fallback result
+ end
+ else
+ begin
+ IsTranslated := False;
+ Result := RegisterClipboardFormat(PChar(AMime));
+ end;
+end;
+
+function WindowsClipboardFormatToString(const CFFormat: integer): string;
+begin
+ { replace know clipboard formats with mime types }
+ case CFFormat of
+ CF_DIF : result := 'CF_DIF';
+ CF_DIB : result := 'CF_DIB';
+ CF_TEXT : result := 'CF_TEXT';
+ CF_SYLK : result := 'CF_SYLK';
+ CF_TIFF : result := 'CF_TIFF';
+ CF_RIFF : result := 'CF_RIFF';
+ CF_WAVE : result := 'CF_WAVE';
+ CF_HDROP : result := 'CF_HDROP';
+ CF_BITMAP : result := 'CF_BITMAP';
+ CF_LOCALE : result := 'CF_LOCALE';
+ CF_OEMTEXT : result := 'CF_OEMTEXT';
+ CF_PALETTE : result := 'CF_PALETTE';
+ CF_PENDATA : result := 'CF_PENDATA';
+ CF_UNICODETEXT : result := 'CF_UNICODETEXT';
+ CF_ENHMETAFILE : result := 'CF_ENHMETAFILE';
+ CF_METAFILEPICT : result := 'CF_METAFILEPICT';
+ else
+ Result := Format('unknown (%d)', [CFFormat]);
+ end;
+end;
+
+function EnumDataToStringList(DataObj: IDataObject): TStringList;
+var
+ FE: FORMATETC;
+ EnumFormats: IEnumFORMATETC;
+ num: integer;
+ lname: string;
+ lMimeName: string;
+ FormatName: array[0..MAX_PATH] of Char;
+ i: integer;
+begin
+ if DataObj.EnumFormatEtc(DATADIR_GET, EnumFormats) <> S_OK then
+ raise Exception.Create('EnumDataToStringList: Failed to get EnumFormatEtc interface');
+
+ Result := TStringList.Create;
+ EnumFormats.Reset;
+ while EnumFormats.Next(1, FE, @num) = S_OK do
+ begin
+ lName := '';
+ i := GetClipboardFormatName(FE.cfFormat,FormatName,MAX_PATH);
+ if i <> 0 then
+ begin
+ lName := FormatName;
+ end
+ else
+ begin
+ lName := WindowsClipboardFormatToString(FE.cfFormat);
+ end;
+ Result.Add(lName);
+ end;
+end;
+
+function GetFormatEtc(const CFFormat: DWORD): FORMATETC;
+begin
+ Result.CfFormat := CFFormat;
+ Result.Ptd := nil;
+ Result.dwAspect := DVASPECT_CONTENT;
+ Result.lindex := -1;
+ Result.tymed := TYMED_HGLOBAL;
+end;
+
+procedure DeepCopyFormatEtc(P1, P2: PFormatEtc);
+begin
+ P2^ := P1^;
+ if P1^.ptd <> nil then begin
+ P2^.ptd := CoTaskMemAlloc(SizeOf(tagDVTARGETDEVICE));
+ P2^.ptd^ := P1^.ptd^;
+ end;
+end;
+
+function DupGlobalMem(hMem: HGLOBAL): HGLOBAL;
+var
+ len: DWORD;
+ Source: Pointer;
+ Dest: HGLOBAL;
+begin
+ len := GlobalSize(hMem);
+ Source := GlobalLock(hMem);
+ Dest := GlobalAlloc(GMEM_FIXED, len);
+ Move(Source^, Pointer(Dest)^, len);
+ GlobalUnlock(hMem);
+ Result := Dest;
+end;
+
+{ TDragFilesSource }
+
+constructor TDragFilesSource.Create;
+begin
+ inherited Create;
+ FFileNames := TStringList.Create;
+ FAliasFileNames := TStringList.Create;
+end;
+
+destructor TDragFilesSource.Destroy;
+begin
+ FreeAndNil(FFileNames);
+ FreeAndNil(FAliasFileNames);
+ inherited Destroy;
+end;
+
+procedure TDragFilesSource.Execute;
+var
+ DataObject: TfpgOLEDataObject;
+ DropSource: TfpgOLEDropSource;
+ dwEffect: DWORD;
+ dwResult: HRESULT;
+ I: Integer;
+ F: PFormatEtc;
+ S: string;
+ M: PStgMedium;
+begin
+ DataObject := TfpgOLEDataObject.Create;
+
+ { append filenames as one long string delimited by #0. ie: something like a PChar }
+ S := '';
+ for I := 0 to FFileNames.Count - 1 do
+ begin
+ SetLength(S, Length(S)+Length(FFileNames[I])+1);
+ Move(FFileNames[I][1], S[Length(S)-Length(FFileNames[I])], Length(FFileNames[I]));
+ S[Length(S)] := #0;
+ end;
+ SetLength(S, Length(S)+1);
+ S[Length(S)] := #0;
+
+ { description of data we are sending }
+ New(F);
+ F^.cfFormat := CF_HDROP;
+ F^.ptd := nil;
+ F^.dwAspect := DVASPECT_CONTENT;
+ F^.lindex := -1;
+ F^.tymed := TYMED_HGLOBAL;
+ DataObject.FormatEtcList.Add(F);
+
+ { storage for data we are sending }
+ New(M);
+ M^.tymed := TYMED_HGLOBAL;
+ M^.hGlobal := Cardinal(GlobalAlloc(GMEM_FIXED, SizeOf(TDropFiles)+Length(S)));
+ PDropFiles(M^.hGlobal)^.pFiles := SizeOf(TDropFiles);
+ PDropFiles(M^.hGlobal)^.pt := Point(0,0);
+ PDropFiles(M^.hGlobal)^.fNC := FALSE;
+ PDropFiles(M^.hGlobal)^.fWide := FALSE;
+ Move(S[1], PChar(M^.hGlobal+SizeOf(TDropFiles))^, Length(S));
+ DataObject.StgMediumList.Add(M);
+
+ if (FAliasFileNames.Count > 0) and (FAliasFileNames.Count = FFileNames.Count) then
+ begin
+ { append filename aliases as one long string delimited by #0. ie: something like a PChar }
+ S := '';
+ for I := 0 to FAliasFileNames.Count - 1 do
+ begin
+ SetLength(S, Length(S)+Length(FAliasFileNames[I])+1);
+ Move(FAliasFileNames[I][1], S[Length(S)-Length(FAliasFileNames[I])], Length(FAliasFileNames[I]));
+ S[Length(S)] := #0;
+ end;
+ SetLength(S, Length(S)+1);
+ S[Length(S)] := #0;
+
+ { description of data we are sending }
+ New(F);
+ F^.cfFormat := CF_FILENAMEMAP;
+ F^.ptd := nil;
+ F^.dwAspect := DVASPECT_CONTENT;
+ F^.lindex := -1;
+ F^.tymed := TYMED_HGLOBAL;
+ DataObject.FormatEtcList.Add(F);
+
+ { storage for data we are sending }
+ New(M);
+ M^.tymed := TYMED_HGLOBAL;
+ M^.hGlobal := Cardinal(GlobalAlloc(GMEM_FIXED, Length(S)));
+ Move(S[1], PChar(M^.hGlobal)^, Length(S));
+ DataObject.StgMediumList.Add(M);
+ end;
+
+ DropSource := TfpgOLEDropSource.Create;
+ dwResult := ActiveX.DoDragDrop(DataObject as IDataObject, DropSource as IDropSource, DROPEFFECT_COPY, @dwEffect);
+
+ if dwResult = DRAGDROP_S_DROP then
+ begin
+ if dwEffect = DROPEFFECT_COPY then
+ begin
+ // nothing to do. If this whas xxx_MOVE, we would remove data from source
+ end;
+ end;
+end;
+
+function TDragFilesSource.GetAliasFileNames: TStrings;
+begin
+ Result := FAliasFileNames;
+end;
+
+function TDragFilesSource.GetSourceFileNames: TStrings;
+begin
+ Result := FFileNames;
+end;
+
+procedure TDragFilesSource.SetAliasFileNames(const Value: TStrings);
+begin
+ FAliasFileNames.Assign(Value);
+end;
+
+procedure TDragFilesSource.SetSourceFileNames(const Value: TStrings);
+begin
+ FFileNames.Assign(Value);
+end;
+
+{ TfpgOLEDropSource }
+
+function TfpgOLEDropSource.GiveFeedback(dwEffect: Integer): HResult;
+begin
+ Result := DRAGDROP_S_USEDEFAULTCURSORS;
+end;
+
+function TfpgOLEDropSource.QueryContinueDrag(fEscapePressed: BOOL; grfKeyState: Integer): HResult;
+begin
+ if FEscapePressed then
+ Result := DRAGDROP_S_CANCEL
+ else if (grfKeyState and (MK_LBUTTON or MK_RBUTTON) = 0) then
+ Result := DRAGDROP_S_DROP
+ else
+ Result := S_OK;
+ {$IFDEF DND_DEBUG}
+ writeln('TfpgOLEDropSource.QueryContinueDrag Result = ', Result);
+ {$ENDIF}
+end;
+
+{ TfpgOLEDataObject }
+
+constructor TfpgOLEDataObject.Create(AFormatEtcList: TfpgOLEFormatEtcList);
+begin
+ inherited Create;
+ FFormatEtcList := TfpgOLEFormatEtcList.CreateCopy(AFormatEtcList);
+ FStgMediumList := TfpgOLEStgMediumList.Create;
+end;
+
+constructor TfpgOLEDataObject.Create;
+begin
+ inherited Create;
+ FFormatEtcList := TfpgOLEFormatEtcList.Create;
+ FStgMediumList := TfpgOLEStgMediumList.Create;
+end;
+
+function TfpgOLEDataObject.DAdvise(const formatetc: TFormatEtc; advf: DWORD;
+ const advSink: IAdviseSink; out dwConnection: DWORD): HResult;
+begin
+ Result := OLE_E_ADVISENOTSUPPORTED;
+end;
+
+destructor TfpgOLEDataObject.Destroy;
+begin
+ FreeAndNil(FFormatEtcList);
+ FreeAndNil(FStgMediumList);
+ inherited Destroy;
+end;
+
+function TfpgOLEDataObject.DUnadvise(dwConnection: DWORD): HResult;
+begin
+ Result := OLE_E_ADVISENOTSUPPORTED;
+end;
+
+function TfpgOLEDataObject.EnumDAdvise(out enumAdvise: IEnumStatData): HResult;
+begin
+ Result := OLE_E_ADVISENOTSUPPORTED;
+end;
+
+function TfpgOLEDataObject.EnumFormatEtc(dwDirection: DWORD;
+ out enumFormatEtc: IEnumFormatEtc): HResult;
+begin
+ if dwDirection = DATADIR_GET then
+ begin
+ enumFormatEtc := TfpgOLEEnumFormatEtc.Create(FFormatEtcList) as IEnumFormatEtc;
+ Result := S_OK;
+ end
+ else begin
+ Result := E_NOTIMPL;
+ end;
+end;
+
+function TfpgOLEDataObject.GetCanonicalFormatEtc(const formatetc: TFormatEtc;
+ out formatetcOut: TFormatEtc): HResult;
+begin
+ // Apparently we have to set this field to NULL even though we don't do anything else
+ formatetcOut.ptd := nil;
+ Result := E_NOTIMPL;
+end;
+
+function TfpgOLEDataObject.GetData(const formatetcIn: TFormatEtc;
+ out medium: TStgMedium): HResult;
+var
+ Idx: Integer;
+begin
+ Idx := LookupFormatEtc(formatetcIn);
+ if Idx = -1 then
+ Result := DV_E_FORMATETC
+ else
+ begin
+ medium.tymed := FFormatEtcList[Idx]^.tymed;
+ medium.PUnkForRelease := nil;
+ if medium.tymed = TYMED_HGLOBAL then
+ begin
+ medium.hGlobal := DupGlobalMem(FStgMediumList[Idx]^.hGlobal);
+ Result := S_OK;
+ end
+ else
+ Result := DV_E_FORMATETC;
+ end;
+end;
+
+function TfpgOLEDataObject.GetDataHere(const formatetc: TFormatEtc;
+ out medium: TStgMedium): HResult;
+begin
+ Result := DV_E_FORMATETC;
+end;
+
+function TfpgOLEDataObject.LookupFormatEtc(AFormat: TFormatEtc): Integer;
+var
+ I: Integer;
+begin
+ Result := -1;
+ for I := 0 to FFormatEtcList.Count - 1 do begin
+ if (FFormatEtcList[I]^.cfFormat = AFormat.cfFormat) and
+ (FFormatEtcList[I]^.dwAspect = AFormat.dwAspect) and
+ (FFormatEtcList[I]^.tymed = AFormat.tymed) then begin
+ Result := I;
+ Break;
+ end;
+ end;
+end;
+
+function TfpgOLEDataObject.QueryGetData(const formatetc: TFormatEtc): HResult;
+begin
+ if LookupFormatEtc(formatetc) >= 0 then begin
+ Result := S_OK;
+ end
+ else begin
+ Result := DV_E_FORMATETC;
+ end;
+end;
+
+function TfpgOLEDataObject.SetData(const formatetc: TFormatEtc;
+ const medium: TStgMedium; fRelease: BOOL): HResult;
+begin
+ Result := E_NOTIMPL;
+end;
+
+{ TfpgOLEEnumFormatEtc }
+
+function TfpgOLEEnumFormatEtc.Clone(out Enum: IEnumFormatEtc): HResult;
+var
+ C: TfpgOLEEnumFormatEtc;
+begin
+ // make a duplicate enumerator
+ C := TfpgOLEEnumFormatEtc.Create(FFormatEtcList);
+ // manually set the index state
+ C.FIndex := FIndex;
+ Enum := C as IEnumFormatEtc;
+ Result := S_OK;
+end;
+
+constructor TfpgOLEEnumFormatEtc.Create(AFormatEtcList: TfpgOLEFormatEtcList);
+begin
+ FFormatEtcList := TfpgOLEFormatEtcList.CreateCopy(AFormatEtcList);
+ FIndex := 0;
+end;
+
+destructor TfpgOLEEnumFormatEtc.Destroy;
+begin
+ FreeAndNil(FFormatEtcList);
+ inherited;
+end;
+
+function TfpgOLEEnumFormatEtc.Next(celt: ULong; out elt:FormatEtc;
+ pceltFetched: pULong): HResult;
+var
+ Copied: Integer;
+ OutBuf: PFormatEtc;
+begin
+ // copy the FORMATETC structures into the caller's buffer
+ OutBuf := PFormatEtc(@elt);
+ Copied := 0;
+ while(FIndex < FFormatEtcList.Count) and (Copied < celt) do begin
+ DeepCopyFormatEtc(FFormatEtcList[FIndex], OutBuf);
+ OutBuf := PFormatEtc(Cardinal(OutBuf) + SizeOf(TFormatEtc));
+ Inc(Copied);
+ FIndex := FIndex + 1;
+ end;
+
+ // store result
+ if (pceltFetched <> nil) then
+ pceltFetched^ := Copied;
+
+ // did we copy all that was requested?
+ if (Copied = celt) then Result := S_OK
+ else Result := S_FALSE;
+end;
+
+function TfpgOLEEnumFormatEtc.Reset: HResult;
+begin
+ FIndex := 0;
+ Result := S_OK;
+end;
+
+function TfpgOLEEnumFormatEtc.Skip(celt: ULong): HResult;
+begin
+ FIndex := FIndex + celt;
+ if FIndex <= FFormatEtcList.Count then Result := S_OK
+ else Result := S_FALSE;
+end;
+
+{ TfpgOLEFormatEtcList }
+
+constructor TfpgOLEFormatEtcList.CreateCopy(AFormatEtcList: TfpgOLEFormatEtcList);
+var
+ I: Integer;
+ P: PFormatEtc;
+begin
+ Create;
+ for I := 0 to AFormatEtcList.Count - 1 do begin
+ New(P);
+ DeepCopyFormatEtc(AFormatEtcList[I], P);
+ Add(P);
+ end;
+end;
+
+function TfpgOLEFormatEtcList.GetFormatEtc(Index: Integer): PFormatEtc;
+begin
+ Result := PFormatEtc(Get(Index));
+end;
+
+procedure TfpgOLEFormatEtcList.Notify(Ptr: Pointer; Action: TListNotification);
+begin
+ if Action = lnDeleted then begin
+ if PFormatEtc(Ptr)^.ptd <> nil then begin
+ CoTaskMemFree(PFormatEtc(Ptr)^.ptd);
+ end;
+ Dispose(PFormatEtc(Ptr));
+ end;
+ inherited;
+end;
+
+{ TfpgOLEStgMediumList }
+
+function TfpgOLEStgMediumList.GetStgMedium(Index: Integer): PStgMedium;
+begin
+ Result := PStgMedium(Get(Index));
+end;
+
+procedure TfpgOLEStgMediumList.Notify(Ptr: Pointer; Action: TListNotification);
+begin
+ if Action = lnDeleted then begin
+ if PStgMedium(Ptr)^.hGlobal <> 0 then begin
+ GlobalFree(PStgMedium(Ptr)^.hGlobal);
+ end;
+ Dispose(Ptr);
+ end;
+ inherited;
+end;
+
+{ TfpgOLEDropTarget }
+
+function TfpgOLEDropTarget.DragEnter(const dataObj: IDataObject;
+ grfKeyState: DWORD; pt: TPoint; var dwEffect: DWORD): HResult;
+//var
+// Effect: TfpgOLEDragDropEffect;
+begin
+ //dwEffect := DROPEFFECT_NONE;
+ //Effect := deNone;
+ DoDragEnter(dataObj, grfKeyState, pt, dwEffect);
+ //case Effect of
+ // deNone: dwEffect := DROPEFFECT_NONE;
+ // deCopy: dwEffect := DROPEFFECT_COPY;
+ // deMove: dwEffect := DROPEFFECT_MOVE;
+ // deLink: dwEffect := DROPEFFECT_LINK;
+ //end;
+ Result := S_OK;
+end;
+
+function TfpgOLEDropTarget.DragLeave: HResult;
+begin
+ Result := S_OK;
+ DoDragLeave;
+end;
+
+function TfpgOLEDropTarget.DragOver(grfKeyState: DWORD; pt: TPoint;
+ var dwEffect: DWORD): HResult;
+var
+ Effect: TfpgOLEDragDropEffect;
+begin
+ if ((MK_SHIFT and grfKeyState) = MK_SHIFT) and
+ ((dwEffect and DROPEFFECT_MOVE) = DROPEFFECT_MOVE) then begin
+ Effect := deMove;
+ end;
+ if ((MK_CONTROL and grfKeyState) = MK_CONTROL) and
+ ((dwEffect and DROPEFFECT_COPY) = DROPEFFECT_COPY) then begin
+ Effect := deCopy;
+ end;
+ if dwEffect and DROPEFFECT_COPY > 0 then Effect := deCopy
+ else if dwEffect and DROPEFFECT_MOVE > 0 then Effect := deMove
+ else if dwEffect and DROPEFFECT_LINK > 0 then Effect := deLink
+ else Effect := deNone;
+ DoDragOver(grfKeyState, pt, Effect);
+ case Effect of
+ deNone: dwEffect := DROPEFFECT_NONE;
+ deCopy: dwEffect := DROPEFFECT_COPY;
+ deMove: dwEffect := DROPEFFECT_MOVE;
+ deLink: dwEffect := DROPEFFECT_LINK;
+ end;
+ Result := S_OK;
+end;
+
+function TfpgOLEDropTarget.Drop(const dataObj: IDataObject;
+ grfKeyState: DWORD; pt: TPoint; var dwEffect: DWORD): HResult;
+var
+ Effect: TfpgOLEDragDropEffect;
+begin
+ if dwEffect and DROPEFFECT_COPY > 0 then
+ Effect := deCopy
+ else if dwEffect and DROPEFFECT_MOVE > 0 then
+ Effect := deMove
+ else if dwEffect and DROPEFFECT_LINK > 0 then
+ Effect := deLink
+ else
+ Effect := deNone;
+ DoDragDrop(dataObj, grfKeyState, pt, Effect);
+ Result := S_OK;
+end;
+
+function TfpgOLEDropTarget._AddRef: Integer;
+begin
+ Result := 1;
+end;
+
+function TfpgOLEDropTarget._Release: Integer;
+begin
+ Result := 1;
+end;
+
+function TfpgOLEDropTarget.QueryInterface(const IID: TGUID; out Obj): HResult;
+begin
+ if GetInterface(IID, Obj) then
+ Result := 0
+ else
+ Result := E_NOINTERFACE;
+end;
+
+constructor TfpgOLEDropTarget.Create(ADropTargetWidget: TfpgWindowBase);
+begin
+ inherited Create;
+ FDropTarget := ADropTargetWidget;
+ FRegistered := False;
+end;
+
+procedure TfpgOLEDropTarget.RegisterDragDrop;
+begin
+ ActiveX.RegisterDragDrop(TfpgWidget(FDropTarget).WinHandle, Self as IDropTarget);
+ FRegistered := True;
+end;
+
+procedure TfpgOLEDropTarget.RevokeDragDrop;
+begin
+ FRegistered := False;
+ ActiveX.RevokeDragDrop(TfpgWidget(FDropTarget).WinHandle);
+end;
+
+destructor TfpgOLEDropTarget.Destroy;
+begin
+ if FRegistered then RevokeDragDrop;
+ inherited;
+end;
+
+procedure TfpgOLEDropTarget.DoDragEnter(DataObj: IDataObject;
+ KeyState: LongInt; PT: TPoint; var Effect: DWORD);
+begin
+ if Assigned(FOnDragEnter) then begin
+ FOnDragEnter(Self, DataObj, KeyState, PT, Effect);
+ end;
+end;
+
+procedure TfpgOLEDropTarget.DoDragOver(KeyState: LongInt; PT: TPoint;
+ var Effect: TfpgOLEDragDropEffect);
+begin
+ if Assigned(FOnDragOver) then begin
+ FOnDragOver(Self, KeyState, PT, Effect);
+ end;
+end;
+
+procedure TfpgOLEDropTarget.DoDragLeave;
+begin
+ if Assigned(FOnDragLeave) then
+ FOnDragLeave(self);
+end;
+
+procedure TfpgOLEDropTarget.DoDragDrop(DataObj: IDataObject; KeyState: LongInt;
+ PT: TPoint; Effect: TfpgOLEDragDropEffect);
+begin
+ if Assigned(FOnDragDrop) then begin
+ FOnDragDrop(Self, DataObj, KeyState, PT, Effect);
+ end;
+end;
+
+{ TDragFilesTarget }
+
+function TDragFilesTarget.DoDragAcceptFiles(DataObj: IDataObject): Boolean;
+const
+ FormatEtcHDrop: TFormatEtc = (cfFormat:CF_HDROP;ptd:nil;dwAspect:DVASPECT_CONTENT;lindex:-1;tymed:TYMED_HGLOBAL);
+ FormatEtcFileDescriptor: TFormatEtc = (cfFormat:0;ptd:nil;dwAspect:DVASPECT_CONTENT;lindex:-1;tymed:TYMED_HGLOBAL);
+ FormatEtcFileContents: TFormatEtc = (cfFormat:0;ptd:nil;dwAspect:DVASPECT_CONTENT;lindex:-1;tymed:TYMED_ISTREAM);
+var
+ StgMedium: TStgMedium;
+ DropHandle: HDROP;
+ EnumFormatEtc: IEnumFORMATETC;
+ FE: TFormatEtc;
+ FetchedCount: Longint;
+ FormatName: array[0..MAX_PATH] of Char;
+ FileGroupDescriptor: PFileGroupDescriptorA;
+ I, Count: Integer;
+ FileDescriptor: TFileDescriptorA;
+ FileNames: TStringList;
+begin
+ FileNames := TStringList.Create;
+ try
+ if Assigned(FOnDragAcceptFiles) then
+ begin
+ Result := False;
+ FormatEtcFileDescriptor.cfFormat := CF_FILEDESCRIPTOR;
+ FormatEtcFileContents.cfFormat := CF_FILECONTENTS;
+
+ if (DataObj.QueryGetData(FormatEtcHDrop) = S_OK) and
+ (DataObj.GetData(FormatEtcHDrop,StgMedium) = S_OK) then
+ begin
+ DropHandle := StgMedium.hGlobal;
+ GetFileNamesFromDropHandle(DropHandle, FileNames);
+ Result := FOnDragAcceptFiles(Self, FileNames);
+ ReleaseStgMedium(StgMedium);
+ end
+ else
+ if (DataObj.QueryGetData(FormatEtcFileDescriptor) = S_OK) and
+ (DataObj.QueryGetData(FormatEtcFileContents) = S_OK) and
+ (DataObj.GetData(FormatEtcFileDescriptor,StgMedium) = S_OK) then
+ begin
+ FileGroupDescriptor := GlobalLock(StgMedium.hGlobal);
+ if FileGroupDescriptor <> nil then
+ begin
+ Count := FileGroupDescriptor^.cItems;
+ I := 0;
+ while I < Count do
+ begin
+ FileDescriptor := FileGroupDescriptor^.fgd[I];
+ FileNames.Add(FileDescriptor.cFileName);
+ Inc(I);
+ end;
+ GlobalUnlock(StgMedium.hGlobal);
+ end;
+ Result := FOnDragAcceptFiles(Self, FileNames);
+ ReleaseStgMedium(StgMedium);
+ end
+ else
+ begin
+// DataObj.EnumFormatEtc(DATADIR_GET, EnumFormatEtc);
+// EnumFormatEtc.Reset;
+// while EnumFormatEtc.Next(1, FE, @FetchedCount) = S_OK do begin
+// GetClipboardFormatName(FE.cfFormat,FormatName,MAX_PATH);
+// ShowMessage(FormatName);
+// end;
+ end;
+ end
+ else
+ begin
+ Result := True;
+ end;
+ finally
+ FileNames.Free;
+ end;
+end;
+
+procedure TDragFilesTarget.DoDragEnter(DataObj: IDataObject;
+ KeyState: LongInt; PT: TPoint; var Effect: DWORD);
+begin
+ FDragAcceptFiles := DoDragAcceptFiles(DataObj);
+ if FDragAcceptFiles and DoDragAcceptPosition(PT) then
+ inherited DoDragEnter(DataObj, KeyState, PT, Effect)
+ else
+ Effect := DROPEFFECT_NONE;
+end;
+
+procedure TDragFilesTarget.DoDragOver(KeyState: LongInt; PT: TPoint; var Effect: TfpgOLEDragDropEffect);
+begin
+ if FDragAcceptFiles and DoDragAcceptPosition(PT) then
+ inherited DoDragOver(KeyState, PT, Effect)
+ else
+ Effect := deNone;
+end;
+
+procedure TDragFilesTarget.DoDragDrop(DataObj: IDataObject;
+ KeyState: LongInt; PT: TPoint; Effect: TfpgOLEDragDropEffect);
+begin
+ DoDropFiles(DataObj, PT);
+ inherited;
+end;
+
+function TDragFilesTarget.DoDragAcceptPosition(PT: TPoint): Boolean;
+begin
+ if Assigned(FOnDragAcceptPosition) then begin
+ Result := FOnDragAcceptPosition(Self, PT);
+ end else begin
+ Result := True;
+ end;
+end;
+
+procedure TDragFilesTarget.DoDropFiles(DataObj: IDataObject; PT: TPoint);
+const
+ FormatEtcHDrop: TFormatEtc = (cfFormat:CF_HDROP;ptd:nil;dwAspect:DVASPECT_CONTENT;lindex:-1;tymed:TYMED_HGLOBAL);
+ FormatEtcFileDescriptor: TFormatEtc =
+ (cfFormat:0;ptd:nil;dwAspect:DVASPECT_CONTENT;lindex:-1;tymed:TYMED_HGLOBAL);
+ FormatEtcFileContents: TFormatEtc =
+ (cfFormat:0;ptd:nil;dwAspect:DVASPECT_CONTENT;lindex:-1;tymed:TYMED_ISTREAM);
+var
+ StgMedium, StgMediumContents: TStgMedium;
+ DropHandle: HDROP;
+ FileNames: TStringList;
+ FileGroupDescriptor: PFileGroupDescriptorA;
+ I, Count: Integer;
+ FileDescriptor: TFileDescriptorA;
+ Path: array[0..MAX_PATH] of Char;
+ TempFileName: string;
+begin
+ if not Assigned(FOnDropFiles) then Exit;
+ FileNames := TStringList.Create;
+ try
+ FormatEtcFileDescriptor.cfFormat := CF_FILEDESCRIPTOR;
+ FormatEtcFileContents.cfFormat := CF_FILECONTENTS;
+ if (DataObj.QueryGetData(FormatEtcHDrop) = S_OK) and
+ (DataObj.GetData(FormatEtcHDrop,StgMedium) = S_OK) then begin
+ DropHandle := StgMedium.hGlobal;
+ GetFileNamesFromDropHandle(DropHandle, FileNames);
+ FOnDropFiles(Self, PT, FileNames);
+ ReleaseStgMedium(StgMedium);
+ end else
+ if (DataObj.QueryGetData(FormatEtcFileDescriptor) = S_OK) and
+ (DataObj.QueryGetData(FormatEtcFileContents) = S_OK) and
+ (DataObj.GetData(FormatEtcFileDescriptor,StgMedium) = S_OK) then begin
+ GetTempPath(MAX_PATH, Path);
+ GetTempFileName(Path, 'PXM', 0, Path);
+ FileGroupDescriptor := GlobalLock(StgMedium.hGlobal);
+ if FileGroupDescriptor <> nil then begin
+ Count := FileGroupDescriptor^.cItems;
+ I := 0;
+ while I < Count do begin
+ FileDescriptor := FileGroupDescriptor^.fgd[I];
+ TempFileName := ChangeFileExt(Path, ExtractFileExt(FileDescriptor.cFileName));
+ FormatEtcFileContents.lindex := I;
+ if (DataObj.GetData(FormatEtcFileContents,StgMediumContents) = S_OK) then begin
+ StreamToFile(IStream(StgMediumContents.pstm), TempFileName);
+ FileNames.Clear;
+ FileNames.Add(TempFileName);
+ FOnDropFiles(Self, PT, FileNames);
+ ReleaseStgMedium(StgMediumContents);
+ end;
+ Inc(I);
+ end;
+ GlobalUnlock(StgMedium.hGlobal);
+ end;
+ FOnDropFiles(Self, PT, FileNames);
+ ReleaseStgMedium(StgMedium);
+ ReleaseStgMedium(StgMediumContents);
+ end;
+ finally
+ FileNames.Free;
+ end;
+end;
+
+procedure TDragFilesTarget.GetFileNamesFromDropHandle(DropHandle: HDROP; SL: TStrings);
+var
+ I: Integer;
+ Path: array[0..MAX_PATH] of Char;
+begin
+ for I := 0 to DragQueryFile(DropHandle, $FFFFFFFF, nil, 0) do begin
+ DragQueryFile(DropHandle, I, Path, MAX_PATH);
+ SL.Add(Path);
+ end;
+ DragFinish(DropHandle);
+end;
+
+procedure TDragFilesTarget.StreamToFile(Stream: IStream; const FileName: string);
+const
+ BLOCK_SIZE = 4096;
+var
+ BytesRead: Longint;
+ FileStream: TFileStream;
+ Buffer: array[0..BLOCK_SIZE] of Byte;
+begin
+ FileStream := TFileStream.Create(FileName, fmCreate);
+ try
+ while (Stream.Read(@Buffer[0], BLOCK_SIZE, @BytesRead) = S_OK) and (BytesRead > 0) do begin
+ FileStream.Write(Buffer, BytesRead);
+ end;
+ finally
+ FileStream.Free;
+ end;
+end;
+
+initialization
+ CF_FILENAMEMAP := RegisterClipboardFormat(CFSTR_FILENAMEMAP);
+ CF_FILEDESCRIPTOR := RegisterClipboardFormat(CFSTR_FILEDESCRIPTOR);
+ CF_FILECONTENTS := RegisterClipboardFormat(CFSTR_FILECONTENTS);
+
+finalization
+
+end.
+
diff --git a/src/corelib/gdi/fpg_utils_impl.inc b/src/corelib/gdi/fpg_utils_impl.inc
index d3bb2f0c..ab4761ae 100644
--- a/src/corelib/gdi/fpg_utils_impl.inc
+++ b/src/corelib/gdi/fpg_utils_impl.inc
@@ -1,7 +1,7 @@
{%mainunit fpg_utils.pas}
uses
- Shellapi;
+ Shellapi, Windows, fpg_constants, fpg_stringutils;
// GDI specific implementations of encoding functions
@@ -26,3 +26,22 @@ begin
end;
end;
+function fpgFileSize(const AFilename: TfpgString): integer;
+var
+ FindData: TWIN32FindDataW;
+ FindHandle: THandle;
+ Str: widestring;
+begin
+ // Don't assign the widestring to TSearchRec.name because it is of type
+ // string, which will generate a conversion to the system encoding
+ Str := UTF8Decode(AFilename);
+ FindHandle:=Windows.FindFirstFileW(PWideChar(Str), FindData);
+ if FindHandle=Windows.Invalid_Handle_value then
+ begin
+ Result:=-1;
+ exit;
+ end;
+ Result := (int64(FindData.nFileSizeHigh) shl 32)+FindData.nFileSizeLow;
+ Windows.FindClose(FindHandle);
+end;
+
diff --git a/src/corelib/gdi/fpgui_toolkit.lpk b/src/corelib/gdi/fpgui_toolkit.lpk
index 11731043..2f606e9f 100644
--- a/src/corelib/gdi/fpgui_toolkit.lpk
+++ b/src/corelib/gdi/fpgui_toolkit.lpk
@@ -5,7 +5,7 @@
<Name Value="fpgui_toolkit"/>
<Author Value="Graeme Geldenhuys"/>
<CompilerOptions>
- <Version Value="8"/>
+ <Version Value="9"/>
<PathDelim Value="\"/>
<SearchPaths>
<IncludeFiles Value="..\..\"/>
@@ -16,7 +16,6 @@
<SyntaxOptions>
<AllowLabel Value="False"/>
<CPPInline Value="False"/>
- <UseAnsiStrings Value="True"/>
</SyntaxOptions>
</Parsing>
<CodeGeneration>
@@ -31,7 +30,7 @@
<Description Value="fpGUI Toolkit"/>
<License Value="LGPL 2 with static linking exception."/>
<Version Minor="7"/>
- <Files Count="80">
+ <Files Count="81">
<Item1>
<Filename Value="..\stdimages.inc"/>
<Type Value="Include"/>
@@ -352,6 +351,10 @@
<Filename Value="..\..\VERSION_FILE.inc"/>
<Type Value="Include"/>
</Item80>
+ <Item81>
+ <Filename Value="fpg_oledragdrop.pas"/>
+ <UnitName Value="fpg_OLEDragDrop"/>
+ </Item81>
</Files>
<LazDoc Paths="..\..\..\docs\xml\corelib\;..\..\..\docs\xml\corelib\x11\;..\..\..\docs\xml\corelib\gdi\;..\..\..\docs\xml\gui\"/>
<RequiredPkgs Count="1">
diff --git a/src/corelib/gdi/fpgui_toolkit.pas b/src/corelib/gdi/fpgui_toolkit.pas
index 2e3e81b6..adc1c74d 100644
--- a/src/corelib/gdi/fpgui_toolkit.pas
+++ b/src/corelib/gdi/fpgui_toolkit.pas
@@ -1,4 +1,4 @@
-{ This file was automatically created by Lazarus. do not edit!
+{ This file was automatically created by Lazarus. Do not edit!
This source is only used to compile and install the package.
}
@@ -18,7 +18,7 @@ uses
fpg_radiobutton, fpg_scrollbar, fpg_style, fpg_tab, fpg_trackbar, fpg_tree,
fpgui_db, fpg_gdi, fpg_impl, fpg_splitter, fpg_hint, fpg_spinedit,
fpg_extgraphics, fpg_ColorMapping, fpg_ColorWheel, fpg_interface,
- fpg_editbtn, fpg_imgfmt_jpg, fpg_imgutils;
+ fpg_editbtn, fpg_imgfmt_jpg, fpg_imgutils, fpg_OLEDragDrop;
implementation
diff --git a/src/corelib/keys.inc b/src/corelib/keys.inc
index f8b24b34..4d62c4bf 100644
--- a/src/corelib/keys.inc
+++ b/src/corelib/keys.inc
@@ -5,7 +5,7 @@
GII info at <http://www.ggi-project.org/packages/libgii.html>
}
-{%mainunit gfxbase.pas}
+{%mainunit fpg_base.pas}
const
diff --git a/src/corelib/lang_af.inc b/src/corelib/lang_af.inc
index 70598111..6dad1634 100644
--- a/src/corelib/lang_af.inc
+++ b/src/corelib/lang_af.inc
@@ -7,6 +7,7 @@ rserrnotassigned = '<%s> is nie toegewys nie';
rsnewitemdetected = '''n Nuwe item is opgespoor.';
rsabort = 'Staak';
rsabout = 'Aangaande %s';
+rsaddcurrentdirectory = 'Add current directory';
rsall = 'Alles';
rsallfiles = 'Alle Lêers';
rscollectionallfonts = 'Alle Lettertipes';
@@ -20,9 +21,11 @@ rsbold = 'Vetdruk';
rscancel = 'Kanselleer';
rscannotcreatedir = 'Kan nie die lêergids skep nie';
rschange = 'Verander';
-rscharactermap = 'Character Map';
+rschangetitle = 'Change Title';
+rscharactermap = 'Karakter Kaart';
rsclose = 'Sluit';
rscollection = 'Versameling';
+rsconfigurebookmarks = 'Configure Bookmarks';
rsconfirm = 'Bevestig';
rsconfirmation = 'Bevestiging';
rscopy = 'Kopieer';
@@ -36,6 +39,7 @@ rsshortdec = 'Des';
rslongdec = 'Desember';
rsdelete = 'Skrap';
rsdirectories = 'Lêergidse';
+rsdirectory = 'Directory';
rsdrive = 'Dryf';
rsedit = 'Redigeer';
rslanguage = 'Afrikaans';
@@ -61,7 +65,7 @@ rshelp = 'Help';
rsignore = 'Ignoreer';
rsinformation = 'Informasie';
rsinsert = 'Invoeg';
-rsinsertfromcharactermap = 'Insert from Character Map';
+rsinsertfromcharactermap = 'Voeg in van Karakter Kaart';
rsitalic = 'Kursief';
rserritemofwrongtype = 'Die item is nie van <%s> tiepe nie!';
rsshortjan = 'Jan';
@@ -79,6 +83,8 @@ rsmessage = 'Boodskap';
rsfilemodifiedtime = 'Wysigings Tyd';
rsshortmon = 'Ma';
rslongmon = 'Maandag';
+rsmovedown = 'Move Down';
+rsmoveup = 'Move Up';
rsname = 'Naam';
rsno = 'Nee';
rsnotoall = 'Nee vir Alles';
@@ -113,7 +119,7 @@ rssize = 'Groote';
rsstyle = 'Steil';
rsshortsun = 'So';
rslongsun = 'Sondag';
-rstexttoinsert = 'Text to Insert';
+rstexttoinsert = 'Teks om in te voeg';
rsshortthu = 'Do';
rslongthu = 'Donderdag';
rstoday = 'Vandag';
diff --git a/src/corelib/lang_de.inc b/src/corelib/lang_de.inc
index f3f45489..c47c4280 100644
--- a/src/corelib/lang_de.inc
+++ b/src/corelib/lang_de.inc
@@ -7,6 +7,7 @@ rserrnotassigned = '<%s> nicht zugewiesen';
rsnewitemdetected = 'Es wurde ein neuer Eintrag gefunden.';
rsabort = 'Abbrechen';
rsabout = 'Über %s';
+rsaddcurrentdirectory = 'Add current directory';
rsall = 'Alle';
rsallfiles = 'Alle Dateien';
rscollectionallfonts = 'Alle Schriften';
@@ -20,9 +21,11 @@ rsbold = 'Fett';
rscancel = 'Abbrechen';
rscannotcreatedir = 'Kann Verzeichnis nicht anlegen';
rschange = 'Ändern';
+rschangetitle = 'Change Title';
rscharactermap = 'Character Map';
rsclose = 'Schließen';
rscollection = 'Sammlung';
+rsconfigurebookmarks = 'Configure Bookmarks';
rsconfirm = 'Bestätigen';
rsconfirmation = 'Bestätigung';
rscopy = 'Kopieren';
@@ -36,6 +39,7 @@ rsshortdec = 'Dez';
rslongdec = 'Dezember';
rsdelete = 'Löschen';
rsdirectories = 'Verzeichnisse';
+rsdirectory = 'Directory';
rsdrive = 'Laufwerk';
rsedit = 'Bearbeiten';
rslanguage = 'Englisch';
@@ -79,6 +83,8 @@ rsmessage = 'Meldung';
rsfilemodifiedtime = 'Änderungszeit';
rsshortmon = 'Mon';
rslongmon = 'Montag';
+rsmovedown = 'Move Down';
+rsmoveup = 'Move Up';
rsname = 'Name';
rsno = 'Nein';
rsnotoall = 'Nein zu allem';
diff --git a/src/corelib/lang_en.inc b/src/corelib/lang_en.inc
index a7db8859..881c23e5 100644
--- a/src/corelib/lang_en.inc
+++ b/src/corelib/lang_en.inc
@@ -7,6 +7,7 @@ rserrnotassigned = '<%s> not assigned';
rsnewitemdetected = 'A new item has been detected.';
rsabort = 'Abort';
rsabout = 'About %s';
+rsaddcurrentdirectory = 'Add current directory';
rsall = 'All';
rsallfiles = 'All Files';
rscollectionallfonts = 'All Fonts';
@@ -20,9 +21,11 @@ rsbold = 'Bold';
rscancel = 'Cancel';
rscannotcreatedir = 'Cannot create directory';
rschange = 'Change';
+rschangetitle = 'Change Title';
rscharactermap = 'Character Map';
rsclose = 'Close';
rscollection = 'Collection';
+rsconfigurebookmarks = 'Configure Bookmarks';
rsconfirm = 'Confirm';
rsconfirmation = 'Confirmation';
rscopy = 'Copy';
@@ -36,6 +39,7 @@ rsshortdec = 'Dec';
rslongdec = 'December';
rsdelete = 'Delete';
rsdirectories = 'Directories';
+rsdirectory = 'Directory';
rsdrive = 'Drive';
rsedit = 'Edit';
rslanguage = 'English';
@@ -79,6 +83,8 @@ rsmessage = 'Message';
rsfilemodifiedtime = 'Mod. Time';
rsshortmon = 'Mon';
rslongmon = 'Monday';
+rsmovedown = 'Move Down';
+rsmoveup = 'Move Up';
rsname = 'Name';
rsno = 'No';
rsnotoall = 'No to All';
diff --git a/src/corelib/lang_es.inc b/src/corelib/lang_es.inc
index 099f1939..8e3979b0 100644
--- a/src/corelib/lang_es.inc
+++ b/src/corelib/lang_es.inc
@@ -7,6 +7,7 @@ rserrnotassigned = '<%s> no está asignado';
rsnewitemdetected = 'A new item has been detected.';
rsabort = 'Abortar';
rsabout = 'Acerca de %s';
+rsaddcurrentdirectory = 'Add current directory';
rsall = 'Todos';
rsallfiles = 'Todos los Archivos';
rscollectionallfonts = 'Todas las Fuentes';
@@ -20,9 +21,11 @@ rsbold = 'Negrita';
rscancel = 'Cancelar';
rscannotcreatedir = 'No se puede crear la carpeta';
rschange = 'Cambiar';
+rschangetitle = 'Change Title';
rscharactermap = 'Character Map';
rsclose = 'Cerrar';
rscollection = 'Colección';
+rsconfigurebookmarks = 'Configure Bookmarks';
rsconfirm = 'Confirmar';
rsconfirmation = 'Confirmación';
rscopy = 'Copiar';
@@ -36,6 +39,7 @@ rsshortdec = 'Dec';
rslongdec = 'December';
rsdelete = 'Borrar';
rsdirectories = 'Carpetas';
+rsdirectory = 'Directory';
rsdrive = 'Unidad';
rsedit = 'Editar';
rslanguage = 'Español';
@@ -79,6 +83,8 @@ rsmessage = 'Mensaje';
rsfilemodifiedtime = 'Hora de Modif.';
rsshortmon = 'Lun';
rslongmon = 'Lunes';
+rsmovedown = 'Move Down';
+rsmoveup = 'Move Up';
rsname = 'Nombre';
rsno = 'No';
rsnotoall = 'No a Todo';
diff --git a/src/corelib/lang_fr.inc b/src/corelib/lang_fr.inc
index b75ee215..606e333b 100644
--- a/src/corelib/lang_fr.inc
+++ b/src/corelib/lang_fr.inc
@@ -7,6 +7,7 @@ rserrnotassigned = '<%s> n''''est pas assigné';
rsnewitemdetected = 'Un nouvel item a été détecté';
rsabort = 'Arrêter';
rsabout = 'A propos de %s';
+rsaddcurrentdirectory = 'Add current directory';
rsall = 'Tous';
rsallfiles = 'Tous les fichiers';
rscollectionallfonts = 'Toutes les polices';
@@ -20,9 +21,11 @@ rsbold = 'Gras';
rscancel = 'Annuler';
rscannotcreatedir = 'Impossible de créer le répertoire';
rschange = 'Modifier';
-rscharactermap = 'Character Map';
+rschangetitle = 'Change Title';
+rscharactermap = 'Table de caractères';
rsclose = 'Fermer';
rscollection = 'Collection';
+rsconfigurebookmarks = 'Configure Bookmarks';
rsconfirm = 'Confirmer';
rsconfirmation = 'Confirmation';
rscopy = 'Copier';
@@ -36,6 +39,7 @@ rsshortdec = 'Déc';
rslongdec = 'Décembre';
rsdelete = 'Supprimer';
rsdirectories = 'Répertoires';
+rsdirectory = 'Directory';
rsdrive = 'Disque';
rsedit = 'Editer';
rslanguage = 'Français';
@@ -79,6 +83,8 @@ rsmessage = 'Message';
rsfilemodifiedtime = 'Date modif.';
rsshortmon = 'Lun';
rslongmon = 'Lundi';
+rsmovedown = 'Move Down';
+rsmoveup = 'Move Up';
rsname = 'Nom';
rsno = 'Non';
rsnotoall = 'Non à tous';
@@ -113,7 +119,7 @@ rssize = 'Taille';
rsstyle = 'Style';
rsshortsun = 'Dim';
rslongsun = 'Dimanche';
-rstexttoinsert = 'Text to Insert';
+rstexttoinsert = 'Texte à insérer';
rsshortthu = 'Jeu';
rslongthu = 'Jeudi';
rstoday = 'Aujourd''''hui';
diff --git a/src/corelib/lang_it.inc b/src/corelib/lang_it.inc
index ece9f08f..2d056311 100644
--- a/src/corelib/lang_it.inc
+++ b/src/corelib/lang_it.inc
@@ -7,6 +7,7 @@ rserrnotassigned = '<%s> non assegnato';
rsnewitemdetected = 'E'''' stato rilevato un nuovo elemento.';
rsabort = 'Interrompi';
rsabout = 'Informazioni %s';
+rsaddcurrentdirectory = 'Add current directory';
rsall = 'Tutto';
rsallfiles = 'Tutti i Files';
rscollectionallfonts = 'Tutti i Fonts';
@@ -20,9 +21,11 @@ rsbold = 'Grassetto';
rscancel = 'Annulla';
rscannotcreatedir = 'Non riesco a creare la cartella';
rschange = 'Cambia';
+rschangetitle = 'Change Title';
rscharactermap = 'Character Map';
rsclose = 'Chiudi';
rscollection = 'Collezione';
+rsconfigurebookmarks = 'Configure Bookmarks';
rsconfirm = 'Conferma';
rsconfirmation = 'Conferma';
rscopy = 'Copia';
@@ -36,6 +39,7 @@ rsshortdec = 'Dic';
rslongdec = 'Dicembre';
rsdelete = 'Cancella';
rsdirectories = 'Cartelle';
+rsdirectory = 'Directory';
rsdrive = 'Disco';
rsedit = 'Modifica';
rslanguage = 'Italiano';
@@ -79,6 +83,8 @@ rsmessage = 'Messaggio';
rsfilemodifiedtime = 'Tempo Mod.';
rsshortmon = 'Lun';
rslongmon = 'Lunedì';
+rsmovedown = 'Move Down';
+rsmoveup = 'Move Up';
rsname = 'Nome';
rsno = 'No';
rsnotoall = 'No a Tutto';
diff --git a/src/corelib/lang_pt.inc b/src/corelib/lang_pt.inc
index b6a2d330..76b21500 100644
--- a/src/corelib/lang_pt.inc
+++ b/src/corelib/lang_pt.inc
@@ -7,6 +7,7 @@ rserrnotassigned = '<%s> not assigned';
rsnewitemdetected = 'A new item has been detected.';
rsabort = 'Abortar';
rsabout = 'About %s';
+rsaddcurrentdirectory = 'Add current directory';
rsall = 'Todos';
rsallfiles = 'Todos os arquivos';
rscollectionallfonts = 'All Fonts';
@@ -20,9 +21,11 @@ rsbold = 'Negrito';
rscancel = 'Cancelar';
rscannotcreatedir = 'Não foi possível criar diretório';
rschange = 'Editar';
+rschangetitle = 'Change Title';
rscharactermap = 'Character Map';
rsclose = 'Fechar';
rscollection = 'Coleção';
+rsconfigurebookmarks = 'Configure Bookmarks';
rsconfirm = 'Confirmar';
rsconfirmation = 'Confirmação';
rscopy = 'Copy';
@@ -36,6 +39,7 @@ rsshortdec = 'Dec';
rslongdec = 'December';
rsdelete = 'Deletar';
rsdirectories = 'Diretórios';
+rsdirectory = 'Directory';
rsdrive = 'Drive';
rsedit = 'Editar';
rslanguage = 'Português';
@@ -79,6 +83,8 @@ rsmessage = 'Mensagem';
rsfilemodifiedtime = 'Mod. Time';
rsshortmon = 'Mon';
rslongmon = 'Monday';
+rsmovedown = 'Move Down';
+rsmoveup = 'Move Up';
rsname = 'Nome';
rsno = 'Não';
rsnotoall = 'Não para todos';
diff --git a/src/corelib/lang_ru.inc b/src/corelib/lang_ru.inc
index f1571f0b..e989d927 100644
--- a/src/corelib/lang_ru.inc
+++ b/src/corelib/lang_ru.inc
@@ -7,6 +7,7 @@ rserrnotassigned = 'Значение <%s> не определено';
rsnewitemdetected = 'Обнаружен новый элемент';
rsabort = 'Прервать';
rsabout = 'Информация о %s';
+rsaddcurrentdirectory = 'Add current directory';
rsall = 'Все';
rsallfiles = 'Все файлы';
rscollectionallfonts = 'Все шрифты';
@@ -20,9 +21,11 @@ rsbold = 'Жирный';
rscancel = 'Отмена';
rscannotcreatedir = 'Невозможно создать директорию';
rschange = 'Изменить';
+rschangetitle = 'Change Title';
rscharactermap = 'Character Map';
rsclose = 'Закрыть';
rscollection = 'Группа';
+rsconfigurebookmarks = 'Configure Bookmarks';
rsconfirm = 'Подтвердить';
rsconfirmation = 'Подтверждение';
rscopy = 'Копировать';
@@ -36,6 +39,7 @@ rsshortdec = 'Дек';
rslongdec = 'Декабрь';
rsdelete = 'Удалить';
rsdirectories = 'Директории';
+rsdirectory = 'Directory';
rsdrive = 'Диск';
rsedit = 'Редактировать';
rslanguage = 'Русский';
@@ -79,6 +83,8 @@ rsmessage = 'Сообщение';
rsfilemodifiedtime = 'Изменен';
rsshortmon = 'Пн';
rslongmon = 'Понедельник';
+rsmovedown = 'Move Down';
+rsmoveup = 'Move Up';
rsname = 'Название';
rsno = 'Нет';
rsnotoall = 'Нет для всех';
diff --git a/src/corelib/predefinedcolors.inc b/src/corelib/predefinedcolors.inc
index 1e6c4b54..ddb333b9 100644
--- a/src/corelib/predefinedcolors.inc
+++ b/src/corelib/predefinedcolors.inc
@@ -29,12 +29,13 @@
clMoneyGreen = TfpgColor($C0DCC0);
clSkyBlue = TfpgColor($A6CAF0);
clMedGray = TfpgColor($A0A0A4);
+ clUIDesignerGreen = TfpgColor($C0E0C0);
// System named color identifiers. DON'T CHANGE THE ORDER!
- cl_BaseNamedColor = TfpgColor($80000000);
+ cl_BaseNamedColor = $80000000;
clWindowBackground = TfpgColor(cl_BaseNamedColor + 1);
clBoxColor = TfpgColor(cl_BaseNamedColor + 2);
@@ -67,6 +68,7 @@
clGridSelectionText = TfpgColor(cl_BaseNamedColor + 29);
clGridInactiveSel = TfpgColor(cl_BaseNamedColor + 30);
clGridInactiveSelText = TfpgColor(cl_BaseNamedColor + 31);
+ clSplitterGrabBar = TfpgColor(cl_BaseNamedColor + 32);
diff --git a/src/corelib/stdimages.inc b/src/corelib/stdimages.inc
index 0c880278..c494f96d 100644
--- a/src/corelib/stdimages.inc
+++ b/src/corelib/stdimages.inc
@@ -1,347 +1,55 @@
-{%mainunit fpg_stdimages.pas}
Const
- stdimg_list_add_16 : Array[0..821] of byte = (
- 66, 77, 54, 3, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 40, 0, 0,
- 0, 16, 0, 0, 0, 16, 0, 0, 0, 1, 0, 24, 0, 0, 0, 0, 0,
- 0, 3, 0, 0,215, 13, 0, 0,215, 13, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,182,132,
- 93,164,101, 52,164,101, 52,182,132, 93,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,164,101, 52,230,206,
- 183,230,206,183,164,101, 52,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,164,101, 52,230,206,183,217,173,
- 134,164,101, 52,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,164,101, 52,230,206,183,217,173,134,164,101,
- 52,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,182,132, 93,164,101, 52,164,101, 52,
- 164,101, 52,164,101, 52,217,173,134,217,173,134,164,101, 52,164,101,
- 52,164,101, 52,164,101, 52,182,132, 93,255,255,255,255,255,255,255,
- 255,255,255,255,255,164,101, 52,229,204,180,219,183,149,219,182,148,
- 218,180,146,218,179,144,217,173,134,216,170,131,215,168,127,215,166,
- 125,224,190,159,164,101, 52,255,255,255,255,255,255,255,255,255,255,
- 255,255,164,101, 52,232,211,192,231,209,187,231,209,188,230,206,183,
- 230,206,183,230,206,183,230,206,183,230,205,182,230,204,181,230,204,
- 182,164,101, 52,255,255,255,255,255,255,255,255,255,255,255,255,182,
- 132, 93,164,101, 52,164,101, 52,164,101, 52,164,101, 52,230,206,183,
- 230,206,183,164,101, 52,164,101, 52,164,101, 52,164,101, 52,182,132,
- 93,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,164,101, 52,230,206,183,230,206,183,
- 164,101, 52,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,164,101, 52,230,206,183,230,206,183,164,101, 52,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,164,101, 52,230,206,183,230,206,183,164,101, 52,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,182,
- 132, 93,164,101, 52,164,101, 52,182,132, 93,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255);
-
-Const
- stdimg_menu_saveas_16 : Array[0..821] of byte = (
- 66, 77, 54, 3, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 40, 0, 0,
- 0, 16, 0, 0, 0, 16, 0, 0, 0, 1, 0, 24, 0, 0, 0, 0, 0,
- 0, 3, 0, 0, 19, 11, 0, 0, 19, 11, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0,216,171,142,205,149,112,189,115, 66,183,104, 53,181,104,
- 53,180,103, 52,178,102, 52,176,101, 51,174,100, 51,172, 99, 50,170,
- 98, 50,169, 97, 50,168, 96, 49,167, 97, 50,171,105, 60,188,134, 97,
- 195,125, 79,235,198,173,234,197,173,254,251,248,254,251,248,254,251,
- 248,254,251,248,254,251,248,254,251,248,254,251,248,254,251,248,254,
- 251,248,254,251,248,200,154,124,199,152,121,173,107, 64,186,108, 56,
- 237,202,179,224,162,122,254,250,247, 98,192,136, 98,192,136, 98,192,
- 136, 98,192,136, 98,192,136, 98,192,136, 98,192,136, 98,192,136,253,
- 249,246,202,141,101,201,155,124,167, 97, 50,187,108, 56,238,204,182,
- 225,162,122,254,250,247,191,220,194,191,220,194,191,220,194,191,220,
- 194,191,220,194,191,220,194,191,220,194,191,220,194,253,249,246,205,
- 144,104,204,158,129,168, 97, 50,187,107, 56,239,206,184,225,162,121,
- 254,250,247, 98,192,136, 98,192,136,206,247,255, 41, 41, 41, 82, 82,
- 82,206,247,255, 98,192,136, 98,192,136,253,249,246,207,147,106,206,
- 163,132,170, 97, 50,186,106, 54,239,208,187,226,162,122,254,251,248,
- 206,247,255,206,247,255,206,247,255,206,247,255,206,247,255,206,247,
- 255,206,247,255,206,247,255,254,251,248,211,150,109,210,167,138,171,
- 98, 50,187,106, 54,240,210,190,226,163,122,226,163,122,206,247,255,
- 206,247,255,206,247,255, 41, 41, 41, 82, 82, 82,206,247,255,206,247,
- 255,206,247,255,216,153,113,214,153,112,213,171,142,173, 99, 51,187,
- 106, 54,242,213,194,227,163,122,208,242,250,206,247,255,206,247,255,
- 206,247,255, 82, 82, 82, 41, 41, 41,132,156,165,206,247,255,206,247,
- 255,210,247,254,217,155,115,218,176,149,175,100, 51,187,106, 54,242,
- 216,197,227,164,123,181,238,254,181,239,255,181,239,255,181,239,255,
- 181,239,255, 82, 82, 82, 41, 41, 41, 82, 82, 82,181,239,255,181,239,
- 254,220,157,116,221,181,154,177,101, 52,187,107, 54,244,217,199,230,
- 166,125,186,236,250,181,239,255, 41, 41, 41, 82, 82, 82,181,239,255,
- 181,239,255, 41, 41, 41, 41, 41, 41,181,239,255,186,239,253,218,156,
- 116,225,186,159,179,102, 52,187,108, 55,244,220,201,231,167,125,201,
- 230,240,181,239,255, 41, 41, 41, 41, 41, 41,181,239,255,132,156,165,
- 41, 41, 41, 41, 41, 41,181,239,255,201,239,249,222,160,119,228,190,
- 164,180,103, 52,189,110, 58,245,221,204,231,168,126,250,240,232,181,
- 239,255,132,156,165, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41,
- 132,156,165,181,239,255,247,229,217,224,162,120,231,194,169,182,104,
- 53,192,116, 66,246,223,208,232,168,126,252,246,241,198,242,246,148,
- 247,255,148,247,255,148,247,255,148,247,255,148,247,255,148,247,255,
- 184,228,232,247,230,219,225,163,122,239,213,195,183,106, 54,198,130,
- 85,246,223,209,233,170,128,254,250,246,253,250,246,218,241,243,175,
- 244,250,153,246,254,153,246,254,175,244,250,218,241,243,249,236,226,
- 248,231,219,238,208,186,236,208,189,189,116, 67,214,165,133,246,224,
- 209,247,224,209,254,251,248,254,251,247,253,249,246,252,245,240,250,
- 240,234,251,242,237,253,249,246,253,250,247,251,241,235,248,233,223,
- 236,209,190,205,146,106,226,197,177,225,189,166,217,171,141,201,137,
- 94,192,117, 67,189,110, 58,187,108, 55,187,107, 54,187,106, 54,187,
- 106, 54,188,108, 57,189,110, 59,187,109, 58,191,116, 68,201,141,101,
- 231,206,188,255,255,255);
-
-Const
- stdimg_help_16 : Array[0..821] of byte = (
+ stdimg_edit : Array[0..821] of byte = (
66, 77, 54, 3, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 40, 0, 0,
0, 16, 0, 0, 0, 16, 0, 0, 0, 1, 0, 24, 0, 0, 0, 0, 0,
- 0, 3, 0, 0, 19, 11, 0, 0, 19, 11, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
- 255,192,161,139,164,117, 85,142, 85, 45,142, 85, 45,165,119, 87,193,
- 161,139,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
- 255, 0,255,255, 0,255,255, 0,255,198,169,149,147, 91, 53,203,175,
- 155,229,214,203,248,244,241,249,245,242,232,219,209,211,186,167,149,
- 94, 56,199,171,151,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
- 255, 0,255,163,116, 84,175,134,105,243,237,233,221,201,186,199,165,
- 139,187,145,113,193,153,121,213,183,159,233,218,205,248,243,239,183,
- 145,117,166,120, 88,255, 0,255,255, 0,255,255, 0,255,199,170,150,
- 174,133,105,243,238,233,183,143,114,165,114, 76,179,135,101,255,255,
- 255,255,255,255,193,151,116,197,155,120,215,185,160,249,245,241,180,
- 140,112,199,171,151,255, 0,255,255, 0,255,146, 91, 52,242,235,230,
- 177,135,105,157,103, 64,163,111, 73,178,132, 98,255,255,255,255,255,
- 255,189,146,111,193,150,114,197,155,120,214,183,157,247,241,237,147,
- 93, 54,255, 0,255,192,161,139,195,166,145,211,188,173,148, 92, 51,
- 154,100, 60,161,108, 69,169,120, 82,200,168,143,204,173,148,183,137,
- 101,187,143,107,191,147,112,193,150,115,231,215,201,207,181,161,193,
- 161,139,162,115, 83,221,204,192,175,134,106,145, 88, 47,151, 96, 56,
- 157,103, 64,167,118, 81,228,212,200,229,214,202,180,134, 98,182,135,
- 99,185,139,103,186,142,106,209,178,155,230,215,204,165,118, 86,141,
- 83, 43,245,240,237,148, 94, 56,142, 83, 42,148, 91, 51,153, 98, 58,
- 159,105, 66,243,237,232,255,255,255,208,181,160,176,127, 90,178,131,
- 94,180,133, 96,189,148,117,248,243,240,142, 84, 45,141, 83, 43,245,
- 240,237,147, 92, 54,138, 79, 37,144, 86, 45,149, 93, 52,154, 99, 59,
- 181,139,109,252,251,249,254,254,254,193,157,130,172,122, 84,173,124,
- 86,183,141,108,247,243,239,142, 84, 44,162,115, 83,221,204,192,172,
- 130,101,135, 74, 32,139, 80, 39,144, 86, 45,149, 92, 52,153, 98, 58,
- 194,161,137,255,255,255,243,236,232,165,114, 75,166,115, 77,195,161,
- 134,225,210,198,164,117, 85,192,161,139,195,165,144,208,185,169,135,
- 74, 32,135, 74, 32,159,110, 75,160,111, 77,148, 91, 50,168,122, 89,
- 255,255,255,253,252,251,161,109, 70,159,106, 67,218,198,183,198,170,
- 149,192,161,139,255, 0,255,146, 92, 53,241,234,229,165,120, 88,135,
- 74, 32,176,136,108,254,253,253,233,222,214,246,242,239,255,255,255,
- 220,202,189,152, 96, 56,179,137,107,242,235,230,145, 91, 52,255, 0,
- 255,255, 0,255,198,169,149,173,131,103,242,235,231,166,120, 89,156,
- 105, 71,222,206,194,247,243,240,241,234,230,208,184,167,160,111, 77,
- 173,130,100,243,237,232,171,128, 98,198,169,149,255, 0,255,255, 0,
- 255,255, 0,255,163,116, 84,170,127, 97,240,232,227,208,185,169,172,
- 130,101,150, 96, 59,150, 96, 59,172,130,101,209,186,170,240,233,228,
- 170,128, 98,163,116, 84,255, 0,255,255, 0,255,255, 0,255,255, 0,
- 255,255, 0,255,198,169,149,145, 91, 52,193,162,141,219,201,189,244,
- 239,235,244,239,235,219,201,189,193,163,141,145, 90, 51,199,170,150,
- 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
- 255,255, 0,255,255, 0,255,192,161,139,162,115, 83,141, 83, 43,141,
- 83, 43,162,115, 83,192,161,139,255, 0,255,255, 0,255,255, 0,255,
- 255, 0,255,255, 0,255);
-
-Const
- stdimg_dialog_error_32 : Array[0..3125] of byte = (
- 66, 77, 54, 12, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 40, 0, 0,
- 0, 32, 0, 0, 0, 32, 0, 0, 0, 1, 0, 24, 0, 0, 0, 0, 0,
- 0, 12, 0, 0, 19, 11, 0, 0, 19, 11, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,254,254,254,249,249,249,242,242,242,233,
- 233,233,225,225,225,219,219,219,213,213,213,208,208,208,204,204,204,
- 208,208,208,211,211,211,216,216,216,222,222,222,229,229,229,239,239,
- 239,247,247,247,252,252,252,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,245,245,245,231,231,
- 231,219,219,219,208,208,208,198,198,198,187,187,187,178,178,178,169,
- 169,169,162,162,162,156,156,156,153,153,153,154,154,154,157,157,157,
- 162,162,162,170,170,170,179,179,179,189,189,189,199,199,199,209,209,
- 209,222,222,222,239,239,239,252,252,252,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,245,245,245,233,233,233,220,220,220,208,208,208,195,195,
- 195,183,183,183,159,159,170,102,102,164, 44, 44,169, 20, 20,172, 8,
- 8,175, 2, 2,177, 7, 7,174, 19, 19,171, 40, 40,165, 96, 96,158,
- 149,149,160,172,172,172,184,184,184,197,197,197,209,209,209,222,222,
- 222,235,235,235,252,252,252,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,254,254,254,
- 242,242,242,231,231,231,219,219,219,179,179,204, 60, 60,185, 6, 6,
- 179, 16, 18,187, 25, 33,199, 39, 52,207, 49, 65,211, 57, 76,215, 48,
- 65,210, 38, 50,203, 24, 32,197, 16, 17,184, 6, 6,178, 59, 59,182,
- 171,171,196,209,209,209,221,221,221,232,232,232,244,244,244,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,250,250,253,
- 101,101,208, 10, 10,182, 21, 26,196, 61, 78,218, 54, 70,218, 36, 46,
- 211, 25, 30,207, 18, 22,205, 15, 17,203, 18, 22,203, 25, 30,205, 35,
- 45,208, 52, 69,213, 55, 75,215, 21, 26,194, 9, 9,181,104,104,206,
- 245,245,248,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,235,235,249, 51, 51,195, 17, 18,191, 59, 74,219,
- 51, 64,218, 19, 21,209, 10, 10,206, 10, 10,205, 10, 10,205, 10, 10,
- 204, 10, 10,203, 9, 9,203, 9, 9,202, 9, 9,201, 9, 9,200, 19,
- 22,203, 47, 62,212, 53, 71,213, 15, 17,187, 54, 54,196,236,236,249,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,239,239,250, 27,
- 27,187, 22, 26,198, 66, 82,225, 26, 31,214, 11, 11,210, 11, 11,209,
- 11, 11,208, 11, 11,208, 10, 10,207, 10, 10,206, 10, 10,205, 10, 10,
- 205, 10, 10,204, 10, 10,204, 9, 9,203, 9, 9,202, 9, 9,202, 24,
- 30,206, 59, 78,217, 20, 24,193, 30, 30,188,240,240,250,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,252,252,254, 57, 57,197, 24, 27,202, 64, 78,226, 20,
- 22,215, 12, 12,213, 12, 12,212, 12, 12,211, 11, 11,211, 11, 11,210,
- 11, 11,209, 11, 11,209, 11, 11,208, 11, 11,207, 10, 10,207, 10, 10,
- 206, 10, 10,205, 10, 10,204, 10, 10,204, 10, 10,203, 17, 20,205, 56,
- 74,217, 21, 25,194, 60, 60,197,252,252,254,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,120,120,
- 216, 19, 20,194, 68, 82,229, 19, 21,218, 13, 13,216, 13, 13,215, 12,
- 12,214, 12, 12,214, 12, 12,213, 12, 12,212, 12, 12,211, 11, 11,211,
- 11, 11,210, 11, 11,210, 11, 11,209, 11, 11,208, 11, 11,208, 10, 10,
- 207, 10, 10,206, 10, 10,205, 10, 10,205, 17, 19,206, 60, 78,219, 18,
- 19,191,124,124,217,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,230,230,247, 17, 17,187, 63, 75,228, 28, 31,
- 222, 13, 13,219, 13, 13,218, 13, 13,217, 13, 13,216, 13, 13,216, 13,
- 13,215, 12, 12,215, 12, 12,214, 12, 12,213, 12, 12,213, 12, 12,212,
- 12, 12,211, 11, 11,210, 11, 11,210, 11, 11,209, 11, 11,208, 11, 11,
- 208, 11, 11,207, 10, 10,207, 23, 28,210, 53, 69,217, 17, 17,185,232,
- 232,248,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 91, 91,207, 28, 31,208, 53, 61,229, 14, 14,221, 14, 14,221, 14, 14,
- 220, 14, 14,220, 14, 14,219, 13, 13,218, 13, 13,218, 13, 13,217, 13,
- 13,216, 13, 13,215, 12, 12,215, 12, 12,214, 12, 12,214, 12, 12,213,
- 12, 12,212, 12, 12,211, 11, 11,211, 11, 11,210, 11, 11,209, 11, 11,
- 209, 11, 11,208, 47, 59,217, 23, 27,200, 94, 94,208,255,255,255,255,
- 255,255,255,255,255,255,255,255,240,240,250, 10, 10,183, 70, 82,232,
- 29, 30,227, 29, 29,226, 22, 22,224, 14, 14,223, 14, 14,222, 14, 14,
- 221, 14, 14,220, 14, 14,220, 14, 14,219, 13, 13,219, 13, 13,218, 13,
- 13,217, 13, 13,216, 13, 13,216, 13, 13,215, 12, 12,214, 12, 12,214,
- 12, 12,213, 12, 12,213, 12, 12,212, 12, 12,211, 11, 11,210, 18, 21,
- 212, 60, 77,222, 9, 10,182,242,242,251,255,255,255,255,255,255,255,
- 255,255,166,166,228, 24, 25,197,104,111,238, 84, 84,235, 84, 84,234,
- 84, 84,234, 72, 72,232, 51, 51,229, 25, 25,225, 15, 15,223, 14, 14,
- 222, 14, 14,221, 14, 14,221, 14, 14,220, 14, 14,219, 13, 13,219, 13,
- 13,218, 13, 13,218, 13, 13,217, 13, 13,216, 13, 13,215, 12, 12,215,
- 12, 12,214, 12, 12,213, 12, 12,213, 12, 12,212, 58, 72,223, 20, 22,
- 193,170,170,229,255,255,255,255,255,255,255,255,255, 78, 78,204, 55,
- 58,217,103,107,240, 82, 82,236, 83, 83,236, 83, 83,236, 83, 83,235,
- 82, 82,234, 81, 81,234, 58, 58,230, 26, 26,225, 15, 15,224, 15, 15,
- 223, 14, 14,223, 14, 14,222, 14, 14,221, 14, 14,220, 14, 14,220, 14,
- 14,219, 13, 13,218, 13, 13,218, 13, 13,217, 13, 13,216, 13, 13,216,
- 13, 13,215, 12, 12,214, 40, 48,221, 28, 34,205, 82, 82,203,255,255,
- 255,255,255,255,255,255,255, 38, 38,193, 88, 94,229, 93, 95,240, 80,
- 80,237, 80, 80,237, 80, 80,237,243,243,243,243,243,243,243,243,243,
- 243,243,243,243,243,243,241,241,241,239,239,239,239,239,239,239,239,
- 239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,
- 239,239,239,239,239,239,239,239, 13, 13,218, 13, 13,217, 23, 23,218,
- 51, 56,223, 46, 55,215, 40, 40,192,255,255,255,255,255,255,255,255,
- 255, 16, 16,185,109,115,238, 87, 87,240, 79, 79,239, 79, 79,239, 79,
- 79,238,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,
- 243,243,243,243,243,243,240,240,240,239,239,239,239,239,239,239,239,
- 239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,
- 239,239, 23, 23,221, 57, 57,226, 79, 79,229, 87, 89,229, 76, 87,225,
- 19, 19,185,255,255,255,255,255,255,255,255,255, 3, 3,180,120,126,
- 244, 81, 82,242, 77, 77,241, 77, 77,240, 77, 77,240,243,243,243,243,
- 243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,
- 243,243,243,241,241,241,239,239,239,239,239,239,239,239,239,239,239,
- 239,239,239,239,239,239,239,239,239,239,241,241,241, 74, 74,231, 76,
- 76,231, 76, 76,230, 82, 84,230, 97,110,233, 5, 5,180,255,255,255,
- 255,255,255,255,255,255, 16, 16,185,103,108,239, 84, 85,244, 75, 75,
- 243, 75, 75,242, 75, 75,241,243,243,243,243,243,243,243,243,243,243,
- 243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,
- 242,242,242,240,240,240,240,240,240,239,239,239,240,240,240,242,242,
- 242,243,243,243,243,243,243, 75, 75,233, 75, 75,232, 75, 75,232, 83,
- 85,233, 85, 95,228, 19, 19,186,255,255,255,255,255,255,255,255,255,
- 37, 37,193, 82, 86,233, 87, 89,245, 73, 73,244, 73, 73,243, 74, 74,
- 243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,
- 243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,
- 243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,
- 243, 73, 73,234, 72, 72,233, 73, 73,233, 87, 90,235, 69, 76,223, 40,
- 40,193,255,255,255,255,255,255,255,255,255, 77, 77,205, 53, 56,223,
- 97, 99,247, 72, 72,246, 71, 71,245, 71, 71,245, 71, 71,244, 71, 71,
- 243, 72, 72,243, 72, 72,243, 71, 71,242, 71, 71,241, 71, 71,241, 71,
- 71,240, 72, 72,240, 72, 72,240, 71, 71,239, 71, 71,239, 71, 71,238,
- 71, 71,237, 71, 71,236, 71, 71,237, 71, 71,236, 71, 71,236, 71, 71,
- 235, 71, 71,234, 94, 99,237, 44, 49,214, 81, 81,204,255,255,255,255,
- 255,255,255,255,255,165,165,228, 29, 30,203,113,118,250, 71, 71,247,
- 71, 71,247, 71, 71,246, 71, 71,246, 70, 70,245, 70, 70,245, 70, 70,
- 244, 70, 70,244, 70, 70,243, 70, 70,242, 69, 69,242, 69, 69,242, 69,
- 69,241, 69, 69,240, 70, 70,240, 70, 70,239, 69, 69,239, 69, 69,239,
- 69, 69,238, 69, 69,237, 69, 69,237, 70, 70,236, 69, 69,236,108,116,
- 241, 25, 26,198,170,170,229,255,255,255,255,255,255,255,255,255,240,
- 240,250, 10, 10,184,116,121,249, 77, 78,249, 71, 71,249, 71, 71,248,
- 71, 71,248, 71, 71,247, 71, 71,246, 71, 71,246, 71, 71,246, 70, 70,
- 245, 70, 70,244, 70, 70,244, 70, 70,243, 70, 70,243, 70, 70,242, 69,
- 69,242, 69, 69,241, 69, 69,241, 69, 69,240, 69, 69,239, 68, 68,239,
- 68, 68,239, 68, 68,239, 74, 75,239,106,115,240, 11, 11,183,241,241,
- 251,255,255,255,255,255,255,255,255,255,255,255,255, 89, 89,208, 45,
- 46,223,106,109,252, 71, 71,250, 71, 71,250, 71, 71,250, 71, 71,249,
- 71, 71,248, 71, 71,248, 71, 71,247, 71, 71,247, 71, 71,246, 71, 71,
- 246, 70, 70,245, 70, 70,245, 70, 70,244, 70, 70,243, 70, 70,243, 70,
- 70,242, 69, 69,242, 69, 69,242, 69, 69,241, 69, 69,240, 69, 69,240,
- 100,107,242, 43, 45,215, 93, 93,209,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,230,230,247, 17, 17,189,111,115,250, 85,
- 86,252, 72, 72,252, 71, 71,251, 71, 71,251, 71, 71,250, 71, 71,250,
- 71, 71,249, 71, 71,249, 71, 71,248, 71, 71,247, 71, 71,247, 71, 71,
- 246, 71, 71,246, 71, 71,246, 70, 70,245, 70, 70,244, 70, 70,244, 70,
- 70,243, 70, 70,242, 69, 69,242, 81, 83,242,104,111,241, 18, 18,188,
- 232,232,248,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,120,120,217, 27, 28,206,122,126,254, 79, 79,253, 72,
- 72,253, 72, 72,253, 72, 72,252, 71, 71,251, 71, 71,251, 71, 71,250,
- 71, 71,250, 71, 71,250, 71, 71,249, 71, 71,248, 71, 71,248, 71, 71,
- 247, 71, 71,246, 71, 71,246, 71, 71,246, 70, 70,245, 70, 70,245, 75,
- 76,245,117,124,247, 28, 29,202,123,123,217,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,252,252,
- 254, 55, 55,198, 44, 44,218,121,124,254, 79, 80,254, 72, 72,254, 72,
- 72,253, 72, 72,253, 72, 72,253, 72, 72,252, 72, 72,252, 71, 71,251,
- 71, 71,250, 71, 71,250, 71, 71,250, 71, 71,249, 71, 71,249, 71, 71,
- 248, 71, 71,247, 71, 71,247, 78, 79,247,115,122,248, 43, 45,214, 59,
- 59,199,252,252,254,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,238,238,250, 28, 28,
- 189, 45, 45,216,125,127,254, 86, 88,254, 72, 72,254, 72, 72,254, 72,
- 72,254, 72, 72,254, 72, 72,253, 72, 72,253, 72, 72,253, 72, 72,252,
- 71, 71,251, 71, 71,251, 71, 71,250, 71, 71,250, 71, 71,250, 86, 87,
- 250,120,126,250, 43, 45,213, 29, 29,189,240,240,250,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,234,234,249, 50, 50,196, 30, 30,
- 204,115,117,248,111,114,254, 80, 81,254, 72, 72,254, 72, 72,254, 72,
- 72,254, 72, 72,254, 72, 72,254, 72, 72,253, 72, 72,253, 72, 72,253,
- 72, 72,252, 81, 82,252,109,113,252,111,116,246, 28, 29,201, 52, 52,
- 196,235,235,249,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,249,249,253,105,105,212, 10, 10,184, 53, 54,
- 218,122,124,251,117,120,254, 99,100,254, 88, 89,254, 82, 82,254, 77,
- 78,254, 82, 82,254, 87, 89,254, 98,100,254,115,119,254,119,123,251,
- 50, 51,216, 12, 12,185,105,105,212,250,250,253,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,218,218,244, 74, 74,203, 11, 11,183, 35, 35,
- 204, 68, 69,227, 92, 94,239,110,111,246,123,126,252,109,111,246, 91,
- 93,238, 67, 68,227, 34, 34,204, 9, 9,183, 77, 77,204,219,219,244,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,237,237,250,162,162,227, 75, 75,204, 38, 38,
- 193, 17, 17,186, 4, 4,180, 17, 17,186, 38, 38,194, 77, 77,205,164,
- 164,228,238,238,250,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255);
+ 0, 3, 0, 0,235, 10, 0, 0,235, 10, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 98,146, 94, 48, 48, 48, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 98,146, 94, 98,146, 94,
+ 98,146, 94, 88, 88, 88,220,220,220,255,255,255,255,255,255,255,255,
+ 255,255,255,255,160,160,160,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255, 0, 0, 0, 98,146, 94, 98,146, 94, 98,146, 94,
+ 88, 88, 88,220,220,220,160,160,160,160,160,160, 0, 0, 0,160,160,
+ 160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,
+ 160,160, 0, 0, 0, 98,146, 94, 98,146, 94, 98,146, 94, 88, 88, 88,
+ 220,220,220,255,255,255,255,255,255, 88, 88, 88, 48, 48, 48, 0, 0,
+ 64,195,195,195,220,220,220,255,255,255,255,255,255,255,255,255, 0,
+ 0, 0, 98,146, 94, 98,146, 94, 98,146, 94, 88, 88, 88,220,220,220,
+ 255,255,255,255,255,255,255,255,255, 88, 88, 88,168,220,255, 0, 88,
+ 192, 0, 88,192,195,195,195,220,220,220,255,255,255, 0, 0, 0, 98,
+ 146, 94, 98,146, 94, 98,146, 94, 88, 88, 88,220,220,220,195,195,195,
+ 195,195,195,195,195,195,160,160,160,168,220,255,168,220,255,168,220,
+ 255, 0, 88,192, 0, 88,192,160,160,160, 0, 0, 0, 98,146, 94, 98,
+ 146, 94, 98,146, 94, 88, 88, 88,220,220,220,255,255,255,255,255,255,
+ 255,255,255,255,255,255, 88,168,255,168,220,255,168,220,255,168,220,
+ 255,168,220,255, 0, 0, 64, 0, 0, 0, 98,146, 94, 98,146, 94, 98,
+ 146, 94, 88, 88, 88,220,220,220,255,255,255,255,255,255,255,255,255,
+ 255,255,255,160,160,160,168,220,255,168,220,255, 0,128,255, 0,128,
+ 255, 0, 88,192, 48, 48, 48, 98,146, 94, 98,146, 94, 98,146, 94, 88,
+ 88, 88,220,220,220,195,195,195,195,195,195,195,195,195,195,195,195,
+ 195,195,195, 88,168,255,168,220,255, 0,128,255, 0,128,255, 0,128,
+ 255, 0, 88,192, 48, 48, 48, 98,146, 94, 98,146, 94, 88, 88, 88,220,
+ 220,220,255,255,255,255,255,255,255,255,255,255,255,255,195,195,195,
+ 255,255,255, 88,168,255, 88,168,255, 0,128,255, 0,128,255, 0,128,
+ 255, 0, 88,192, 0, 0, 64, 98,146, 94, 88, 88, 88,220,220,220,255,
+ 255,255,255,255,255,255,255,255,255,255,255,195,195,195,255,255,255,
+ 255,255,255, 88,168,255, 88,168,255, 0,128,255, 0,128,255, 0,128,
+ 255, 0, 88,192, 98,146, 94, 88, 88, 88,220,220,220,195,195,195,195,
+ 195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,
+ 195,195,195, 88,168,255, 88,168,255, 0,128,255, 0,128,255, 0,128,
+ 255, 98,146, 94, 88, 88, 88,220,220,220,255,255,255,255,255,255,255,
+ 255,255,255,255,255,195,195,195,255,255,255,255,255,255,255,255,255,
+ 255,255,255, 88,168,255, 88,168,255, 0,128,255, 0,128,255, 98,146,
+ 94, 88, 88, 88,220,220,220,255,255,255,255,255,255,255,255,255,255,
+ 255,255,195,195,195,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255, 88,168,255, 88,168,255, 0,128,255, 98,146, 94, 88, 88,
+ 88,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,
+ 220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,
+ 88, 88, 88, 88,168,255, 88,168,255, 98,146, 94, 88, 88, 88, 88, 88,
+ 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88,
+ 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88,
+ 98,146, 94, 98,146, 94);
Const
stdimg_menu_save_all_16 : Array[0..821] of byte = (
@@ -448,6 +156,110 @@ Const
255,255,255,255,255,255);
Const
+ stdimg_font_16 : Array[0..821] of byte = (
+ 66, 77, 54, 3, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 40, 0, 0,
+ 0, 16, 0, 0, 0, 16, 0, 0, 0, 1, 0, 24, 0, 0, 0, 0, 0,
+ 0, 3, 0, 0, 19, 11, 0, 0, 19, 11, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,128,128,128,135,135,135,133,
+ 133,133,133,133,133,128,128,128,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255, 88, 88, 88,102,102,102,108,108,108, 99,
+ 99, 99, 83, 83, 83,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255, 81, 81, 81, 84, 84, 84, 81, 81, 81,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255, 60, 77,162, 76, 89,162, 77, 90,161, 74, 87,161, 73, 84,
+ 156,255, 0,255, 80, 80, 77, 45, 45, 45, 74, 74, 74,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 36, 59,219, 0, 43,255, 0, 47,255, 0, 39,239, 45, 62,197,255, 0,
+ 255, 65, 65, 63, 7, 7, 7, 60, 60, 60,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 19, 38,213, 0, 32,255, 80, 88,168,255, 0,255,255, 0,255, 55, 55,
+ 55, 0, 0, 0, 58, 58, 58,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255, 28, 37,212,
+ 0, 16,255, 86, 89,166,255, 0,255,255, 0,255, 55, 55, 55, 1, 1,
+ 1, 58, 58, 58,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255, 27, 28,213, 0, 3,255,
+ 85, 85,168,255, 0,255,255, 0,255, 55, 55, 55, 0, 0, 0, 58, 58,
+ 58,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255, 27, 27,213, 0, 0,255, 84, 84,166,
+ 255, 0,255,255, 0,255, 57, 57, 57, 11, 11, 11, 60, 60, 60,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255, 27, 27,220, 3, 4,166, 62, 62, 88,255, 0,255,
+ 255, 0,255, 71, 71, 71, 49, 49, 49, 71, 71, 71,255, 0,255,255, 0,
+ 255,100,100,100,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255, 27, 27,224, 19, 19,138, 52, 52, 32,255, 0,255,255, 0,255,
+ 78, 78, 78, 93, 93, 93, 76, 76, 76,255, 0,255,255, 0,255, 40, 40,
+ 40,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255, 29,
+ 29,225, 24, 24,153,113,113, 93, 65, 65, 65, 71, 71, 71, 84, 84, 81,
+ 139,139,138, 75, 75, 75, 74, 74, 74, 66, 66, 66,113,113,113,255, 0,
+ 255, 78, 78,167, 88, 88,152,255, 0,255,255, 0,255, 48, 48,225, 37,
+ 38,161,103,103, 98,114,114,111,106,106,103,106,106,115,112,112,115,
+ 111,111,111,105,105,105,113,113,113,113,113,113,255, 0,255, 83, 83,
+ 197, 45, 45,204,255, 0,255,255, 0,255, 59, 60,212, 81, 83,247, 72,
+ 72,146,255, 0,255,255, 0,255, 43, 44,213,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,105,105,181,113,114,
+ 255, 76, 76,207, 77, 77,191, 97, 98,244,127,128,255, 79, 79,220, 83,
+ 84,188, 87, 87,223,104,105,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,123,123,178, 80, 80,215, 84, 84,
+ 223, 80, 80,228, 81, 81,220, 74, 74,218, 79, 79,223, 77, 77,228, 83,
+ 83,239, 67, 68,231,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255);
+
+Const
+ stdimg_choice_yes_16 : Array[0..821] of byte = (
+ 66, 77, 54, 3, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 40, 0, 0,
+ 0, 16, 0, 0, 0, 16, 0, 0, 0, 1, 0, 24, 0, 0, 0, 0, 0,
+ 0, 3, 0, 0, 19, 11, 0, 0, 19, 11, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255, 12,164, 60, 17,171, 71, 13,173, 73,104,175,
+ 120,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 87,183,107, 78,224,155, 92,234,170, 92,234,171, 35,192,104, 87,167,
+ 106,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255, 32,183, 89,
+ 102,255,205,104,255,201, 85,255,195, 73,252,184, 24,199,107, 85,166,
+ 102,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,157,207,165, 22,223,131, 47,255,181,
+ 45,255,174, 30,255,170, 3,255,160, 17,250,157, 12,190, 93, 68,158,
+ 86,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255, 68,173, 91, 0,248,147, 1,254,156, 10,254,160,
+ 18,251,159, 38,250,165, 49,242,160, 70,234,157, 21,183, 87, 74,169,
+ 94,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255, 7,173, 65, 7,243,144, 45,243,160, 72,243,171,105,199,139,
+ 96,231,164,112,241,183,110,233,172,102,224,157, 28,169, 74, 57,157,
+ 75,255, 0,255,255, 0,255,255, 0,255,255, 0,255,148,199,148, 18,
+ 202,101, 79,235,162,102,241,178, 85,205,129,255, 0,255,172,211,180,
+ 89,192,126,129,232,178,130,225,170,129,215,157, 45,168, 78, 63,165,
+ 77,255, 0,255,255, 0,255,255, 0,255,127,196,134, 86,221,149,112,
+ 231,171,111,233,173,152,207,158,255, 0,255,255, 0,255,255, 0,255,
+ 101,183,121,151,227,181,150,221,173,157,217,170, 60,168, 84, 44,152,
+ 56,255, 0,255,255, 0,255,255, 0,255,138,190,142, 97,180,115, 81,
+ 180,107,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 109,181,120,173,225,187,170,219,179,181,219,181, 84,174,101, 42,147,
+ 51,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 121,181,123,195,228,198,191,223,191,206,230,203,110,184,122,115,185,
+ 121,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 126,181,126,218,237,218,228,242,228,169,210,169,173,204,172,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 115,168,114,139,187,139,195,215,194,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255);
+
+Const
stdimg_folder_new_16 : Array[0..821] of byte = (
66, 77, 54, 3, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 40, 0, 0,
0, 16, 0, 0, 0, 16, 0, 0, 0, 1, 0, 24, 0, 0, 0, 0, 0,
@@ -500,56 +312,333 @@ Const
255,255,255,255,255,255);
Const
- stdimg_edit_paste_16 : Array[0..821] of byte = (
+ stdimg_arrow_right : Array[0..137] of byte = (
+ 66, 77,138, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 40, 0, 0,
+ 0, 4, 0, 0, 0, 7, 0, 0, 0, 1, 0, 24, 0, 0, 0, 0, 0,
+ 84, 0, 0, 0, 19, 11, 0, 0, 19, 11, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,255, 0,255,255, 0,255,255, 0,255, 0, 0,
+ 0, 0, 0, 0,255, 0,255,255, 0,255, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,255, 0,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 0,255, 0, 0, 0, 0, 0,
+ 0,255, 0,255,255, 0,255, 0, 0, 0,255, 0,255,255, 0,255,255,
+ 0,255);
+
+Const
+ stdimg_folder_up_16 : Array[0..821] of byte = (
66, 77, 54, 3, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 40, 0, 0,
0, 16, 0, 0, 0, 16, 0, 0, 0, 1, 0, 24, 0, 0, 0, 0, 0,
0, 3, 0, 0, 19, 11, 0, 0, 19, 11, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0,255, 0,255,155,181,197, 18, 80,118, 1, 68,108, 1, 68,
- 108, 1, 68,108, 1, 68,108, 1, 68,108, 1, 68,108, 1, 68,108, 1,
- 68,108, 1, 68,108, 1, 68,108, 19, 80,117,162,186,201,255, 0,255,
- 255, 0,255, 13, 76,115, 35,127,186, 59,125,167,100,111,115,104,108,
- 106,104,108,106,104,108,106,104,108,106,104,108,106, 61,124,163, 61,
- 124,163, 61,124,163, 34,123,179, 16, 78,116,255, 0,255,255, 0,255,
- 9, 74,114, 38,135,197, 99,109,112,237,238,237,254,254,254,254,254,
- 254,254,254,254,238,239,239,253,254,254,100,105,103, 39,135,197, 39,
- 135,197, 39,135,197, 3, 68,108,255, 0,255,255, 0,255, 9, 74,114,
- 38,135,197,100,104,102,255,255,255,228,231,231,213,216,216,190,194,
- 193,180,183,183,255,255,255,255,255,255,100,105,103, 39,135,197, 40,
- 134,194, 3, 68,108,255, 0,255,255, 0,255, 9, 74,114, 38,135,197,
- 100,104,102,255,255,255,231,233,233,229,231,231,214,217,217,182,185,
- 185,255,255,255,255,255,255,255,255,255,100,105,103, 40,134,194, 3,
- 68,108,255, 0,255,255, 0,255, 9, 75,114, 38,135,197,100,104,102,
- 255,255,255,234,236,236,232,234,234,230,232,232,203,206,205,182,186,
- 185,181,185,184,255,255,255,100,105,103, 40,134,194, 3, 68,108,255,
- 0,255,255, 0,255, 9, 75,114, 38,135,197,100,104,102,255,255,255,
- 237,238,238,235,236,236,233,235,235,231,233,233,216,218,218,202,205,
- 204,255,255,255,100,105,103, 40,134,194, 3, 68,108,255, 0,255,255,
- 0,255, 9, 75,114, 38,135,197,100,104,102,255,255,255,239,240,240,
- 238,239,239,236,237,237,234,235,235,232,234,234,217,219,219,255,255,
- 255,100,105,103, 40,134,194, 3, 68,108,255, 0,255,255, 0,255, 9,
- 75,114, 38,135,197,100,104,102,255,255,255,239,240,240,181,181,179,
- 181,181,179,180,180,178,178,178,177,232,234,234,255,255,255,100,105,
- 103, 40,134,194, 3, 68,108,255, 0,255,255, 0,255, 9, 75,115, 38,
- 135,197,100,104,102,255,255,255,239,240,240,239,240,240,239,240,240,
- 239,240,240,237,239,239,235,237,237,255,255,255,100,105,103, 40,134,
- 194, 3, 68,108,255, 0,255,255, 0,255, 9, 75,115, 38,135,197,100,
- 104,102,255,255,255,239,240,240,181,181,179,181,181,179,181,181,179,
- 181,181,179,238,239,239,255,255,255,100,105,103, 40,134,194, 3, 68,
- 108,255, 0,255,255, 0,255, 9, 75,115, 39,136,198,100,104,102,255,
- 255,255,239,240,240,239,240,240,239,240,240,239,240,240,239,240,240,
- 239,240,240,255,255,255,100,105,103, 40,134,194, 3, 68,108,255, 0,
- 255,255, 0,255, 9, 75,115, 39,136,198,100,111,113,241,241,241,224,
- 224,224,187,187,187,187,187,187,187,187,187,187,187,187,224,224,224,
- 242,242,242,100,109,110, 39,135,197, 3, 68,108,255, 0,255,255, 0,
- 255, 13, 77,116, 36,132,192, 62,126,164,100,109,112, 94, 94, 94,124,
- 127,127,125,128,128,125,128,128,123,126,126, 94, 94, 94,100,108,110,
- 64,124,161, 35,127,185, 16, 78,117,255, 0,255,255, 0,255,155,182,
- 197, 18, 80,119, 1, 68,108, 3, 68,107, 91, 92, 92,137,149,149,138,
- 151,151,138,151,151,137,149,149, 91, 92, 92, 3, 68,107, 1, 68,108,
- 19, 81,118,162,186,201,255, 0,255,255, 0,255,255, 0,255,255, 0,
- 255,255, 0,255,255, 0,255,137,138,138, 92, 92, 92, 92, 92, 92, 92,
- 92, 92, 92, 92, 92,137,138,138,255, 0,255,255, 0,255,255, 0,255,
- 255, 0,255,255, 0,255);
+ 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 198,167,146,138, 78, 37,135, 74, 32,135, 74, 32,135, 74, 32,135, 74,
+ 32,135, 74, 32,135, 74, 32,135, 74, 32,135, 74, 32,135, 74, 32,135,
+ 74, 32,135, 74, 32,135, 74, 32,138, 78, 37,198,169,148,138, 78, 37,
+ 217,181,149,221,186,154,221,186,154,221,186,154,221,186,154,221,186,
+ 154,221,186,154,221,186,154,221,186,154,221,186,154,221,186,154,221,
+ 186,154,221,186,154,217,181,149,138, 79, 37,135, 74, 32,223,192,162,
+ 213,172,134,213,172,134,213,172,134,213,172,134,213,172,134,213,172,
+ 134,213,172,134,213,172,134,213,172,134,213,172,134,213,172,134,213,
+ 172,134,223,192,162,135, 74, 32,135, 74, 32,226,197,170,215,175,138,
+ 215,175,138,215,175,138,143, 85, 42,143, 85, 42,143, 85, 42,143, 85,
+ 42,143, 85, 42,143, 85, 42,215,175,138,215,175,138,215,175,138,226,
+ 197,170,135, 74, 32,135, 74, 32,228,202,177,217,179,143,217,179,143,
+ 217,179,143,143, 85, 42,217,179,143,217,179,143,217,179,143,217,179,
+ 143,217,179,143,217,179,143,217,179,143,217,179,143,228,202,177,135,
+ 74, 32,135, 74, 32,230,205,181,217,179,143,143, 85, 42,205,164,128,
+ 143, 85, 42,205,164,128,143, 85, 42,217,179,143,217,179,143,217,179,
+ 143,217,179,143,217,179,143,217,179,143,230,205,181,135, 74, 32,135,
+ 74, 32,231,207,184,217,179,143,182,133, 95,143, 85, 42,143, 85, 42,
+ 143, 85, 42,182,133, 95,217,179,143,217,179,143,217,179,143,217,179,
+ 143,217,179,143,217,179,143,231,207,184,135, 74, 32,135, 74, 32,232,
+ 210,188,217,179,143,217,179,143,205,164,128,143, 85, 42,205,164,128,
+ 217,179,143,217,179,143,217,179,143,217,179,143,217,179,143,217,179,
+ 143,217,179,143,232,210,188,135, 74, 32,136, 76, 34,230,209,188,234,
+ 212,192,234,212,192,234,212,192,234,212,192,234,212,192,226,197,169,
+ 217,179,143,217,179,143,217,179,143,217,179,143,217,179,143,217,179,
+ 143,234,212,192,135, 74, 32,139, 77, 36,136, 76, 34,135, 74, 32,135,
+ 74, 32,135, 74, 32,135, 74, 32,140, 82, 42,218,190,167,227,200,173,
+ 217,179,143,217,179,143,217,179,143,217,179,143,217,179,143,235,215,
+ 196,135, 74, 32,135, 74, 32,204,164,133,188,136, 95,188,136, 94,188,
+ 136, 94,188,136, 94,175,120, 80,144, 86, 46,220,194,172,236,217,199,
+ 236,217,199,236,217,199,236,217,199,236,217,199,233,214,196,138, 79,
+ 37,135, 74, 32,209,176,151,218,186,158,205,161,124,205,161,123,205,
+ 161,124,218,186,158,190,150,120,135, 74, 32,135, 74, 32,135, 74, 32,
+ 135, 74, 32,135, 74, 32,135, 74, 32,138, 78, 37,198,168,147,225,210,
+ 200,144, 89, 49,218,191,169,236,217,200,236,217,200,236,217,200,218,
+ 191,169,144, 89, 49,225,210,200,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,225,210,
+ 200,135, 74, 32,135, 74, 32,135, 74, 32,135, 74, 32,135, 74, 32,225,
+ 210,200,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255);
+
+Const
+ stdimg_ellipse : Array[0..181] of byte = (
+ 66, 77,182, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 40, 0, 0,
+ 0, 10, 0, 0, 0, 4, 0, 0, 0, 1, 0, 24, 0, 0, 0, 0, 0,
+ 128, 0, 0, 0, 19, 11, 0, 0, 19, 11, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,255, 0,229,255, 0,229,255, 0,229,255, 0,229,255, 0,
+ 229,255, 0,229,255, 0,229,255, 0,229,255, 0,229,255, 0,229, 0,
+ 0,255, 0,229, 0, 0, 0, 0, 0, 0,255, 0,229, 0, 0, 0, 0,
+ 0, 0,255, 0,229, 0, 0, 0, 0, 0, 0,255, 0,229, 0, 0,255,
+ 0,229, 0, 0, 0, 0, 0, 0,255, 0,229, 0, 0, 0, 0, 0, 0,
+ 255, 0,229, 0, 0, 0, 0, 0, 0,255, 0,229, 0, 0,255, 0,229,
+ 255, 0,229,255, 0,229,255, 0,229,255, 0,229,255, 0,229,255, 0,
+ 229,255, 0,229,255, 0,229,255, 0,229, 0, 0);
+
+Const
+ stdimg_dialog_warning_32 : Array[0..3125] of byte = (
+ 66, 77, 54, 12, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 40, 0, 0,
+ 0, 32, 0, 0, 0, 32, 0, 0, 0, 1, 0, 24, 0, 0, 0, 0, 0,
+ 0, 12, 0, 0, 19, 11, 0, 0, 19, 11, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,252,252,252,244,244,244,237,237,237,235,235,
+ 235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,
+ 235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,
+ 235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,
+ 235,235,235,235,237,237,237,242,242,242,248,248,248,254,254,254,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,239,239,239,
+ 222,222,222,198,198,207,190,190,201,186,186,197,186,186,197,186,186,
+ 197,186,186,197,186,186,197,186,186,197,186,186,197,186,186,197,186,
+ 186,197,186,186,197,186,186,197,186,186,197,186,186,197,186,186,197,
+ 186,186,197,186,186,197,186,186,197,186,186,197,186,186,197,190,190,
+ 201,189,189,200,197,197,206,223,223,223,246,246,246,255,255,255,255,
+ 255,255,255,255,255,244,244,244,178,178,210, 22, 22,165, 0, 0,159,
+ 0, 0,159, 0, 0,159, 0, 0,159, 0, 0,159, 0, 0,159, 0, 0,
+ 159, 0, 0,159, 0, 0,159, 0, 0,159, 0, 0,159, 0, 0,159, 0,
+ 0,159, 0, 0,159, 0, 0,159, 0, 0,159, 0, 0,159, 0, 0,159,
+ 0, 0,159, 0, 0,159, 0, 0,159, 0, 0,159, 0, 0,159, 0, 0,
+ 159, 21, 21,165,173,173,209,250,250,250,255,255,255,255,255,255,243,
+ 243,243, 39, 39,171, 61, 61,196,112,112,224,117,117,226,116,116,226,
+ 113,113,225,111,111,225,108,108,224,105,105,223,102,102,223,100,100,
+ 222, 97, 97,222, 94, 94,221, 92, 92,220, 89, 89,220, 86, 86,219, 83,
+ 83,219, 81, 81,218, 78, 78,218, 75, 75,217, 72, 72,216, 69, 69,216,
+ 67, 67,215, 64, 64,215, 62, 62,214, 54, 54,212, 28, 28,188, 20, 20,
+ 166,246,246,246,255,255,255,255,255,255,253,253,253, 15, 15,166,121,
+ 121,221, 20, 20,208, 0, 0,204, 0, 0,204, 0, 0,204, 0, 0,204,
+ 0, 0,204, 0, 0,204, 0, 0,204, 0, 0,204, 0, 0,204, 0, 0,
+ 204, 0, 0,204, 0, 0,204, 0, 0,204, 0, 0,204, 0, 0,204, 0,
+ 0,204, 0, 0,204, 0, 0,204, 0, 0,204, 0, 0,204, 0, 0,204,
+ 0, 0,204, 10, 10,206, 56, 56,207, 2, 2,160,247,247,251,255,255,
+ 255,255,255,255,255,255,255, 90, 90,194, 89, 89,200, 58, 58,216, 0,
+ 0,204,163,163,219,210,210,224,210,210,224,211,211,225,212,212,226,
+ 212,212,226,213,213,227,214,214,228,215,215,229,216,216,230,216,216,
+ 230,217,217,231,217,217,231,218,218,232,218,218,232,219,219,233,220,
+ 220,234,221,221,235,222,222,236,193,193,231, 0, 0,204, 27, 27,209,
+ 44, 44,192, 53, 53,181,255,255,255,255,255,255,255,255,255,255,255,
+ 255,221,221,242, 25, 25,168,117,117,221, 8, 8,206, 80, 80,211,224,
+ 224,224,225,225,225,225,225,225,226,226,226,227,227,227,227,227,227,
+ 228,228,228,229,229,229,230,230,230,230,230,230,231,231,231,232,232,
+ 232,233,233,233,234,234,234,234,234,234,235,235,235,236,236,236,237,
+ 237,237,105,105,219, 3, 3,205, 59, 59,211, 14, 14,166,193,193,232,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,109,109,
+ 201, 85, 85,197, 68, 68,218, 2, 2,204,179,179,219,224,224,224,225,
+ 225,225,225,225,225,226,226,226,227,227,227,227,227,227,228,228,228,
+ 60, 60, 60, 55, 55, 55,230,230,230,231,231,231,232,232,232,233,233,
+ 233,234,234,234,234,234,234,235,235,235,205,205,231, 7, 7,205, 36,
+ 36,211, 47, 47,188, 70, 70,186,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,234,234,247, 23, 23,169,121,121,
+ 220, 14, 14,207, 59, 59,209,223,223,223,224,224,224,224,224,224,225,
+ 225,225,226,226,226,226,226,226,227,227,227, 55, 55, 55, 53, 53, 53,
+ 230,230,230,230,230,230,231,231,231,232,232,232,233,233,233,234,234,
+ 234,234,234,234, 82, 82,215, 8, 8,206, 67, 67,210, 10, 10,163,212,
+ 212,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,129,129,208, 74, 74,190, 81, 81,220, 0, 0,
+ 204,162,162,218,223,223,223,224,224,224,224,224,224,225,225,225,226,
+ 226,226,226,226,226,215,215,215,215,215,215,229,229,229,230,230,230,
+ 230,230,230,231,231,231,232,232,232,233,233,233,186,186,227, 1, 1,
+ 204, 47, 47,213, 46, 46,185, 96, 96,196,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 244,244,251, 25, 25,169,121,121,218, 23, 23,209, 42, 42,208,221,221,
+ 223,223,223,223,224,224,224,224,224,224,225,225,225,226,226,226, 37,
+ 37, 37, 37, 37, 37,228,228,228,229,229,229,229,229,229,230,230,230,
+ 231,231,231,232,232,232, 59, 59,211, 14, 14,207, 73, 73,209, 11, 11,
+ 164,228,228,245,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,151,151,216,
+ 63, 63,185, 94, 94,222, 0, 0,204,141,141,215,223,223,223,223,223,
+ 223,224,224,224,224,224,224,225,225,225, 27, 27, 27, 27, 27, 27,227,
+ 227,227,228,228,228,229,229,229,229,229,229,230,230,230,164,164,223,
+ 0, 0,204, 60, 60,215, 41, 41,179,120,120,205,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,251,251,253, 35, 35,174,116,116,215,
+ 34, 34,211, 27, 27,206,215,215,221,223,223,223,223,223,223,224,224,
+ 224,224,224,224, 13, 13, 13, 13, 13, 13,226,226,226,227,227,227,228,
+ 228,228,229,229,229,226,226,228, 40, 40,209, 24, 24,209, 75, 75,206,
+ 16, 16,167,241,241,250,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,172,172,224, 49, 49,178,106,106,223, 1, 1,204,
+ 121,121,213,222,222,222,222,222,222,223,223,223,224,224,224, 3, 3,
+ 3, 3, 3, 3,225,225,225,226,226,226,227,227,227,228,228,228,140,
+ 140,218, 1, 1,204, 75, 75,218, 34, 34,174,144,144,213,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,254,
+ 254,255, 49, 49,179,109,109,211, 47, 47,213, 16, 16,206,206,206,220,
+ 222,222,222,222,222,222,215,215,215, 0, 0, 0, 0, 0, 0,217,217,
+ 217,225,225,225,226,226,226,218,218,226, 25, 25,207, 36, 36,211, 74,
+ 74,203, 27, 27,171,249,249,253,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,193,193,232, 36,
+ 36,173,117,117,224, 4, 4,205,102,102,212,221,221,221,222,222,222,
+ 204,204,204, 0, 0, 0, 0, 0, 0,206,206,206,225,225,225,225,225,
+ 225,118,118,216, 4, 4,205, 87, 87,219, 27, 27,170,167,167,222,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255, 69, 69,186,100,100,205, 59,
+ 59,216, 7, 7,205,195,195,219,221,221,221,193,193,193, 0, 0, 0,
+ 0, 0, 0,195,195,195,224,224,224,206,206,223, 12, 12,205, 49, 49,
+ 214, 70, 70,199, 45, 45,178,254,254,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,211,211,238, 25, 25,170,124,124,224, 8, 8,206, 82,
+ 82,210,221,221,221,218,218,218,207,207,207,207,207,207,220,220,220,
+ 223,223,223, 97, 97,213, 9, 9,206, 98, 98,219, 17, 17,166,189,189,
+ 230,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255, 92, 92,194, 89, 89,199, 72, 72,218, 2, 2,204,180,180,217,221,
+ 221,221,221,221,221,222,222,222,222,222,222,192,192,220, 4, 4,204,
+ 64, 64,217, 65, 65,194, 68, 68,186,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,226,226,244, 20, 20,
+ 168,128,128,224, 15, 15,207, 63, 63,209,220,220,220,221,221,221,221,
+ 221,221,222,222,222, 74, 74,210, 17, 17,207,104,104,219, 11, 11,163,
+ 210,210,238,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,114,114,202, 79, 79,193, 85, 85,
+ 220, 0, 0,204,162,162,215,220,220,220,220,220,220,173,173,217, 1,
+ 1,204, 80, 80,220, 59, 59,189, 92, 92,194,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,238,238,249, 20, 20,167,128,128,222, 25, 25,209, 44, 44,
+ 207,218,218,219,220,220,220, 53, 53,208, 28, 28,210,106,106,217, 10,
+ 10,164,226,226,244,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 137,137,211, 67, 67,187, 99, 99,223, 0, 0,204,143,143,214,152,152,
+ 214, 1, 1,204, 97, 97,223, 51, 51,184,118,118,204,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,246,246,252, 25, 25,169,
+ 122,122,218, 36, 36,211, 21, 21,206, 23, 23,205, 42, 42,212,104,104,
+ 215, 14, 14,165,239,239,249,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,158,158,218, 53, 53,181,113,113,225,
+ 1, 1,204, 3, 3,205,113,113,225, 41, 41,177,142,142,212,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,252,252,254, 37, 37,174,111,111,213, 66, 66,217, 70, 70,218,
+ 96, 96,210, 25, 25,170,248,248,252,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,180,
+ 180,227, 22, 22,168,109,109,218,106,106,218, 20, 20,169,165,165,221,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,140,140,211, 12,
+ 12,165, 8, 8,163,124,124,206,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,252,252,254,251,251,253,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255);
+
+Const
+ stdimg_folder_home_16 : Array[0..821] of byte = (
+ 66, 77, 54, 3, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 40, 0, 0,
+ 0, 16, 0, 0, 0, 16, 0, 0, 0, 1, 0, 24, 0, 0, 0, 0, 0,
+ 0, 3, 0, 0, 19, 11, 0, 0, 19, 11, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 198,167,146,138, 78, 37,135, 74, 32,135, 74, 32,135, 74, 32,135, 74,
+ 32,135, 74, 32,135, 74, 32,135, 74, 32,135, 74, 32,135, 74, 32,135,
+ 74, 32,135, 74, 32,135, 74, 32,138, 78, 37,198,169,148,138, 78, 37,
+ 217,181,149,221,186,154, 98,173,106, 89,163, 97, 74,135, 79,117,122,
+ 118,121,120,121,126,126,126,118,118,118,103,130,106, 95,165,103, 72,
+ 146, 79, 83,137, 86,217,181,149,138, 79, 37,135, 74, 32,223,192,162,
+ 213,172,134,195,229,197,142,200,143,101,160,107,216,226,216,149,147,
+ 149,167,167,167,134,132,134,202,236,206,104,181,114,132,188,135,172,
+ 203,171,223,192,162,135, 74, 32,135, 74, 32,226,197,170,215,175,138,
+ 215,175,138,215,175,138,171,172,172,246,245,246,136,136,136,157,157,
+ 157,127,127,127,254,254,255,130,127,127,215,175,138,215,175,138,226,
+ 197,170,135, 74, 32,135, 74, 32,228,202,177,217,179,143,217,179,143,
+ 217,179,143,170,174,177,252,250,248,130,131,131,115,115,115,126,126,
+ 126,255,255,255,112,116,124,217,179,143,217,179,143,228,202,177,135,
+ 74, 32,135, 74, 32,230,205,181,217,179,143,217,179,143, 88,152,197,
+ 94,150,192,218,222,224,245,243,241,237,238,238,247,244,242,193,201,
+ 212, 60, 97,147, 56, 92,143,217,179,143,230,205,181,135, 74, 32,135,
+ 74, 32,231,207,184,217,179,143,217,179,143,103,160,205,100,162,205,
+ 92,149,191,212,215,217,254,248,243,188,202,213, 69,120,167, 91,139,
+ 179, 71,112,157,217,179,143,231,207,184,135, 74, 32,135, 74, 32,232,
+ 210,188,217,179,143,217,179,143,217,179,143, 99,156,203, 94,158,204,
+ 94,150,192,161,185,202, 79,140,186,106,157,196, 78,125,169,217,179,
+ 143,217,179,143,232,210,188,135, 74, 32,136, 76, 34,230,209,188,234,
+ 212,192,234,212,192,234,212,192,234,212,192, 95,154,202,102,163,207,
+ 93,151,194,111,168,206, 78,132,177,217,179,143,217,179,143,217,179,
+ 143,234,212,192,135, 74, 32,139, 77, 36,136, 76, 34,135, 74, 32,135,
+ 74, 32,135, 74, 32,135, 74, 32,140, 82, 42, 84,138,186, 79,134,180,
+ 77,125,171,217,179,143,217,179,143,217,179,143,217,179,143,235,215,
+ 196,135, 74, 32,135, 74, 32,204,164,133,188,136, 95,188,136, 94,188,
+ 136, 94,188,136, 94,175,120, 80,144, 86, 46,220,194,172,236,217,199,
+ 236,217,199,236,217,199,236,217,199,236,217,199,233,214,196,138, 79,
+ 37,135, 74, 32,209,176,151,218,186,158,205,161,124,205,161,123,205,
+ 161,124,218,186,158,190,150,120,135, 74, 32,135, 74, 32,135, 74, 32,
+ 135, 74, 32,135, 74, 32,135, 74, 32,138, 78, 37,198,168,147,225,210,
+ 200,144, 89, 49,218,191,169,236,217,200,236,217,200,236,217,200,218,
+ 191,169,144, 89, 49,225,210,200,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,225,210,
+ 200,135, 74, 32,135, 74, 32,135, 74, 32,135, 74, 32,135, 74, 32,225,
+ 210,200,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255);
+
+Const
+ stdimg_arrow_down : Array[0..149] of byte = (
+ 66, 77,150, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 40, 0, 0,
+ 0, 7, 0, 0, 0, 4, 0, 0, 0, 1, 0, 24, 0, 0, 0, 0, 0,
+ 96, 0, 0, 0, 19, 11, 0, 0, 19, 11, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,255, 0,255,255, 0,255,255, 0,255, 0, 0, 0,255, 0,
+ 255,255, 0,255,255, 0,255, 0, 0, 0,255, 0,255,255, 0,255, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,255, 0,255,255, 0,255, 0, 0, 0,
+ 255, 0,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,255, 0,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
Const
stdimg_dialog_confirmation_32 : Array[0..3125] of byte = (
@@ -739,7 +828,73 @@ Const
255,255,255,255,255,255,255,255,255,255,255,255,255,255,255);
Const
- stdimg_list_remove_16 : Array[0..821] of byte = (
+ stdimg_document : Array[0..1061] of byte = (
+ 66, 77, 38, 4, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 40, 0, 0,
+ 0, 18, 0, 0, 0, 18, 0, 0, 0, 1, 0, 24, 0, 0, 0, 0, 0,
+ 240, 3, 0, 0,235, 10, 0, 0,235, 10, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,255, 0,255,255, 0,255,255, 0,255,255, 0,255, 98, 98,
+ 98, 91, 91, 91, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90,
+ 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 97, 97, 97,
+ 255, 0,255,255, 0,255, 0, 0,255, 0,255,255, 0,255,255, 0,255,
+ 88, 88, 88, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 90, 90, 90,255, 0,255,255, 0,255, 0, 0,255, 0,255,255,
+ 0,255,255, 0,255, 88, 88, 88,182,193,198,182,193,198,172,189,196,
+ 163,184,195,154,179,194,145,175,192,136,170,191,127,165,190,118,160,
+ 189,115,158,188, 48, 48, 48, 90, 90, 90,255, 0,255,255, 0,255, 0,
+ 0,255, 0,255,255, 0,255,255, 0,255, 88, 88, 88,222,222,222,225,
+ 237,244,216,232,242,208,228,240,200,222,238,191,218,236,184,214,233,
+ 176,209,231,167,204,229,120,161,188, 48, 48, 48, 90, 90, 90,255, 0,
+ 255,255, 0,255, 0, 0,255, 0,255,255, 0,255,255, 0,255, 88, 88,
+ 88,222,222,222,233,241,247,137,144,148,132,141,147,127,139,146,122,
+ 136,145,117,133,143,112,130,142,176,209,231,127,163,188, 48, 48, 48,
+ 90, 90, 90,255, 0,255,255, 0,255, 0, 0,255, 0,255,255, 0,255,
+ 255, 0,255, 88, 88, 88,222,222,222,242,246,250,234,242,248,226,238,
+ 245,218,233,242,210,228,240,201,224,238,193,220,236,186,214,233,133,
+ 166,188, 48, 48, 48, 90, 90, 90,255, 0,255,255, 0,255, 0, 0,255,
+ 0,255,255, 0,255,255, 0,255, 88, 88, 88,222,222,222,251,252,252,
+ 148,151,152,143,148,151,138,145,149,133,142,148,128,139,146,123,136,
+ 145,194,219,236,138,168,188, 48, 48, 48, 90, 90, 90,255, 0,255,255,
+ 0,255, 0, 0,255, 0,255,255, 0,255,255, 0,255, 88, 88, 88,222,
+ 222,222,255,255,255,252,253,253,244,248,250,235,243,248,228,238,245,
+ 220,234,243,212,230,241,202,223,236,144,171,188, 48, 48, 48, 90, 90,
+ 90,255, 0,255,255, 0,255, 0, 0,255, 0,255,255, 0,255,255, 0,
+ 255, 88, 88, 88,222,222,222,255,255,255,155,155,155,154,154,154,148,
+ 151,152,143,148,151,139,145,149,134,143,148,212,226,236,151,174,188,
+ 48, 48, 48, 90, 90, 90,255, 0,255,255, 0,255, 0, 0,255, 0,255,
+ 255, 0,255,255, 0,255, 88, 88, 88,223,223,223,255,255,255,255,255,
+ 255,255,255,255,254,254,254,245,248,251,237,244,248,227,237,243,220,
+ 231,238,151,174,188, 48, 48, 48, 90, 90, 90,255, 0,255,255, 0,255,
+ 0, 0,255, 0,255,255, 0,255,255, 0,255, 88, 88, 88,222,222,222,
+ 255,255,255,155,155,155,155,155,155,155,155,155,155,155,155,246,249,
+ 251,236,240,244,217,224,231,175,182,190, 48, 48, 48, 90, 90, 90,255,
+ 0,255,255, 0,255, 0, 0,255, 0,255,255, 0,255,255, 0,255, 88,
+ 88, 88,222,222,222,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,245,245,246,222,224,226,177,183,188,132,137,143, 48, 48,
+ 48, 90, 90, 90,255, 0,255,255, 0,255, 0, 0,255, 0,255,255, 0,
+ 255,255, 0,255, 88, 88, 88,222,222,222,255,255,255,155,155,155,155,
+ 155,155,155,155,155,255,255,255,137,137,137,112,112,112,107,107,107,
+ 66, 66, 66, 48, 48, 48, 96, 96, 96,255, 0,255,255, 0,255, 0, 0,
+ 255, 0,255,255, 0,255,255, 0,255, 88, 88, 88,222,222,222,255,255,
+ 255,255,255,255,255,255,255,255,255,255,252,252,252,112,112,112,206,
+ 206,206,255,255,255,153,153,153, 48, 48, 48,135,135,135,255, 0,255,
+ 255, 0,255, 0, 0,255, 0,255,255, 0,255,255, 0,255, 88, 88, 88,
+ 222,222,222,255,255,255,255,255,255,255,255,255,255,255,255,234,234,
+ 234,109,109,109,255,255,255,153,153,153, 88, 88, 88,135,135,135,255,
+ 0,255,255, 0,255,255, 0,255, 0, 0,255, 0,255,255, 0,255,255,
+ 0,255, 88, 88, 88,222,222,222,222,222,222,222,222,222,222,222,222,
+ 222,222,222,177,183,188, 88, 88, 88,153,153,153, 88, 88, 88,135,135,
+ 135,255, 0,255,255, 0,255,255, 0,255,255, 0,255, 0, 0,255, 0,
+ 255,255, 0,255,255, 0,255, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88,
+ 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255, 0, 0,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255, 0, 0);
+
+Const
+ stdimg_folder_open_file_16 : Array[0..821] of byte = (
66, 77, 54, 3, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 40, 0, 0,
0, 16, 0, 0, 0, 16, 0, 0, 0, 1, 0, 24, 0, 0, 0, 0, 0,
0, 3, 0, 0,215, 13, 0, 0,215, 13, 0, 0, 0, 0, 0, 0, 0,
@@ -749,697 +904,245 @@ Const
255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,182,132, 93,164,101, 52,164,101, 52,
- 164,101, 52,164,101, 52,164,101, 52,164,101, 52,164,101, 52,164,101,
- 52,164,101, 52,164,101, 52,182,132, 93,255,255,255,255,255,255,255,
- 255,255,255,255,255,164,101, 52,229,204,180,219,183,149,219,182,148,
- 218,180,146,218,179,144,217,173,134,216,170,131,215,168,127,215,166,
- 125,224,190,159,164,101, 52,255,255,255,255,255,255,255,255,255,255,
- 255,255,164,101, 52,232,211,192,231,209,187,231,209,188,230,206,183,
- 230,206,183,230,206,183,230,206,183,230,205,182,230,204,181,230,204,
- 182,164,101, 52,255,255,255,255,255,255,255,255,255,255,255,255,182,
- 132, 93,164,101, 52,164,101, 52,164,101, 52,164,101, 52,164,101, 52,
- 164,101, 52,164,101, 52,164,101, 52,164,101, 52,164,101, 52,182,132,
- 93,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 165,129,103,139, 82, 41,139, 82, 41,157,108, 74,157,108, 74,157,108,
+ 74,157,108, 74,157,108, 74,157,108, 74,157,108, 74,157,108, 74,157,
+ 108, 74,139, 82, 41,145,110, 84,255,255,255,255,255,255,139, 82, 41,
+ 209,165,123,210,165,124,210,165,124,210,165,124,210,165,124,210,165,
+ 124,210,165,124,210,165,124,210,165,124,210,165,124,210,165,124,209,
+ 165,123,139, 82, 41,255,255,255,255,255,255,157,104, 63,208,161,116,
+ 207,159,114,207,159,114,207,159,114,207,159,114,207,159,114,207,159,
+ 114,207,159,114,207,159,114,207,159,114,207,159,114,208,161,116,139,
+ 82, 41,255,255,255,139, 82, 41,196,151,112,208,162,119,207,160,117,
+ 207,160,117,207,160,117,207,160,117,207,160,117,207,160,117,207,160,
+ 117,207,160,117,207,160,117,207,160,117,208,162,119,196,151,112,139,
+ 82, 41,139, 82, 41,206,164,127,210,165,123,209,164,122,209,164,122,
+ 209,164,122,209,164,122,209,164,122,209,164,122,209,164,122,209,164,
+ 122,209,164,122,209,164,122,210,166,124,212,169,129,139, 82, 41,139,
+ 82, 41,215,180,148,220,186,153,220,186,153,220,186,153,220,185,152,
+ 216,179,143,212,169,130,211,168,127,211,168,127,211,168,127,211,168,
+ 127,211,168,127,212,168,128,209,169,133,139, 82, 41,139, 82, 41,139,
+ 82, 41,139, 82, 41,139, 82, 41,139, 82, 41,139, 82, 41,139, 82, 41,
+ 210,173,142,218,180,145,217,179,145,217,179,145,217,179,145,217,179,
+ 145,217,180,145,217,183,152,139, 82, 41,255,255,255,139, 82, 41,127,
+ 120,111,253,253,253,248,249,249,243,241,240,205,137, 89,139, 82, 41,
+ 139, 82, 41,139, 82, 41,139, 82, 41,139, 82, 41,139, 82, 41,139, 82,
+ 41,139, 82, 41,139, 82, 41,255,255,255,139, 82, 41,142,136,127,242,
+ 242,242,241,242,241,241,241,241,205,137, 89,255,247,240,253,231,214,
+ 253,230,212,252,228,208,251,227,203,254,243,232,205,136, 88,139, 82,
+ 41,255,255,255,255,255,255,139, 82, 41,177,154,132,151,138,124,150,
+ 137,123,148,136,121,205,137, 89,255,247,242, 92, 92, 92, 92, 92, 92,
+ 92, 92, 92, 92, 92, 92,253,242,231,205,137, 89,139, 82, 41,255,255,
+ 255,255,255,255,139, 82, 41,218,183,153,212,172,137,212,172,137,213,
+ 174,140,205,136, 88,254,247,241,252,228,209,251,226,204,249,221,196,
+ 247,218,192,252,242,233,205,137, 89,139, 82, 41,255,255,255,255,255,
+ 255,157,103, 62,197,159,132,213,181,155,213,181,155,211,179,152,204,
+ 135, 87,255,247,241, 93, 93, 93, 92, 92, 92, 92, 92, 92,254,249,243,
+ 255,247,240,205,137, 89,255,255,255,255,255,255,255,255,255,255,255,
+ 255,139, 82, 41,139, 82, 41,139, 82, 41,139, 82, 41,205,137, 89,255,
+ 247,240,255,247,240,255,247,240,255,247,240,255,247,240,255,247,240,
+ 205,137, 89,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,205,137, 89,205,137, 89,205,
+ 137, 89,205,137, 89,205,137, 89,205,137, 89,205,137, 89,205,137, 89,
255,255,255,255,255,255);
Const
- stdimg_arrow_right : Array[0..89] of byte = (
- 66, 77, 90, 0, 0, 0, 0, 0, 0, 0, 62, 0, 0, 0, 40, 0, 0,
- 0, 4, 0, 0, 0, 7, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
- 28, 0, 0, 0, 19, 11, 0, 0, 19, 11, 0, 0, 2, 0, 0, 0, 2,
- 0, 0, 0, 0, 0, 0, 0,255,255,255, 0,112, 0, 0, 0, 48, 0,
- 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 48, 0, 0,
- 0,112, 0, 0, 0);
-
-Const
- stdimg_choice_yes_16 : Array[0..821] of byte = (
- 66, 77, 54, 3, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 40, 0, 0,
- 0, 16, 0, 0, 0, 16, 0, 0, 0, 1, 0, 24, 0, 0, 0, 0, 0,
- 0, 3, 0, 0, 19, 11, 0, 0, 19, 11, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
- 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
- 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
- 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
- 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
- 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
- 255, 0,255,255, 0,255, 12,164, 60, 17,171, 71, 13,173, 73,104,175,
- 120,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
- 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
- 87,183,107, 78,224,155, 92,234,170, 92,234,171, 35,192,104, 87,167,
- 106,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
- 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255, 32,183, 89,
- 102,255,205,104,255,201, 85,255,195, 73,252,184, 24,199,107, 85,166,
- 102,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
- 0,255,255, 0,255,255, 0,255,157,207,165, 22,223,131, 47,255,181,
- 45,255,174, 30,255,170, 3,255,160, 17,250,157, 12,190, 93, 68,158,
- 86,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
- 0,255,255, 0,255, 68,173, 91, 0,248,147, 1,254,156, 10,254,160,
- 18,251,159, 38,250,165, 49,242,160, 70,234,157, 21,183, 87, 74,169,
- 94,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
- 0,255, 7,173, 65, 7,243,144, 45,243,160, 72,243,171,105,199,139,
- 96,231,164,112,241,183,110,233,172,102,224,157, 28,169, 74, 57,157,
- 75,255, 0,255,255, 0,255,255, 0,255,255, 0,255,148,199,148, 18,
- 202,101, 79,235,162,102,241,178, 85,205,129,255, 0,255,172,211,180,
- 89,192,126,129,232,178,130,225,170,129,215,157, 45,168, 78, 63,165,
- 77,255, 0,255,255, 0,255,255, 0,255,127,196,134, 86,221,149,112,
- 231,171,111,233,173,152,207,158,255, 0,255,255, 0,255,255, 0,255,
- 101,183,121,151,227,181,150,221,173,157,217,170, 60,168, 84, 44,152,
- 56,255, 0,255,255, 0,255,255, 0,255,138,190,142, 97,180,115, 81,
- 180,107,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
- 109,181,120,173,225,187,170,219,179,181,219,181, 84,174,101, 42,147,
- 51,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
- 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
- 121,181,123,195,228,198,191,223,191,206,230,203,110,184,122,115,185,
- 121,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
- 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
- 126,181,126,218,237,218,228,242,228,169,210,169,173,204,172,255, 0,
- 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
- 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
- 115,168,114,139,187,139,195,215,194,255, 0,255,255, 0,255,255, 0,
- 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
- 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
- 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
- 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
- 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
- 255, 0,255,255, 0,255);
+ stdimg_arrow_left : Array[0..137] of byte = (
+ 66, 77,138, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 40, 0, 0,
+ 0, 4, 0, 0, 0, 7, 0, 0, 0, 1, 0, 24, 0, 0, 0, 0, 0,
+ 84, 0, 0, 0, 19, 11, 0, 0, 19, 11, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,255, 0,255,255, 0,255,255, 0,255, 0, 0, 0,255, 0,
+ 255,255, 0,255, 0, 0, 0, 0, 0, 0,255, 0,255, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 255, 0,255, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 0,255,255, 0,
+ 255, 0, 0, 0, 0, 0, 0,255, 0,255,255, 0,255,255, 0,255, 0,
+ 0, 0);
Const
- stdimg_checkboxes : Array[0..2601] of byte = (
- 66, 77, 42, 10, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 40, 0, 0,
- 0, 65, 0, 0, 0, 13, 0, 0, 0, 1, 0, 24, 0, 0, 0, 0, 0,
- 244, 9, 0, 0,196, 14, 0, 0,196, 14, 0, 0, 0, 0, 0, 0, 0,
+ stdimg_dialog_error_32 : Array[0..3125] of byte = (
+ 66, 77, 54, 12, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 40, 0, 0,
+ 0, 32, 0, 0, 0, 32, 0, 0, 0, 1, 0, 24, 0, 0, 0, 0, 0,
+ 0, 12, 0, 0, 19, 11, 0, 0, 19, 11, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,254,254,254,249,249,249,242,242,242,233,
+ 233,233,225,225,225,219,219,219,213,213,213,208,208,208,204,204,204,
+ 208,208,208,211,211,211,216,216,216,222,222,222,229,229,229,239,239,
+ 239,247,247,247,252,252,252,255,255,255,255,255,255,255,255,255,255,
255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,245,245,245,231,231,
+ 231,219,219,219,208,208,208,198,198,198,187,187,187,178,178,178,169,
+ 169,169,162,162,162,156,156,156,153,153,153,154,154,154,157,157,157,
+ 162,162,162,170,170,170,179,179,179,189,189,189,199,199,199,209,209,
+ 209,222,222,222,239,239,239,252,252,252,255,255,255,255,255,255,255,
255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,245,245,245,233,233,233,220,220,220,208,208,208,195,195,
+ 195,183,183,183,159,159,170,102,102,164, 44, 44,169, 20, 20,172, 8,
+ 8,175, 2, 2,177, 7, 7,174, 19, 19,171, 40, 40,165, 96, 96,158,
+ 149,149,160,172,172,172,184,184,184,197,197,197,209,209,209,222,222,
+ 222,235,235,235,252,252,252,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,254,254,254,
+ 242,242,242,231,231,231,219,219,219,179,179,204, 60, 60,185, 6, 6,
+ 179, 16, 18,187, 25, 33,199, 39, 52,207, 49, 65,211, 57, 76,215, 48,
+ 65,210, 38, 50,203, 24, 32,197, 16, 17,184, 6, 6,178, 59, 59,182,
+ 171,171,196,209,209,209,221,221,221,232,232,232,244,244,244,255,255,
255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,250,250,253,
+ 101,101,208, 10, 10,182, 21, 26,196, 61, 78,218, 54, 70,218, 36, 46,
+ 211, 25, 30,207, 18, 22,205, 15, 17,203, 18, 22,203, 25, 30,205, 35,
+ 45,208, 52, 69,213, 55, 75,215, 21, 26,194, 9, 9,181,104,104,206,
+ 245,245,248,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,235,235,249, 51, 51,195, 17, 18,191, 59, 74,219,
+ 51, 64,218, 19, 21,209, 10, 10,206, 10, 10,205, 10, 10,205, 10, 10,
+ 204, 10, 10,203, 9, 9,203, 9, 9,202, 9, 9,201, 9, 9,200, 19,
+ 22,203, 47, 62,212, 53, 71,213, 15, 17,187, 54, 54,196,236,236,249,
255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,239,239,250, 27,
+ 27,187, 22, 26,198, 66, 82,225, 26, 31,214, 11, 11,210, 11, 11,209,
+ 11, 11,208, 11, 11,208, 10, 10,207, 10, 10,206, 10, 10,205, 10, 10,
+ 205, 10, 10,204, 10, 10,204, 9, 9,203, 9, 9,202, 9, 9,202, 24,
+ 30,206, 59, 78,217, 20, 24,193, 30, 30,188,240,240,250,255,255,255,
255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,252,252,254, 57, 57,197, 24, 27,202, 64, 78,226, 20,
+ 22,215, 12, 12,213, 12, 12,212, 12, 12,211, 11, 11,211, 11, 11,210,
+ 11, 11,209, 11, 11,209, 11, 11,208, 11, 11,207, 10, 10,207, 10, 10,
+ 206, 10, 10,205, 10, 10,204, 10, 10,204, 10, 10,203, 17, 20,205, 56,
+ 74,217, 21, 25,194, 60, 60,197,252,252,254,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,120,120,
+ 216, 19, 20,194, 68, 82,229, 19, 21,218, 13, 13,216, 13, 13,215, 12,
+ 12,214, 12, 12,214, 12, 12,213, 12, 12,212, 12, 12,211, 11, 11,211,
+ 11, 11,210, 11, 11,210, 11, 11,209, 11, 11,208, 11, 11,208, 10, 10,
+ 207, 10, 10,206, 10, 10,205, 10, 10,205, 17, 19,206, 60, 78,219, 18,
+ 19,191,124,124,217,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,230,230,247, 17, 17,187, 63, 75,228, 28, 31,
+ 222, 13, 13,219, 13, 13,218, 13, 13,217, 13, 13,216, 13, 13,216, 13,
+ 13,215, 12, 12,215, 12, 12,214, 12, 12,213, 12, 12,213, 12, 12,212,
+ 12, 12,211, 11, 11,210, 11, 11,210, 11, 11,209, 11, 11,208, 11, 11,
+ 208, 11, 11,207, 10, 10,207, 23, 28,210, 53, 69,217, 17, 17,185,232,
+ 232,248,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 91, 91,207, 28, 31,208, 53, 61,229, 14, 14,221, 14, 14,221, 14, 14,
+ 220, 14, 14,220, 14, 14,219, 13, 13,218, 13, 13,218, 13, 13,217, 13,
+ 13,216, 13, 13,215, 12, 12,215, 12, 12,214, 12, 12,214, 12, 12,213,
+ 12, 12,212, 12, 12,211, 11, 11,211, 11, 11,210, 11, 11,209, 11, 11,
+ 209, 11, 11,208, 47, 59,217, 23, 27,200, 94, 94,208,255,255,255,255,
+ 255,255,255,255,255,255,255,255,240,240,250, 10, 10,183, 70, 82,232,
+ 29, 30,227, 29, 29,226, 22, 22,224, 14, 14,223, 14, 14,222, 14, 14,
+ 221, 14, 14,220, 14, 14,220, 14, 14,219, 13, 13,219, 13, 13,218, 13,
+ 13,217, 13, 13,216, 13, 13,216, 13, 13,215, 12, 12,214, 12, 12,214,
+ 12, 12,213, 12, 12,213, 12, 12,212, 12, 12,211, 11, 11,210, 18, 21,
+ 212, 60, 77,222, 9, 10,182,242,242,251,255,255,255,255,255,255,255,
+ 255,255,166,166,228, 24, 25,197,104,111,238, 84, 84,235, 84, 84,234,
+ 84, 84,234, 72, 72,232, 51, 51,229, 25, 25,225, 15, 15,223, 14, 14,
+ 222, 14, 14,221, 14, 14,221, 14, 14,220, 14, 14,219, 13, 13,219, 13,
+ 13,218, 13, 13,218, 13, 13,217, 13, 13,216, 13, 13,215, 12, 12,215,
+ 12, 12,214, 12, 12,213, 12, 12,213, 12, 12,212, 58, 72,223, 20, 22,
+ 193,170,170,229,255,255,255,255,255,255,255,255,255, 78, 78,204, 55,
+ 58,217,103,107,240, 82, 82,236, 83, 83,236, 83, 83,236, 83, 83,235,
+ 82, 82,234, 81, 81,234, 58, 58,230, 26, 26,225, 15, 15,224, 15, 15,
+ 223, 14, 14,223, 14, 14,222, 14, 14,221, 14, 14,220, 14, 14,220, 14,
+ 14,219, 13, 13,218, 13, 13,218, 13, 13,217, 13, 13,216, 13, 13,216,
+ 13, 13,215, 12, 12,214, 40, 48,221, 28, 34,205, 82, 82,203,255,255,
+ 255,255,255,255,255,255,255, 38, 38,193, 88, 94,229, 93, 95,240, 80,
+ 80,237, 80, 80,237, 80, 80,237,243,243,243,243,243,243,243,243,243,
+ 243,243,243,243,243,243,241,241,241,239,239,239,239,239,239,239,239,
+ 239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,
+ 239,239,239,239,239,239,239,239, 13, 13,218, 13, 13,217, 23, 23,218,
+ 51, 56,223, 46, 55,215, 40, 40,192,255,255,255,255,255,255,255,255,
+ 255, 16, 16,185,109,115,238, 87, 87,240, 79, 79,239, 79, 79,239, 79,
+ 79,238,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,
+ 243,243,243,243,243,243,240,240,240,239,239,239,239,239,239,239,239,
+ 239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,
+ 239,239, 23, 23,221, 57, 57,226, 79, 79,229, 87, 89,229, 76, 87,225,
+ 19, 19,185,255,255,255,255,255,255,255,255,255, 3, 3,180,120,126,
+ 244, 81, 82,242, 77, 77,241, 77, 77,240, 77, 77,240,243,243,243,243,
+ 243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,
+ 243,243,243,241,241,241,239,239,239,239,239,239,239,239,239,239,239,
+ 239,239,239,239,239,239,239,239,239,239,241,241,241, 74, 74,231, 76,
+ 76,231, 76, 76,230, 82, 84,230, 97,110,233, 5, 5,180,255,255,255,
+ 255,255,255,255,255,255, 16, 16,185,103,108,239, 84, 85,244, 75, 75,
+ 243, 75, 75,242, 75, 75,241,243,243,243,243,243,243,243,243,243,243,
+ 243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,
+ 242,242,242,240,240,240,240,240,240,239,239,239,240,240,240,242,242,
+ 242,243,243,243,243,243,243, 75, 75,233, 75, 75,232, 75, 75,232, 83,
+ 85,233, 85, 95,228, 19, 19,186,255,255,255,255,255,255,255,255,255,
+ 37, 37,193, 82, 86,233, 87, 89,245, 73, 73,244, 73, 73,243, 74, 74,
+ 243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,
+ 243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,
+ 243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,
+ 243, 73, 73,234, 72, 72,233, 73, 73,233, 87, 90,235, 69, 76,223, 40,
+ 40,193,255,255,255,255,255,255,255,255,255, 77, 77,205, 53, 56,223,
+ 97, 99,247, 72, 72,246, 71, 71,245, 71, 71,245, 71, 71,244, 71, 71,
+ 243, 72, 72,243, 72, 72,243, 71, 71,242, 71, 71,241, 71, 71,241, 71,
+ 71,240, 72, 72,240, 72, 72,240, 71, 71,239, 71, 71,239, 71, 71,238,
+ 71, 71,237, 71, 71,236, 71, 71,237, 71, 71,236, 71, 71,236, 71, 71,
+ 235, 71, 71,234, 94, 99,237, 44, 49,214, 81, 81,204,255,255,255,255,
+ 255,255,255,255,255,165,165,228, 29, 30,203,113,118,250, 71, 71,247,
+ 71, 71,247, 71, 71,246, 71, 71,246, 70, 70,245, 70, 70,245, 70, 70,
+ 244, 70, 70,244, 70, 70,243, 70, 70,242, 69, 69,242, 69, 69,242, 69,
+ 69,241, 69, 69,240, 70, 70,240, 70, 70,239, 69, 69,239, 69, 69,239,
+ 69, 69,238, 69, 69,237, 69, 69,237, 70, 70,236, 69, 69,236,108,116,
+ 241, 25, 26,198,170,170,229,255,255,255,255,255,255,255,255,255,240,
+ 240,250, 10, 10,184,116,121,249, 77, 78,249, 71, 71,249, 71, 71,248,
+ 71, 71,248, 71, 71,247, 71, 71,246, 71, 71,246, 71, 71,246, 70, 70,
+ 245, 70, 70,244, 70, 70,244, 70, 70,243, 70, 70,243, 70, 70,242, 69,
+ 69,242, 69, 69,241, 69, 69,241, 69, 69,240, 69, 69,239, 68, 68,239,
+ 68, 68,239, 68, 68,239, 74, 75,239,106,115,240, 11, 11,183,241,241,
+ 251,255,255,255,255,255,255,255,255,255,255,255,255, 89, 89,208, 45,
+ 46,223,106,109,252, 71, 71,250, 71, 71,250, 71, 71,250, 71, 71,249,
+ 71, 71,248, 71, 71,248, 71, 71,247, 71, 71,247, 71, 71,246, 71, 71,
+ 246, 70, 70,245, 70, 70,245, 70, 70,244, 70, 70,243, 70, 70,243, 70,
+ 70,242, 69, 69,242, 69, 69,242, 69, 69,241, 69, 69,240, 69, 69,240,
+ 100,107,242, 43, 45,215, 93, 93,209,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,230,230,247, 17, 17,189,111,115,250, 85,
+ 86,252, 72, 72,252, 71, 71,251, 71, 71,251, 71, 71,250, 71, 71,250,
+ 71, 71,249, 71, 71,249, 71, 71,248, 71, 71,247, 71, 71,247, 71, 71,
+ 246, 71, 71,246, 71, 71,246, 70, 70,245, 70, 70,244, 70, 70,244, 70,
+ 70,243, 70, 70,242, 69, 69,242, 81, 83,242,104,111,241, 18, 18,188,
+ 232,232,248,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,120,120,217, 27, 28,206,122,126,254, 79, 79,253, 72,
+ 72,253, 72, 72,253, 72, 72,252, 71, 71,251, 71, 71,251, 71, 71,250,
+ 71, 71,250, 71, 71,250, 71, 71,249, 71, 71,248, 71, 71,248, 71, 71,
+ 247, 71, 71,246, 71, 71,246, 71, 71,246, 70, 70,245, 70, 70,245, 75,
+ 76,245,117,124,247, 28, 29,202,123,123,217,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,252,252,
+ 254, 55, 55,198, 44, 44,218,121,124,254, 79, 80,254, 72, 72,254, 72,
+ 72,253, 72, 72,253, 72, 72,253, 72, 72,252, 72, 72,252, 71, 71,251,
+ 71, 71,250, 71, 71,250, 71, 71,250, 71, 71,249, 71, 71,249, 71, 71,
+ 248, 71, 71,247, 71, 71,247, 78, 79,247,115,122,248, 43, 45,214, 59,
+ 59,199,252,252,254,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,238,238,250, 28, 28,
+ 189, 45, 45,216,125,127,254, 86, 88,254, 72, 72,254, 72, 72,254, 72,
+ 72,254, 72, 72,254, 72, 72,253, 72, 72,253, 72, 72,253, 72, 72,252,
+ 71, 71,251, 71, 71,251, 71, 71,250, 71, 71,250, 71, 71,250, 86, 87,
+ 250,120,126,250, 43, 45,213, 29, 29,189,240,240,250,255,255,255,255,
255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,234,234,249, 50, 50,196, 30, 30,
+ 204,115,117,248,111,114,254, 80, 81,254, 72, 72,254, 72, 72,254, 72,
+ 72,254, 72, 72,254, 72, 72,254, 72, 72,253, 72, 72,253, 72, 72,253,
+ 72, 72,252, 81, 82,252,109,113,252,111,116,246, 28, 29,201, 52, 52,
+ 196,235,235,249,255,255,255,255,255,255,255,255,255,255,255,255,255,
255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,249,249,253,105,105,212, 10, 10,184, 53, 54,
+ 218,122,124,251,117,120,254, 99,100,254, 88, 89,254, 82, 82,254, 77,
+ 78,254, 82, 82,254, 87, 89,254, 98,100,254,115,119,254,119,123,251,
+ 50, 51,216, 12, 12,185,105,105,212,250,250,253,255,255,255,255,255,
255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255, 0,127,127,127,191,191,
- 191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,
- 191,191,191,191,191,191,191,191,191,191,191,191,191,191,255,255,255,
- 127,127,127,191,191,191,191,191,191,191,191,191,191,191,191,191,191,
- 191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,
- 191,191,255,255,255,127,127,127,191,191,191,191,191,191,191,191,191,
- 191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,
- 191,191,191,191,191,191,191,255,255,255,127,127,127,191,191,191,191,
- 191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,
- 191,191,191,191,191,191,191,191,191,191,191,191,255,255,255,127,127,
- 127,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,
- 191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,
- 255,255,255, 0,127,127,127, 0, 0, 0,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,218,218,244, 74, 74,203, 11, 11,183, 35, 35,
+ 204, 68, 69,227, 92, 94,239,110,111,246,123,126,252,109,111,246, 91,
+ 93,238, 67, 68,227, 34, 34,204, 9, 9,183, 77, 77,204,219,219,244,
255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,191,191,191,255,255,255,127,127,127, 0, 0, 0,255,255,
255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,191,191,191,255,255,255,127,127,127,
- 0, 0, 0,127,127,127,127,127,127,127,127,127,127,127,127,127,127,
- 127,127,127,127,127,127,127,127,127,127,127,127,127,191,191,191,255,
- 255,255,127,127,127, 0, 0, 0,127,127,127,127,127,127,127,127,127,
- 127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,
- 127,191,191,191,255,255,255,127,127,127, 0, 0, 0,127,127,127,127,
- 127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,
- 127,127,127,127,127,127,191,191,191,255,255,255, 0,127,127,127, 0,
- 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,191,191,191,255,255,
- 255,127,127,127, 0, 0, 0,255,255,255, 0, 0, 0, 0, 0, 0,255,
- 255,255,255,255,255,255,255,255, 0, 0, 0, 0, 0, 0,255,255,255,
- 191,191,191,255,255,255,127,127,127, 0, 0, 0,127,127,127,127,127,
- 127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,
- 127,127,127,127,127,191,191,191,255,255,255,127,127,127, 0, 0, 0,
- 127,127,127, 52, 52, 52, 52, 52, 52,127,127,127,127,127,127,127,127,
- 127, 52, 52, 52, 52, 52, 52,127,127,127,191,191,191,255,255,255,127,
- 127,127, 0, 0, 0,127,127,127,127,127,127,127,127,127,127,127,127,
- 127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,191,191,
- 191,255,255,255, 0,127,127,127, 0, 0, 0,255,255,255,255,255,255,
255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,191,191,191,255,255,255,127,127,127, 0, 0, 0,255,
- 255,255, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,255,255,255,191,191,191,255,255,255,127,127,
- 127, 0, 0, 0,127,127,127,127,127,127,127,127,127,127,127,127,127,
- 127,127,127,127,127,127,127,127,127,127,127,127,127,127,191,191,191,
- 255,255,255,127,127,127, 0, 0, 0,127,127,127, 52, 52, 52, 52, 52,
- 52, 52, 52, 52,127,127,127, 52, 52, 52, 52, 52, 52, 52, 52, 52,127,
- 127,127,191,191,191,255,255,255,127,127,127, 0, 0, 0,127,127,127,
- 127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,
- 127,127,127,127,127,127,127,191,191,191,255,255,255, 0,127,127,127,
- 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,191,191,191,255,
- 255,255,127,127,127, 0, 0, 0,255,255,255,255,255,255, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,
- 255,191,191,191,255,255,255,127,127,127, 0, 0, 0,127,127,127,127,
- 127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,
- 127,127,127,127,127,127,191,191,191,255,255,255,127,127,127, 0, 0,
- 0,127,127,127,127,127,127, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
- 52, 52, 52, 52, 52,127,127,127,127,127,127,191,191,191,255,255,255,
- 127,127,127, 0, 0, 0,127,127,127,127,127,127,127,127,127,127,127,
- 127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,191,
- 191,191,255,255,255, 0,127,127,127, 0, 0, 0,255,255,255,255,255,
+ 255,255,255,255,255,255,237,237,250,162,162,227, 75, 75,204, 38, 38,
+ 193, 17, 17,186, 4, 4,180, 17, 17,186, 38, 38,194, 77, 77,205,164,
+ 164,228,238,238,250,255,255,255,255,255,255,255,255,255,255,255,255,
255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,191,191,191,255,255,255,127,127,127, 0, 0, 0,
- 255,255,255,255,255,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 0,
- 0,255,255,255,255,255,255,255,255,255,191,191,191,255,255,255,127,
- 127,127, 0, 0, 0,127,127,127,127,127,127,127,127,127,127,127,127,
- 127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,191,191,
- 191,255,255,255,127,127,127, 0, 0, 0,127,127,127,127,127,127,127,
- 127,127, 52, 52, 52, 52, 52, 52, 52, 52, 52,127,127,127,127,127,127,
- 127,127,127,191,191,191,255,255,255,127,127,127, 0, 0, 0,127,127,
- 127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,
- 127,127,127,127,127,127,127,127,191,191,191,255,255,255, 0,127,127,
- 127, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,191,191,191,
- 255,255,255,127,127,127, 0, 0, 0,255,255,255,255,255,255, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,
- 255,255,191,191,191,255,255,255,127,127,127, 0, 0, 0,127,127,127,
- 127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,
- 127,127,127,127,127,127,127,191,191,191,255,255,255,127,127,127, 0,
- 0, 0,127,127,127,127,127,127, 52, 52, 52, 52, 52, 52, 52, 52, 52,
- 52, 52, 52, 52, 52, 52,127,127,127,127,127,127,191,191,191,255,255,
- 255,127,127,127, 0, 0, 0,127,127,127,127,127,127,127,127,127,127,
- 127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,
- 191,191,191,255,255,255, 0,127,127,127, 0, 0, 0,255,255,255,255,
255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,191,191,191,255,255,255,127,127,127, 0, 0,
- 0,255,255,255, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,191,191,191,255,255,255,
- 127,127,127, 0, 0, 0,127,127,127,127,127,127,127,127,127,127,127,
- 127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,191,
- 191,191,255,255,255,127,127,127, 0, 0, 0,127,127,127, 52, 52, 52,
- 52, 52, 52, 52, 52, 52,127,127,127, 52, 52, 52, 52, 52, 52, 52, 52,
- 52,127,127,127,191,191,191,255,255,255,127,127,127, 0, 0, 0,127,
- 127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,
- 127,127,127,127,127,127,127,127,127,191,191,191,255,255,255, 0,127,
- 127,127, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,191,191,
- 191,255,255,255,127,127,127, 0, 0, 0,255,255,255, 0, 0, 0, 0,
- 0, 0,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0, 0, 0,
- 255,255,255,191,191,191,255,255,255,127,127,127, 0, 0, 0,127,127,
- 127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,
- 127,127,127,127,127,127,127,127,191,191,191,255,255,255,127,127,127,
- 0, 0, 0,127,127,127, 52, 52, 52, 52, 52, 52,127,127,127,127,127,
- 127,127,127,127, 52, 52, 52, 52, 52, 52,127,127,127,191,191,191,255,
- 255,255,127,127,127, 0, 0, 0,127,127,127,127,127,127,127,127,127,
- 127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,
- 127,191,191,191,255,255,255, 0,127,127,127, 0, 0, 0,255,255,255,
255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,191,191,191,255,255,255,127,127,127, 0,
- 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,191,191,191,255,255,
- 255,127,127,127, 0, 0, 0,127,127,127,127,127,127,127,127,127,127,
- 127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,
- 191,191,191,255,255,255,127,127,127, 0, 0, 0,127,127,127,127,127,
- 127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,
- 127,127,127,127,127,191,191,191,255,255,255,127,127,127, 0, 0, 0,
- 127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,
- 127,127,127,127,127,127,127,127,127,127,191,191,191,255,255,255, 0,
- 127,127,127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,191,
- 191,191,255,255,255,127,127,127, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,191,191,191,255,255,255,127,127,127, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,191,191,191,255,255,255,127,127,
- 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,191,191,191,
- 255,255,255,127,127,127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,191,191,191,255,255,255, 0,127,127,127,127,127,127,127,127,
- 127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,
- 127,127,127,127,127,127,127,127,127,127,127,255,255,255,127,127,127,
- 127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,
- 127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,255,
- 255,255,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,
- 127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,
- 127,127,127,127,255,255,255,127,127,127,127,127,127,127,127,127,127,
- 127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,
- 127,127,127,127,127,127,127,127,127,255,255,255,127,127,127,127,127,
- 127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,
- 127,127,127,127,127,127,127,127,127,127,127,127,127,127,255,255,255,
- 0);
-
-Const
- stdimg_arrow_left : Array[0..89] of byte = (
- 66, 77, 90, 0, 0, 0, 0, 0, 0, 0, 62, 0, 0, 0, 40, 0, 0,
- 0, 4, 0, 0, 0, 7, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
- 28, 0, 0, 0, 19, 11, 0, 0, 19, 11, 0, 0, 2, 0, 0, 0, 2,
- 0, 0, 0, 0, 0, 0, 0,255,255,255, 0,224, 0, 0, 0,192, 0,
- 0, 0,128, 0, 0, 0, 0, 0, 0, 0,128, 0, 0, 0,192, 0, 0,
- 0,224, 0, 0, 0);
-
-Const
- stdimg_ellipse : Array[0..181] of byte = (
- 66, 77,182, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 40, 0, 0,
- 0, 10, 0, 0, 0, 4, 0, 0, 0, 1, 0, 24, 0, 0, 0, 0, 0,
- 128, 0, 0, 0, 19, 11, 0, 0, 19, 11, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0,255, 0,229,255, 0,229,255, 0,229,255, 0,229,255, 0,
- 229,255, 0,229,255, 0,229,255, 0,229,255, 0,229,255, 0,229, 0,
- 0,255, 0,229, 0, 0, 0, 0, 0, 0,255, 0,229, 0, 0, 0, 0,
- 0, 0,255, 0,229, 0, 0, 0, 0, 0, 0,255, 0,229, 0, 0,255,
- 0,229, 0, 0, 0, 0, 0, 0,255, 0,229, 0, 0, 0, 0, 0, 0,
- 255, 0,229, 0, 0, 0, 0, 0, 0,255, 0,229, 0, 0,255, 0,229,
- 255, 0,229,255, 0,229,255, 0,229,255, 0,229,255, 0,229,255, 0,
- 229,255, 0,229,255, 0,229,255, 0,229, 0, 0);
-
-Const
- stdimg_refresh_16 : Array[0..821] of byte = (
- 66, 77, 54, 3, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 40, 0, 0,
- 0, 16, 0, 0, 0, 16, 0, 0, 0, 1, 0, 24, 0, 0, 0, 0, 0,
- 0, 3, 0, 0, 19, 11, 0, 0, 19, 11, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0,255, 0,255,197,157,126,255, 0,255,255, 0,255,255, 0,
- 255,255, 0,255,225,205,189,189,144,108,174,118, 73,166,105, 57,176,
- 122, 79,196,156,124,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
- 255, 0,255,164,101, 52,203,167,139,255, 0,255,225,204,188,172,113,
- 68,184,134, 93,206,166,132,216,182,151,219,185,153,211,172,138,195,
- 149,111,169,109, 63,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
- 165,104, 56,185,136, 96,180,129, 88,180,128, 86,227,202,180,236,218,
- 201,231,209,188,227,201,176,222,190,160,210,171,136,206,165,130,211,
- 174,142,169,110, 64,255, 0,255,255, 0,255,255, 0,255,167,105, 58,
- 241,228,216,212,178,149,244,233,224,243,232,221,237,220,204,210,173,
- 143,179,125, 83,166,104, 56,166,105, 57,166,106, 58,169,109, 61,176,
- 120, 76,197,157,125,255, 0,255,255, 0,255,166,104, 57,246,238,230,
- 245,236,227,245,237,228,230,210,193,179,126, 84,185,136, 97,255, 0,
- 255,255, 0,255,217,191,171,175,117, 74,182,124, 79,167,107, 59,167,
- 107, 59,255, 0,255,255, 0,255,165,104, 55,246,238,230,235,215,196,
- 234,217,201,164,102, 53,217,191,171,255, 0,255,255, 0,255,255, 0,
- 255,255, 0,255,173,115, 70,225,196,174,200,158,124,164,101, 52,255,
- 0,255,255, 0,255,165,103, 54,245,237,229,246,237,229,245,236,228,
- 215,184,157,177,122, 79,255, 0,255,255, 0,255,255, 0,255,255, 0,
- 255,255, 0,255,255, 0,255,255, 0,255,165,103, 54,255, 0,255,255,
- 0,255,166,105, 57,164,102, 53,164,102, 53,165,102, 54,165,103, 54,
- 165,103, 55,189,143,108,255, 0,255,255, 0,255,255, 0,255,255, 0,
- 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
- 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
- 255, 0,255,198,158,128,164,101, 52,175,120, 76,178,123, 82,178,123,
- 82,178,124, 82,164,101, 52,255, 0,255,255, 0,255,165,103, 54,217,
- 189,167,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
- 255, 0,255,187,139,102,209,174,145,246,238,231,242,230,219,246,238,
- 230,167,108, 61,255, 0,255,255, 0,255,164,102, 54,168,108, 61,221,
- 187,162,174,118, 75,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
- 221,197,179,164,102, 53,233,215,199,235,216,198,245,236,227,168,109,
- 62,255, 0,255,255, 0,255,170,111, 65,171,112, 65,169,109, 61,170,
- 112, 66,213,184,162,255, 0,255,255, 0,255,183,134, 95,188,141,103,
- 235,219,205,245,235,226,246,238,230,246,238,230,169,109, 62,255, 0,
- 255,255, 0,255,202,164,135,192,145,106,197,152,114,168,107, 60,164,
- 102, 53,168,108, 60,186,139,101,217,187,161,241,228,216,242,230,219,
- 243,232,221,206,168,137,234,216,200,169,110, 63,255, 0,255,255, 0,
- 255,255, 0,255,169,111, 65,211,173,140,220,189,157,221,190,161,229,
- 203,180,233,211,191,238,221,204,240,226,213,231,210,191,178,124, 82,
- 187,141,104,174,117, 73,165,104, 55,255, 0,255,255, 0,255,255, 0,
- 255,255, 0,255,169,109, 63,193,146,107,211,176,143,223,194,168,222,
- 193,168,212,177,147,188,140,102,170,112, 67,224,202,185,255, 0,255,
- 219,194,174,164,101, 52,255, 0,255,255, 0,255,255, 0,255,255, 0,
- 255,255, 0,255,200,161,132,178,125, 83,168,108, 61,176,120, 77,190,
- 145,110,225,205,189,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
- 212,182,159,255, 0,255);
-
-Const
- stdimg_arrow_down : Array[0..77] of byte = (
- 66, 77, 78, 0, 0, 0, 0, 0, 0, 0, 62, 0, 0, 0, 40, 0, 0,
- 0, 7, 0, 0, 0, 4, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
- 16, 0, 0, 0, 19, 11, 0, 0, 19, 11, 0, 0, 2, 0, 0, 0, 2,
- 0, 0, 0, 0, 0, 0, 0,255,255,255, 0,238, 0, 0, 0,198, 0,
- 0, 0,130, 0, 0, 0, 0, 0, 0, 0);
-
-Const
- stdimg_font_16 : Array[0..821] of byte = (
- 66, 77, 54, 3, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 40, 0, 0,
- 0, 16, 0, 0, 0, 16, 0, 0, 0, 1, 0, 24, 0, 0, 0, 0, 0,
- 0, 3, 0, 0, 19, 11, 0, 0, 19, 11, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
- 255,255, 0,255,255, 0,255,255, 0,255,128,128,128,135,135,135,133,
- 133,133,133,133,133,128,128,128,255, 0,255,255, 0,255,255, 0,255,
- 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
- 255,255, 0,255,255, 0,255, 88, 88, 88,102,102,102,108,108,108, 99,
- 99, 99, 83, 83, 83,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
- 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
- 255,255, 0,255,255, 0,255, 81, 81, 81, 84, 84, 84, 81, 81, 81,255,
- 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
- 255, 0,255, 60, 77,162, 76, 89,162, 77, 90,161, 74, 87,161, 73, 84,
- 156,255, 0,255, 80, 80, 77, 45, 45, 45, 74, 74, 74,255, 0,255,255,
- 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
- 36, 59,219, 0, 43,255, 0, 47,255, 0, 39,239, 45, 62,197,255, 0,
- 255, 65, 65, 63, 7, 7, 7, 60, 60, 60,255, 0,255,255, 0,255,255,
- 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
- 19, 38,213, 0, 32,255, 80, 88,168,255, 0,255,255, 0,255, 55, 55,
- 55, 0, 0, 0, 58, 58, 58,255, 0,255,255, 0,255,255, 0,255,255,
- 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255, 28, 37,212,
- 0, 16,255, 86, 89,166,255, 0,255,255, 0,255, 55, 55, 55, 1, 1,
- 1, 58, 58, 58,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
- 0,255,255, 0,255,255, 0,255,255, 0,255, 27, 28,213, 0, 3,255,
- 85, 85,168,255, 0,255,255, 0,255, 55, 55, 55, 0, 0, 0, 58, 58,
- 58,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
- 0,255,255, 0,255,255, 0,255, 27, 27,213, 0, 0,255, 84, 84,166,
- 255, 0,255,255, 0,255, 57, 57, 57, 11, 11, 11, 60, 60, 60,255, 0,
- 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
- 0,255,255, 0,255, 27, 27,220, 3, 4,166, 62, 62, 88,255, 0,255,
- 255, 0,255, 71, 71, 71, 49, 49, 49, 71, 71, 71,255, 0,255,255, 0,
- 255,100,100,100,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
- 0,255, 27, 27,224, 19, 19,138, 52, 52, 32,255, 0,255,255, 0,255,
- 78, 78, 78, 93, 93, 93, 76, 76, 76,255, 0,255,255, 0,255, 40, 40,
- 40,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255, 29,
- 29,225, 24, 24,153,113,113, 93, 65, 65, 65, 71, 71, 71, 84, 84, 81,
- 139,139,138, 75, 75, 75, 74, 74, 74, 66, 66, 66,113,113,113,255, 0,
- 255, 78, 78,167, 88, 88,152,255, 0,255,255, 0,255, 48, 48,225, 37,
- 38,161,103,103, 98,114,114,111,106,106,103,106,106,115,112,112,115,
- 111,111,111,105,105,105,113,113,113,113,113,113,255, 0,255, 83, 83,
- 197, 45, 45,204,255, 0,255,255, 0,255, 59, 60,212, 81, 83,247, 72,
- 72,146,255, 0,255,255, 0,255, 43, 44,213,255, 0,255,255, 0,255,
- 255, 0,255,255, 0,255,255, 0,255,255, 0,255,105,105,181,113,114,
- 255, 76, 76,207, 77, 77,191, 97, 98,244,127,128,255, 79, 79,220, 83,
- 84,188, 87, 87,223,104,105,255,255, 0,255,255, 0,255,255, 0,255,
- 255, 0,255,255, 0,255,255, 0,255,123,123,178, 80, 80,215, 84, 84,
- 223, 80, 80,228, 81, 81,220, 74, 74,218, 79, 79,223, 77, 77,228, 83,
- 83,239, 67, 68,231,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
- 255, 0,255,255, 0,255);
-
-Const
- stdimg_radiobuttons : Array[0..2213] of byte = (
- 66, 77,166, 8, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 40, 0, 0,
- 0, 60, 0, 0, 0, 12, 0, 0, 0, 1, 0, 24, 0, 0, 0, 0, 0,
- 112, 8, 0, 0,196, 14, 0, 0,196, 14, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255, 0,255,255, 0,255,255,
- 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255, 0,255,255, 0,
- 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
- 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0,255,
- 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
- 255,255, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
- 255, 0,255,255, 0,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
- 0,255,255,255,255,255,255,255,191,191,191,191,191,191,191,191,191,
- 191,191,191,255,255,255,255,255,255,255, 0,255,255, 0,255,255, 0,
- 255,255, 0,255,255,255,255,255,255,255,191,191,191,191,191,191,191,
- 191,191,191,191,191,255,255,255,255,255,255,255, 0,255,255, 0,255,
- 255, 0,255,255, 0,255,255,255,255,255,255,255,191,191,191,191,191,
- 191,191,191,191,191,191,191,255,255,255,255,255,255,255, 0,255,255,
- 0,255,255, 0,255,255, 0,255,255,255,255,255,255,255,191,191,191,
- 191,191,191,191,191,191,191,191,191,255,255,255,255,255,255,255, 0,
- 255,255, 0,255,255, 0,255,255, 0,255,255,255,255,255,255,255,191,
- 191,191,191,191,191,191,191,191,191,191,191,255,255,255,255,255,255,
- 255, 0,255,255, 0,255,255, 0,255,127,127,127,191,191,191,191,191,
- 191,255,255,255,255,255,255,255,255,255,255,255,255,191,191,191,191,
- 191,191,255,255,255,255, 0,255,255, 0,255,127,127,127,191,191,191,
- 191,191,191,255,255,255,255,255,255,255,255,255,255,255,255,191,191,
- 191,191,191,191,255,255,255,255, 0,255,255, 0,255,127,127,127,191,
- 191,191,191,191,191,127,127,127,127,127,127,127,127,127,127,127,127,
- 191,191,191,191,191,191,255,255,255,255, 0,255,255, 0,255,127,127,
- 127,191,191,191,191,191,191,127,127,127,127,127,127,127,127,127,127,
- 127,127,191,191,191,191,191,191,255,255,255,255, 0,255,255, 0,255,
- 127,127,127,191,191,191,191,191,191,127,127,127,127,127,127,127,127,
- 127,127,127,127,191,191,191,191,191,191,255,255,255,255, 0,255,255,
- 0,255,127,127,127, 0, 0, 0,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,191,191,191,255,255,255,255, 0,
- 255,255, 0,255,127,127,127, 0, 0, 0,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,191,191,191,255,255,255,
- 255, 0,255,255, 0,255,127,127,127, 0, 0, 0,127,127,127,127,127,
- 127,127,127,127,127,127,127,127,127,127,127,127,127,191,191,191,255,
- 255,255,255, 0,255,255, 0,255,127,127,127, 0, 0, 0,127,127,127,
- 127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,191,191,
- 191,255,255,255,255, 0,255,255, 0,255,127,127,127, 0, 0, 0,127,
- 127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,
- 191,191,191,255,255,255,255, 0,255,127,127,127, 0, 0, 0,255,255,
255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,191,191,191,255,255,255,127,127,127, 0, 0, 0,
- 255,255,255,255,255,255,255,255,255, 0, 0, 0, 0, 0, 0,255,255,
- 255,255,255,255,255,255,255,191,191,191,255,255,255,127,127,127, 0,
- 0, 0,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,
- 127,127,127,127,127,127,127,127,127,191,191,191,255,255,255,127,127,
- 127, 0, 0, 0,127,127,127,127,127,127,127,127,127, 0, 0, 0, 0,
- 0, 0,127,127,127,127,127,127,127,127,127,191,191,191,255,255,255,
- 127,127,127, 0, 0, 0,127,127,127,127,127,127,127,127,127,127,127,
- 127,127,127,127,127,127,127,127,127,127,127,127,127,191,191,191,255,
- 255,255,127,127,127, 0, 0, 0,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,191,191,
- 191,255,255,255,127,127,127, 0, 0, 0,255,255,255,255,255,255, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,255,
- 191,191,191,255,255,255,127,127,127, 0, 0, 0,127,127,127,127,127,
- 127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,
- 127,127,191,191,191,255,255,255,127,127,127, 0, 0, 0,127,127,127,
- 127,127,127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,127,127,
- 127,127,127,127,191,191,191,255,255,255,127,127,127, 0, 0, 0,127,
- 127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,
- 127,127,127,127,127,127,191,191,191,255,255,255,127,127,127, 0, 0,
- 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,191,191,191,255,255,255,127,127,127,
- 0, 0, 0,255,255,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,255,255,255,255,255,255,191,191,191,255,255,255,127,
- 127,127, 0, 0, 0,127,127,127,127,127,127,127,127,127,127,127,127,
- 127,127,127,127,127,127,127,127,127,127,127,127,191,191,191,255,255,
- 255,127,127,127, 0, 0, 0,127,127,127,127,127,127, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,127,127,127,127,127,127,191,191,191,
- 255,255,255,127,127,127, 0, 0, 0,127,127,127,127,127,127,127,127,
- 127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,191,
- 191,191,255,255,255,127,127,127, 0, 0, 0,255,255,255,255,255,255,
255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,191,191,191,255,255,255,127,127,127, 0, 0, 0,255,255,255,255,
- 255,255,255,255,255, 0, 0, 0, 0, 0, 0,255,255,255,255,255,255,
- 255,255,255,191,191,191,255,255,255,127,127,127, 0, 0, 0,127,127,
- 127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,
- 127,127,127,127,127,191,191,191,255,255,255,127,127,127, 0, 0, 0,
- 127,127,127,127,127,127,127,127,127, 0, 0, 0, 0, 0, 0,127,127,
- 127,127,127,127,127,127,127,191,191,191,255,255,255,127,127,127, 0,
- 0, 0,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,
- 127,127,127,127,127,127,127,127,127,191,191,191,255,255,255,255, 0,
- 255,127,127,127, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,191,191,191,255,255,255,255, 0,255,
- 255, 0,255,127,127,127, 0, 0, 0,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,191,191,191,255,255,255,255,
- 0,255,255, 0,255,127,127,127, 0, 0, 0,127,127,127,127,127,127,
- 127,127,127,127,127,127,127,127,127,127,127,127,191,191,191,255,255,
- 255,255, 0,255,255, 0,255,127,127,127, 0, 0, 0,127,127,127,127,
- 127,127,127,127,127,127,127,127,127,127,127,127,127,127,191,191,191,
- 255,255,255,255, 0,255,255, 0,255,127,127,127, 0, 0, 0,127,127,
- 127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,191,
- 191,191,255,255,255,255, 0,255,255, 0,255,127,127,127, 0, 0, 0,
- 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0,
- 0, 0, 0, 0,255,255,255,255, 0,255,255, 0,255,127,127,127, 0,
- 0, 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,
- 0, 0, 0, 0, 0, 0,255,255,255,255, 0,255,255, 0,255,127,127,
- 127, 0, 0, 0, 0, 0, 0,127,127,127,127,127,127,127,127,127,127,
- 127,127, 0, 0, 0, 0, 0, 0,255,255,255,255, 0,255,255, 0,255,
- 127,127,127, 0, 0, 0, 0, 0, 0,127,127,127,127,127,127,127,127,
- 127,127,127,127, 0, 0, 0, 0, 0, 0,255,255,255,255, 0,255,255,
- 0,255,127,127,127, 0, 0, 0, 0, 0, 0,127,127,127,127,127,127,
- 127,127,127,127,127,127, 0, 0, 0, 0, 0, 0,255,255,255,255, 0,
- 255,255, 0,255,255, 0,255,127,127,127,127,127,127, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,127,127,127,127,127,127,255, 0,255,
- 255, 0,255,255, 0,255,255, 0,255,127,127,127,127,127,127, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,127,127,127,127,127,127,255,
- 0,255,255, 0,255,255, 0,255,255, 0,255,127,127,127,127,127,127,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,127,127,127,127,127,
- 127,255, 0,255,255, 0,255,255, 0,255,255, 0,255,127,127,127,127,
- 127,127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,127,127,127,
- 127,127,127,255, 0,255,255, 0,255,255, 0,255,255, 0,255,127,127,
- 127,127,127,127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,127,
- 127,127,127,127,127,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
- 255, 0,255,255, 0,255,127,127,127,127,127,127,127,127,127,127,127,
- 127,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
- 0,255,255, 0,255,255, 0,255,127,127,127,127,127,127,127,127,127,
- 127,127,127,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
- 255,255, 0,255,255, 0,255,255, 0,255,127,127,127,127,127,127,127,
- 127,127,127,127,127,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
- 255, 0,255,255, 0,255,255, 0,255,255, 0,255,127,127,127,127,127,
- 127,127,127,127,127,127,127,255, 0,255,255, 0,255,255, 0,255,255,
- 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,127,127,127,
- 127,127,127,127,127,127,127,127,127,255, 0,255,255, 0,255,255, 0,
- 255,255, 0,255);
-
-Const
- stdimg_edit : Array[0..821] of byte = (
- 66, 77, 54, 3, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 40, 0, 0,
- 0, 16, 0, 0, 0, 16, 0, 0, 0, 1, 0, 24, 0, 0, 0, 0, 0,
- 0, 3, 0, 0,235, 10, 0, 0,235, 10, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 98,146, 94, 48, 48, 48, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 98,146, 94, 98,146, 94,
- 98,146, 94, 88, 88, 88,220,220,220,255,255,255,255,255,255,255,255,
- 255,255,255,255,160,160,160,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255, 0, 0, 0, 98,146, 94, 98,146, 94, 98,146, 94,
- 88, 88, 88,220,220,220,160,160,160,160,160,160, 0, 0, 0,160,160,
- 160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,
- 160,160, 0, 0, 0, 98,146, 94, 98,146, 94, 98,146, 94, 88, 88, 88,
- 220,220,220,255,255,255,255,255,255, 88, 88, 88, 48, 48, 48, 0, 0,
- 64,195,195,195,220,220,220,255,255,255,255,255,255,255,255,255, 0,
- 0, 0, 98,146, 94, 98,146, 94, 98,146, 94, 88, 88, 88,220,220,220,
- 255,255,255,255,255,255,255,255,255, 88, 88, 88,168,220,255, 0, 88,
- 192, 0, 88,192,195,195,195,220,220,220,255,255,255, 0, 0, 0, 98,
- 146, 94, 98,146, 94, 98,146, 94, 88, 88, 88,220,220,220,195,195,195,
- 195,195,195,195,195,195,160,160,160,168,220,255,168,220,255,168,220,
- 255, 0, 88,192, 0, 88,192,160,160,160, 0, 0, 0, 98,146, 94, 98,
- 146, 94, 98,146, 94, 88, 88, 88,220,220,220,255,255,255,255,255,255,
- 255,255,255,255,255,255, 88,168,255,168,220,255,168,220,255,168,220,
- 255,168,220,255, 0, 0, 64, 0, 0, 0, 98,146, 94, 98,146, 94, 98,
- 146, 94, 88, 88, 88,220,220,220,255,255,255,255,255,255,255,255,255,
- 255,255,255,160,160,160,168,220,255,168,220,255, 0,128,255, 0,128,
- 255, 0, 88,192, 48, 48, 48, 98,146, 94, 98,146, 94, 98,146, 94, 88,
- 88, 88,220,220,220,195,195,195,195,195,195,195,195,195,195,195,195,
- 195,195,195, 88,168,255,168,220,255, 0,128,255, 0,128,255, 0,128,
- 255, 0, 88,192, 48, 48, 48, 98,146, 94, 98,146, 94, 88, 88, 88,220,
- 220,220,255,255,255,255,255,255,255,255,255,255,255,255,195,195,195,
- 255,255,255, 88,168,255, 88,168,255, 0,128,255, 0,128,255, 0,128,
- 255, 0, 88,192, 0, 0, 64, 98,146, 94, 88, 88, 88,220,220,220,255,
- 255,255,255,255,255,255,255,255,255,255,255,195,195,195,255,255,255,
- 255,255,255, 88,168,255, 88,168,255, 0,128,255, 0,128,255, 0,128,
- 255, 0, 88,192, 98,146, 94, 88, 88, 88,220,220,220,195,195,195,195,
- 195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,
- 195,195,195, 88,168,255, 88,168,255, 0,128,255, 0,128,255, 0,128,
- 255, 98,146, 94, 88, 88, 88,220,220,220,255,255,255,255,255,255,255,
- 255,255,255,255,255,195,195,195,255,255,255,255,255,255,255,255,255,
- 255,255,255, 88,168,255, 88,168,255, 0,128,255, 0,128,255, 98,146,
- 94, 88, 88, 88,220,220,220,255,255,255,255,255,255,255,255,255,255,
- 255,255,195,195,195,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255, 88,168,255, 88,168,255, 0,128,255, 98,146, 94, 88, 88,
- 88,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,
- 220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,
- 88, 88, 88, 88,168,255, 88,168,255, 98,146, 94, 88, 88, 88, 88, 88,
- 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88,
- 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88,
- 98,146, 94, 98,146, 94);
-
-Const
- stdimg_menu_quit_16 : Array[0..821] of byte = (
- 66, 77, 54, 3, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 40, 0, 0,
- 0, 16, 0, 0, 0, 16, 0, 0, 0, 1, 0, 24, 0, 0, 0, 0, 0,
- 0, 3, 0, 0, 19, 11, 0, 0, 19, 11, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
- 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
- 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
- 255, 0,255,255, 0,255, 31, 31,163, 31, 31,163, 31, 31,163, 31, 31,
- 163, 31, 31,163, 31, 31,163, 31, 31,163, 31, 31,163, 31, 31,163, 31,
- 31,163, 31, 31,163, 31, 31,163,255, 0,255,255, 0,255,255, 0,255,
- 33, 33,176, 6, 5,193, 0, 0,194, 0, 0,201, 0, 0,206, 0, 0,
- 217, 24, 24,228, 26, 26,234, 12, 15,235, 6, 12,236, 26, 36,239, 36,
- 48,241, 50, 67,251, 42, 47,189,255, 0,255,255, 0,255, 16, 16,173,
- 0, 0,181, 0, 0,190, 0, 0,195,108,108,225,216,216,249,255,255,
- 255,255,255,255,227,227,253,133,136,243, 24, 34,233, 31, 43,235, 45,
- 60,239, 39, 46,196,255, 0,255,255, 0,255, 16, 16,170, 0, 0,181,
- 1, 1,187,142,142,229,255,255,255,223,223,246,144,144,233,139,139,
- 235,212,212,246,255,255,255,173,177,248, 32, 44,235, 42, 57,239, 38,
- 45,195,255, 0,255,255, 0,255, 18, 18,168, 1, 1,179,105,105,214,
- 255,255,255,173,173,233, 10, 10,206, 0, 0,213, 0, 0,221, 2, 2,
- 224,149,151,238,255,255,255,147,153,246, 29, 43,237, 37, 44,193,255,
- 0,255,255, 0,255, 23, 23,166, 23, 23,185,211,211,242,246,246,252,
- 51, 51,207, 30, 30,212, 31, 31,218, 19, 19,222, 0, 0,227, 7, 10,
- 227,228,228,250,235,236,254, 41, 53,238, 34, 40,192,255, 0,255,255,
- 0,255, 27, 27,164, 51, 51,190,239,239,250,220,220,246, 44, 44,203,
- 54, 54,212, 50, 50,217, 54, 54,223, 57, 56,230, 18, 19,230,181,182,
- 247,255,255,255, 51, 60,238, 30, 35,190,255, 0,255,255, 0,255, 31,
- 31,163, 58, 58,188,227,227,245,239,239,251, 67, 67,206, 61, 61,210,
- 155,155,235,158,158,239, 73, 73,227, 74, 74,233,222,222,252,239,240,
- 253, 30, 36,234, 28, 31,189,255, 0,255,255, 0,255, 36, 36,162, 65,
- 65,188,170,170,222,255,255,255,159,159,229, 74, 74,208,238,238,251,
- 244,244,253, 84, 84,224,149,149,239,255,255,255,197,197,244, 14, 16,
- 231, 22, 23,187,255, 0,255,255, 0,255, 40, 40,162, 89, 89,193, 97,
- 97,194,221,221,238,255,255,255,147,147,224,225,225,247,230,230,249,
- 160,160,235,255,255,255,233,233,246,131,131,230, 99, 99,237, 23, 23,
- 185,255, 0,255,255, 0,255, 46, 46,163,107,107,195,100,100,195,113,
- 113,198,175,175,215,133,133,212,231,231,248,233,233,250,165,165,225,
- 208,208,232,135,135,222,123,123,229,141,141,234, 53, 53,186,255, 0,
- 255,255, 0,255, 55, 55,165,120,120,195,118,118,196,118,118,200,113,
- 113,199,123,123,207,241,241,251,246,246,253,131,131,216,128,128,215,
- 137,137,224,143,143,225,150,150,229, 68, 68,186,255, 0,255,255, 0,
- 255, 84, 84,167,172,172,222,170,170,219,172,172,222,175,175,225,179,
- 179,229,176,176,228,179,179,231,189,189,237,191,191,238,195,195,239,
- 197,197,240,209,209,247,163,163,193,255, 0,255,255, 0,255,255, 0,
- 255,103,103,175,100,100,172,100,100,171,101,101,172,101,101,172,101,
- 101,173,102,102,173,102,102,173,102,102,173,103,103,173,104,104,173,
- 104,104,175,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
- 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
- 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
- 255, 0,255,255, 0,255);
-
-Const
- stdimg_arrow_up : Array[0..77] of byte = (
- 66, 77, 78, 0, 0, 0, 0, 0, 0, 0, 62, 0, 0, 0, 40, 0, 0,
- 0, 7, 0, 0, 0, 4, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
- 16, 0, 0, 0, 19, 11, 0, 0, 19, 11, 0, 0, 2, 0, 0, 0, 2,
- 0, 0, 0, 0, 0, 0, 0,255,255,255, 0, 0, 0, 0, 0,130, 0,
- 0, 0,198, 0, 0, 0,238, 0, 0, 0);
-
-Const
- stdimg_executable_16 : Array[0..821] of byte = (
- 66, 77, 54, 3, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 40, 0, 0,
- 0, 16, 0, 0, 0, 16, 0, 0, 0, 1, 0, 24, 0, 0, 0, 0, 0,
- 0, 3, 0, 0,215, 13, 0, 0,215, 13, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
- 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
- 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
- 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
- 255,255, 0,255,120, 72, 54,255, 0,255,255, 0,255,255, 0,255,255,
- 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
- 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,120, 72,
- 54,153,111, 86,120, 72, 54,255, 0,255,255, 0,255,255, 0,255,255,
- 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
- 255, 0,255,255, 0,255,255, 0,255,120, 72, 54,218,199,195,195,159,
- 157,153,111, 86,120, 72, 54,255, 0,255,255, 0,255,255, 0,255,255,
- 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
- 255, 0,255,120, 72, 54,218,199,195,188,151,145,204,176,172,221,202,
- 200,153,111, 86,120, 72, 54,255, 0,255,255, 0,255,255, 0,255,255,
- 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,120, 72, 54,
- 218,199,195,181,142,133,182,144,135,183,145,137,217,197,193,190,154,
- 148,153,111, 86,120, 72, 54,255, 0,255,255, 0,255,255, 0,255,255,
- 0,255,255, 0,255,255, 0,255,120, 72, 54,218,199,195,174,136,122,
- 175,135,122,176,137,124,193,162,152,216,196,191,188,153,144,181,143,
- 133,153,111, 86,120, 72, 54,255, 0,255,255, 0,255,255, 0,255,255,
- 0,255,120, 72, 54,218,199,195,201,177,167,200,176,165,187,155,143,
- 183,149,136,171,131,116,198,170,161,194,163,153,175,136,123,177,137,
- 125,153,111, 86,120, 72, 54,255, 0,255,255, 0,255,120, 72, 54,218,
- 199,195,207,185,175,207,186,176,208,187,177,209,187,178,202,178,167,
- 187,156,142,205,181,171,209,188,179,173,134,119,171,130,115,172,132,
- 117,153,111, 86,120, 72, 54,255, 0,255,255, 0,255,120, 72, 54,218,
- 199,195,204,182,171,205,183,172,206,184,173,206,185,174,199,174,162,
- 176,140,124,191,162,149,203,179,169,170,130,113,153,111, 86,120, 72,
- 54,255, 0,255,255, 0,255,255, 0,255,255, 0,255,120, 72, 54,218,
- 199,195,202,180,167,203,180,168,203,181,169,204,182,170,176,142,124,
- 180,148,131,177,144,127,153,111, 86,120, 72, 54,255, 0,255,255, 0,
- 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,120, 72, 54,218,
- 199,195,200,177,163,200,178,164,201,178,165,186,158,141,150,106, 81,
- 153,111, 86,120, 72, 54,255, 0,255,255, 0,255,255, 0,255,255, 0,
- 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,120, 72, 54,218,
- 199,195,198,174,159,198,175,160,186,159,141,144,100, 72,120, 72, 54,
- 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
- 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,120, 72, 54,218,
- 199,195,195,171,155,159,122, 95,120, 72, 54,255, 0,255,255, 0,255,
- 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
- 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,120, 72, 54,218,
- 199,195,120, 72, 54,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
- 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
- 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,120, 72, 54,255,
- 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
- 255, 0,255,255, 0,255);
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255);
Const
stdimg_dialog_information_32 : Array[0..3125] of byte = (
@@ -1629,138 +1332,160 @@ Const
255,255,255,255,255,255,255,255,255,255,255,255,255,255,255);
Const
- stdimg_link : Array[0..449] of byte = (
- 66, 77,194, 1, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 40, 0, 0,
- 0, 11, 0, 0, 0, 11, 0, 0, 0, 1, 0, 24, 0, 0, 0, 0, 0,
- 140, 1, 0, 0, 18, 11, 0, 0, 18, 11, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,128,128,128,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255, 0, 0, 0, 0, 0, 0,128,128,128,255,255,255,255,255,255,255,
- 255,255, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255, 0, 0, 0, 0, 0, 0,128,128,128,255,255,255,255,255,
- 255, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255, 0, 0, 0, 0, 0, 0,128,128,128,255,255,255,
- 255,255,255, 0, 0, 0, 0, 0, 0,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255, 0, 0, 0, 0, 0, 0,128,128,128,255,
- 255,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,
- 0, 0, 0,255,255,255,255,255,255, 0, 0, 0, 0, 0, 0,128,128,
- 128,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,255,255,255,255,255,255, 0, 0, 0, 0, 0, 0,
- 128,128,128,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,255, 0, 0, 0, 0,
- 0, 0,128,128,128,255,255,255,255,255,255,255,255,255, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,255, 0, 0,
- 0, 0, 0, 0,128,128,128,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 0, 0, 0, 0, 0, 0,128,128,128,128,128,128,128,128,128,128,128,
- 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
- 128,128, 0, 0, 0, 0, 0, 0);
+ stdimg_menu_preferences_16 : Array[0..821] of byte = (
+ 66, 77, 54, 3, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 40, 0, 0,
+ 0, 16, 0, 0, 0, 16, 0, 0, 0, 1, 0, 24, 0, 0, 0, 0, 0,
+ 0, 3, 0, 0, 19, 11, 0, 0, 19, 11, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,215,194,180,135, 74, 32,135, 74, 32,135, 74, 32,223,207,
+ 196,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 135, 74, 32,190,165,146,184,156,134,184,156,134,135, 74, 32,223,207,
+ 196,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,193,
+ 196,195,154,158,157,193,196,195,255, 0,255,255, 0,255,135, 74, 32,
+ 204,187,173,167,145,125,181,149,122,174,139,114,135, 74, 32,223,207,
+ 196,255, 0,255,255, 0,255,255, 0,255,219,220,220,133,138,136,158,
+ 161,160,133,138,136,255, 0,255,255, 0,255,135, 74, 32,204,187,173,
+ 164,141,120,162,138,116,180,149,122,179,147,124,135, 74, 32,255, 0,
+ 255,255, 0,255,219,220,220,133,138,136,210,211,212,194,195,196,133,
+ 138,136,255, 0,255,255, 0,255,232,221,213,135, 74, 32,212,200,189,
+ 164,141,120,164,141,120,190,165,146,135, 74, 32,255, 0,255,219,220,
+ 220,133,138,136,226,227,228,194,196,198,133,138,136,193,196,195,255,
+ 0,255,255, 0,255,255, 0,255,243,237,233,135, 74, 32,204,187,173,
+ 204,187,173,179,147,124,135, 74, 32,193,196,195,133,138,136,211,211,
+ 212,189,190,191,133,138,136,219,220,220,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,243,237,233,135, 74, 32,135, 74, 32,
+ 135, 74, 32,133,131,125,170,173,173,200,201,202,189,190,191,133,138,
+ 136,219,220,220,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 181,183,184,133,138,136,183,184,185,133,138,136,219,220,220,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,219,
+ 220,220,133,138,136,133,138,136,133,138,136,133,138,136,208,209,210,
+ 163,164,164,133,138,136,193,196,195,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,219,220,220,133,138,136,243,
+ 243,243,239,240,240,237,238,238,234,236,236,182,185,186,133,138,136,
+ 219,220,220,133,138,136,219,220,220,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,133,138,136,245,246,246,169,172,171,133,
+ 138,136,247,247,247,226,227,229,170,173,173,245,246,246,255, 0,255,
+ 219,220,220,133,138,136,219,220,220,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,219,220,220,133,138,136,255, 0,255,219,220,220,133,
+ 138,136,250,250,250,133,138,136,255, 0,255,255, 0,255,255, 0,255,
+ 219,220,220,133,138,136,135,140,138,179,179,179,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,133,138,136,238,
+ 240,240,133,138,136,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 133,138,136,240,240,240,133,138,136,179,179,179,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,133,138,136,233,235,236,133,138,136,219,
+ 220,220,255, 0,255,255, 0,255,255, 0,255,255, 0,255,179,179,179,
+ 133,138,136,238,239,239,133,138,136,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,219,220,220,133,138,136,219,220,220,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,179,179,179,
+ 133,138,136,219,220,220,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255);
Const
- stdimg_menu_exit_16 : Array[0..821] of byte = (
+ stdimg_folder_16 : Array[0..821] of byte = (
66, 77, 54, 3, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 40, 0, 0,
0, 16, 0, 0, 0, 16, 0, 0, 0, 1, 0, 24, 0, 0, 0, 0, 0,
0, 3, 0, 0, 19, 11, 0, 0, 19, 11, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,165,193,214,128,167,197, 99,148,184, 22, 94,147, 29, 99,151,
- 153,153,153,113,113,113, 84, 84, 84, 81, 81, 81, 79, 79, 79, 76, 76,
- 76, 74, 74, 74, 71, 71, 71, 69, 69, 69, 37,103,157, 50,116,168, 61,
- 124,175, 71,132,181, 78,138,186, 62,126,173, 32,101,152,255,255,255,
- 255,255,255, 88, 88, 88,162,162,162,162,162,162,163,163,163,164,164,
- 164,164,164,164,165,165,165, 47,111,165,120,171,210,120,171,211,115,
- 167,209,105,160,205, 64,127,174, 35,103,154,255,255,255,255,255,255,
- 92, 92, 92,161,161,161, 60,115, 64,160,161,161,163,163,163,163,163,
- 163,164,164,164, 54,116,170,125,175,212, 91,154,201, 84,149,199, 88,
- 150,200, 65,128,174, 38,105,157,255,255,255,255,255,255, 96, 96, 96,
- 160,160,160, 61,118, 65, 54,113, 57,162,162,162,162,162,162,163,163,
- 163, 61,121,176,130,179,215, 98,159,204, 90,154,201, 94,155,202, 67,
- 129,175, 44,109,160, 55,130, 62, 52,126, 59, 49,121, 55, 46,117, 52,
- 73,145, 80, 70,143, 76, 57,115, 61,161,161,161,162,162,162, 69,126,
- 180,136,183,217,103,163,207, 97,158,204, 99,159,204, 69,131,177, 49,
- 113,164, 59,135, 66,137,203,146,132,200,141,128,198,136,123,195,131,
- 119,193,127, 71,143, 77, 59,116, 63,161,161,161, 76,132,186,141,187,
- 219,110,168,209,102,166,209, 95,180,223, 71,133,177, 55,117,169, 62,
- 139, 70,143,206,153,125,198,135,120,195,129,115,192,124,116,192,124,
- 121,194,129, 73,144, 79, 84,127, 87, 84,137,191,148,191,221,117,173,
- 212, 99,184,225, 75,212,255, 66,139,184, 61,122,173, 65,144, 74,148,
- 210,159,145,208,154,141,205,150,137,203,146,132,200,141, 81,152, 88,
- 65,124, 70,159,159,159, 90,142,196,152,195,224,124,179,215,116,175,
- 214, 94,196,237, 75,136,179, 69,127,178, 68,148, 77, 66,145, 75, 63,
- 141, 72, 61,137, 69, 93,164,101, 90,160, 97, 69,131, 75,158,158,158,
- 158,158,158, 96,146,201,158,199,226,131,184,218,125,180,215,126,179,
- 215, 79,137,180, 75,132,183,255,255,255,255,255,255,119,119,119,154,
- 154,154, 61,138, 69, 73,138, 79,156,156,156,157,157,157,157,157,157,
- 102,150,204,162,203,227,137,189,220,131,185,218,132,185,218, 81,139,
- 181, 82,137,188,255,255,255,255,255,255,122,122,122,153,153,153, 82,
- 145, 89,153,154,153,155,155,155,156,156,156,156,156,156,108,154,208,
- 167,206,229,143,193,223,137,189,220,139,189,220, 83,141,182, 90,142,
- 194,255,255,255,255,255,255,125,125,125,153,153,153,153,153,153,154,
- 154,154,154,154,154,155,155,155,155,155,155,111,157,211,170,209,231,
- 171,209,231,152,199,225,145,194,222, 86,143,183, 96,147,198,255,255,
- 255,255,255,255,128,128,128,126,126,126,124,124,124,122,122,122,119,
- 119,119,117,117,117,114,114,114,113,158,212,111,158,214,135,178,220,
- 171,211,232,169,208,230, 88,144,184,103,151,203,255,255,255,255,255,
255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,132,172,220,109,156,212,
- 133,177,218, 90,145,185,109,156,207,255,255,255,255,255,255,255,255,
+ 198,167,146,138, 78, 37,135, 74, 32,135, 74, 32,135, 74, 32,135, 74,
+ 32,135, 74, 32,135, 74, 32,135, 74, 32,135, 74, 32,135, 74, 32,135,
+ 74, 32,135, 74, 32,135, 74, 32,138, 78, 37,198,169,148,138, 78, 37,
+ 217,181,149,221,186,154,221,186,154,221,186,154,221,186,154,221,186,
+ 154,221,186,154,221,186,154,221,186,154,221,186,154,221,186,154,221,
+ 186,154,221,186,154,217,181,149,138, 79, 37,135, 74, 32,223,192,162,
+ 213,172,134,213,172,134,213,172,134,213,172,134,213,172,134,213,172,
+ 134,213,172,134,213,172,134,213,172,134,213,172,134,213,172,134,213,
+ 172,134,223,192,162,135, 74, 32,135, 74, 32,226,197,170,215,175,138,
+ 215,175,138,215,175,138,215,175,138,215,175,138,215,175,138,215,175,
+ 138,215,175,138,215,175,138,215,175,138,215,175,138,215,175,138,226,
+ 197,170,135, 74, 32,135, 74, 32,228,202,177,217,179,143,217,179,143,
+ 217,179,143,217,179,143,217,179,143,217,179,143,217,179,143,217,179,
+ 143,217,179,143,217,179,143,217,179,143,217,179,143,228,202,177,135,
+ 74, 32,135, 74, 32,230,205,181,217,179,143,217,179,143,217,179,143,
+ 217,179,143,217,179,143,217,179,143,217,179,143,217,179,143,217,179,
+ 143,217,179,143,217,179,143,217,179,143,230,205,181,135, 74, 32,135,
+ 74, 32,231,207,184,217,179,143,217,179,143,217,179,143,217,179,143,
+ 217,179,143,217,179,143,217,179,143,217,179,143,217,179,143,217,179,
+ 143,217,179,143,217,179,143,231,207,184,135, 74, 32,135, 74, 32,232,
+ 210,188,217,179,143,217,179,143,217,179,143,217,179,143,217,179,143,
+ 217,179,143,217,179,143,217,179,143,217,179,143,217,179,143,217,179,
+ 143,217,179,143,232,210,188,135, 74, 32,136, 76, 34,230,209,188,234,
+ 212,192,234,212,192,234,212,192,234,212,192,234,212,192,226,197,169,
+ 217,179,143,217,179,143,217,179,143,217,179,143,217,179,143,217,179,
+ 143,234,212,192,135, 74, 32,139, 77, 36,136, 76, 34,135, 74, 32,135,
+ 74, 32,135, 74, 32,135, 74, 32,140, 82, 42,218,190,167,227,200,173,
+ 217,179,143,217,179,143,217,179,143,217,179,143,217,179,143,235,215,
+ 196,135, 74, 32,135, 74, 32,204,164,133,188,136, 95,188,136, 94,188,
+ 136, 94,188,136, 94,175,120, 80,144, 86, 46,220,194,172,236,217,199,
+ 236,217,199,236,217,199,236,217,199,236,217,199,233,214,196,138, 79,
+ 37,135, 74, 32,209,176,151,218,186,158,205,161,124,205,161,123,205,
+ 161,124,218,186,158,190,150,120,135, 74, 32,135, 74, 32,135, 74, 32,
+ 135, 74, 32,135, 74, 32,135, 74, 32,138, 78, 37,198,168,147,225,210,
+ 200,144, 89, 49,218,191,169,236,217,200,236,217,200,236,217,200,218,
+ 191,169,144, 89, 49,225,210,200,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,225,210,
+ 200,135, 74, 32,135, 74, 32,135, 74, 32,135, 74, 32,135, 74, 32,225,
+ 210,200,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,177,202,232,
- 108,156,211,112,158,210);
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255);
Const
- stdimg_menu_save_16 : Array[0..821] of byte = (
+ stdimg_edit_delete_16 : Array[0..821] of byte = (
66, 77, 54, 3, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 40, 0, 0,
0, 16, 0, 0, 0, 16, 0, 0, 0, 1, 0, 24, 0, 0, 0, 0, 0,
0, 3, 0, 0, 19, 11, 0, 0, 19, 11, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0,216,171,142,205,149,112,189,115, 66,183,104, 53,181,104,
- 53,180,103, 52,178,102, 52,176,101, 51,174,100, 51,172, 99, 50,170,
- 98, 50,169, 97, 50,168, 96, 49,167, 97, 50,171,105, 60,188,134, 97,
- 195,125, 79,235,198,173,234,197,173,254,251,248,254,251,248,254,251,
- 248,254,251,248,254,251,248,254,251,248,254,251,248,254,251,248,254,
- 251,248,254,251,248,200,154,124,199,152,121,173,107, 64,186,108, 56,
- 237,202,179,224,162,122,254,250,247, 98,192,136, 98,192,136, 98,192,
- 136, 98,192,136, 98,192,136, 98,192,136, 98,192,136, 98,192,136,253,
- 249,246,202,141,101,201,155,124,167, 97, 50,187,108, 56,238,204,182,
- 225,162,122,254,250,247,191,220,194,191,220,194,191,220,194,191,220,
- 194,191,220,194,191,220,194,191,220,194,191,220,194,253,249,246,205,
- 144,104,204,158,129,168, 97, 50,187,107, 56,239,206,184,225,162,121,
- 254,250,247, 98,192,136, 98,192,136, 98,192,136, 98,192,136, 98,192,
- 136, 98,192,136, 98,192,136, 98,192,136,253,249,246,207,147,106,206,
- 163,132,170, 97, 50,186,106, 54,239,208,187,226,162,122,254,251,248,
- 254,251,248,254,251,248,254,251,248,254,251,248,254,251,248,254,251,
- 248,254,251,248,254,251,248,254,251,248,211,150,109,210,167,138,171,
- 98, 50,187,106, 54,240,210,190,226,163,122,226,163,122,225,163,122,
- 226,163,123,225,163,123,224,161,120,222,159,119,221,159,118,220,157,
- 116,217,155,114,216,153,113,214,153,112,213,171,142,173, 99, 51,187,
- 106, 54,242,213,194,227,163,122,227,163,122,226,163,123,226,163,123,
- 226,164,123,225,162,121,224,161,120,222,160,119,222,158,117,220,157,
- 116,218,155,115,217,155,115,218,176,149,175,100, 51,187,106, 54,242,
- 216,197,227,164,123,227,163,122,227,164,122,226,164,123,226,163,123,
- 225,163,123,225,162,121,223,160,119,222,159,118,221,158,116,219,156,
- 114,220,157,116,221,181,154,177,101, 52,187,107, 54,244,217,199,230,
- 166,125,200,140,100,201,141,101,201,142,103,203,146,108,203,146,109,
- 202,144,105,200,140,101,200,140,100,200,140,100,200,140,100,218,156,
- 116,225,186,159,179,102, 52,187,108, 55,244,220,201,231,167,125,249,
- 236,225,249,236,225,249,237,227,252,244,238,253,250,247,253,247,243,
- 250,237,229,247,231,219,247,229,217,246,229,216,222,160,119,228,190,
- 164,180,103, 52,189,110, 58,245,221,204,231,168,126,250,240,232,250,
- 240,232,201,141,102,250,240,233,253,248,243,254,250,248,252,244,239,
- 249,233,223,247,231,219,247,229,217,224,162,120,231,194,169,182,104,
- 53,192,116, 66,246,223,208,232,168,126,252,246,241,252,246,241,200,
- 140,100,250,241,233,251,244,238,253,250,247,253,249,246,250,240,232,
- 248,232,221,247,230,219,225,163,122,239,213,195,183,106, 54,198,130,
- 85,246,223,209,233,170,128,254,250,246,253,250,246,200,140,100,251,
- 243,238,251,241,234,252,246,242,254,251,248,252,246,241,249,236,226,
- 248,231,219,238,208,186,236,208,189,189,116, 67,214,165,133,246,224,
- 209,247,224,209,254,251,248,254,251,247,253,249,246,252,245,240,250,
- 240,234,251,242,237,253,249,246,253,250,247,251,241,235,248,233,223,
- 236,209,190,205,146,106,226,197,177,225,189,166,217,171,141,201,137,
- 94,192,117, 67,189,110, 58,187,108, 55,187,107, 54,187,106, 54,187,
- 106, 54,188,108, 57,189,110, 59,187,109, 58,191,116, 68,201,141,101,
- 231,206,188,255,255,255);
+ 0, 0, 0,255,255,255,186,188,188,145,148,147,173,176,175,255,255,
+ 255,255,255,255,144,148,146,158,161,160,163,166,164,255,255,255,255,
+ 255,255,219,220,219,151,153,153,189,191,190,255,255,255,255,255,255,
+ 255,255,255,141,145,144,250,250,250,151,154,153,169,172,171,159,162,
+ 161,150,154,152,238,239,239,170,174,172,155,158,157,152,155,154,139,
+ 142,141,255,255,255,172,175,175,255,255,255,255,255,255,255,255,255,
+ 186,188,188,142,146,145,246,246,246,153,156,155,171,173,172,143,147,
+ 144,224,225,224,178,180,180,211,213,212,152,155,154,236,236,236,160,
+ 163,162,212,213,213,255,255,255,255,255,255,255,255,255,255,255,255,
+ 141,144,143,221,222,221,142,147,144,201,201,201,138,143,140,206,208,
+ 207,164,166,165,200,200,200,124,128,127,227,228,228,146,149,148,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,117,121,120,
+ 203,205,204,133,138,135,166,167,166,146,147,147,179,180,179,146,147,
+ 146,182,183,182,124,128,127,189,190,189,123,126,125,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,106,110,109,205,206,206,
+ 108,111,111,172,174,173,109,112,111,175,177,176,108,111,110,178,180,
+ 179,111,115,114,179,180,180,109,113,112,255,255,255,255,255,255,255,
+ 255,255,165,118, 87,135, 74, 32,135, 74, 32,135, 74, 32,135, 74, 32,
+ 135, 74, 32,135, 74, 32,135, 74, 32,135, 74, 32,135, 74, 32,135, 74,
+ 32,135, 74, 32,135, 74, 32,135, 74, 32,135, 74, 32,165,118, 87,135,
+ 74, 32,221,187,156,207,159,114,207,159,114,207,159,114,207,159,114,
+ 207,159,114,207,159,114,207,159,114,207,159,114,207,159,114,207,159,
+ 114,207,159,114,207,159,114,221,187,156,135, 74, 32,135, 74, 32,221,
+ 187,156,221,187,156,221,187,156,221,187,156,221,187,156,221,187,156,
+ 221,187,156,221,187,156,221,187,156,221,187,156,221,187,156,221,187,
+ 156,221,187,156,221,187,156,135, 74, 32,135, 74, 32,221,187,156,202,
+ 138, 88,202,138, 88,202,138, 88,202,138, 88,202,138, 88,202,138, 88,
+ 202,138, 88,202,138, 88,202,138, 88,202,138, 88,202,138, 88,202,138,
+ 88,221,187,156,135, 74, 32,135, 74, 32,221,187,156,134, 82, 44,134,
+ 81, 43,134, 81, 43,134, 81, 43,134, 81, 43,134, 81, 43,134, 82, 44,
+ 134, 82, 44,134, 82, 44,134, 82, 44,134, 82, 44,134, 82, 44,221,187,
+ 156,135, 74, 32,135, 74, 32,221,187,156,106, 91, 78,201,201,201,156,
+ 156,156,156,156,156,156,156,156,155,155,155,155,155,155,155,155,155,
+ 155,155,155,155,155,155,155,155,155,106, 91, 78,221,187,156,135, 74,
+ 32,135, 74, 32,221,187,156,119,124,122,217,217,217,189,189,189,189,
+ 189,189,189,189,189,189,189,189,188,188,188,188,188,188,188,188,188,
+ 191,191,191,192,192,192,119,124,122,221,187,156,135, 74, 32,195,165,
+ 144,135, 74, 32,133,138,136,231,231,231,215,215,215,214,214,214,214,
+ 214,214,214,214,214,214,214,214,213,213,213,213,213,213,218,218,218,
+ 220,220,220,133,138,136,135, 74, 32,195,165,144,255,255,255,255,255,
+ 255,133,138,136,241,241,241,235,235,235,235,235,235,235,235,235,234,
+ 234,234,234,234,234,234,234,234,234,234,234,234,234,234,233,233,233,
+ 133,138,136,255,255,255,255,255,255,255,255,255,255,255,255,171,174,
+ 173,133,138,136,133,138,136,133,138,136,133,138,136,133,138,136,133,
+ 138,136,133,138,136,133,138,136,133,138,136,133,138,136,171,174,173,
+ 255,255,255,255,255,255);
Const
stdimg_btn_cancel_16 : Array[0..821] of byte = (
@@ -1815,52 +1540,156 @@ Const
255,255,255,255,255,255);
Const
- stdimg_folder_up_16 : Array[0..821] of byte = (
+ stdimg_edit_paste_16 : Array[0..821] of byte = (
+ 66, 77, 54, 3, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 40, 0, 0,
+ 0, 16, 0, 0, 0, 16, 0, 0, 0, 1, 0, 24, 0, 0, 0, 0, 0,
+ 0, 3, 0, 0, 19, 11, 0, 0, 19, 11, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,255, 0,255,155,181,197, 18, 80,118, 1, 68,108, 1, 68,
+ 108, 1, 68,108, 1, 68,108, 1, 68,108, 1, 68,108, 1, 68,108, 1,
+ 68,108, 1, 68,108, 1, 68,108, 19, 80,117,162,186,201,255, 0,255,
+ 255, 0,255, 13, 76,115, 35,127,186, 59,125,167,100,111,115,104,108,
+ 106,104,108,106,104,108,106,104,108,106,104,108,106, 61,124,163, 61,
+ 124,163, 61,124,163, 34,123,179, 16, 78,116,255, 0,255,255, 0,255,
+ 9, 74,114, 38,135,197, 99,109,112,237,238,237,254,254,254,254,254,
+ 254,254,254,254,238,239,239,253,254,254,100,105,103, 39,135,197, 39,
+ 135,197, 39,135,197, 3, 68,108,255, 0,255,255, 0,255, 9, 74,114,
+ 38,135,197,100,104,102,255,255,255,228,231,231,213,216,216,190,194,
+ 193,180,183,183,255,255,255,255,255,255,100,105,103, 39,135,197, 40,
+ 134,194, 3, 68,108,255, 0,255,255, 0,255, 9, 74,114, 38,135,197,
+ 100,104,102,255,255,255,231,233,233,229,231,231,214,217,217,182,185,
+ 185,255,255,255,255,255,255,255,255,255,100,105,103, 40,134,194, 3,
+ 68,108,255, 0,255,255, 0,255, 9, 75,114, 38,135,197,100,104,102,
+ 255,255,255,234,236,236,232,234,234,230,232,232,203,206,205,182,186,
+ 185,181,185,184,255,255,255,100,105,103, 40,134,194, 3, 68,108,255,
+ 0,255,255, 0,255, 9, 75,114, 38,135,197,100,104,102,255,255,255,
+ 237,238,238,235,236,236,233,235,235,231,233,233,216,218,218,202,205,
+ 204,255,255,255,100,105,103, 40,134,194, 3, 68,108,255, 0,255,255,
+ 0,255, 9, 75,114, 38,135,197,100,104,102,255,255,255,239,240,240,
+ 238,239,239,236,237,237,234,235,235,232,234,234,217,219,219,255,255,
+ 255,100,105,103, 40,134,194, 3, 68,108,255, 0,255,255, 0,255, 9,
+ 75,114, 38,135,197,100,104,102,255,255,255,239,240,240,181,181,179,
+ 181,181,179,180,180,178,178,178,177,232,234,234,255,255,255,100,105,
+ 103, 40,134,194, 3, 68,108,255, 0,255,255, 0,255, 9, 75,115, 38,
+ 135,197,100,104,102,255,255,255,239,240,240,239,240,240,239,240,240,
+ 239,240,240,237,239,239,235,237,237,255,255,255,100,105,103, 40,134,
+ 194, 3, 68,108,255, 0,255,255, 0,255, 9, 75,115, 38,135,197,100,
+ 104,102,255,255,255,239,240,240,181,181,179,181,181,179,181,181,179,
+ 181,181,179,238,239,239,255,255,255,100,105,103, 40,134,194, 3, 68,
+ 108,255, 0,255,255, 0,255, 9, 75,115, 39,136,198,100,104,102,255,
+ 255,255,239,240,240,239,240,240,239,240,240,239,240,240,239,240,240,
+ 239,240,240,255,255,255,100,105,103, 40,134,194, 3, 68,108,255, 0,
+ 255,255, 0,255, 9, 75,115, 39,136,198,100,111,113,241,241,241,224,
+ 224,224,187,187,187,187,187,187,187,187,187,187,187,187,224,224,224,
+ 242,242,242,100,109,110, 39,135,197, 3, 68,108,255, 0,255,255, 0,
+ 255, 13, 77,116, 36,132,192, 62,126,164,100,109,112, 94, 94, 94,124,
+ 127,127,125,128,128,125,128,128,123,126,126, 94, 94, 94,100,108,110,
+ 64,124,161, 35,127,185, 16, 78,117,255, 0,255,255, 0,255,155,182,
+ 197, 18, 80,119, 1, 68,108, 3, 68,107, 91, 92, 92,137,149,149,138,
+ 151,151,138,151,151,137,149,149, 91, 92, 92, 3, 68,107, 1, 68,108,
+ 19, 81,118,162,186,201,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,137,138,138, 92, 92, 92, 92, 92, 92, 92,
+ 92, 92, 92, 92, 92,137,138,138,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255);
+
+Const
+ stdimg_help_16 : Array[0..821] of byte = (
66, 77, 54, 3, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 40, 0, 0,
0, 16, 0, 0, 0, 16, 0, 0, 0, 1, 0, 24, 0, 0, 0, 0, 0,
0, 3, 0, 0, 19, 11, 0, 0, 19, 11, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,192,161,139,164,117, 85,142, 85, 45,142, 85, 45,165,119, 87,193,
+ 161,139,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,198,169,149,147, 91, 53,203,175,
+ 155,229,214,203,248,244,241,249,245,242,232,219,209,211,186,167,149,
+ 94, 56,199,171,151,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,163,116, 84,175,134,105,243,237,233,221,201,186,199,165,
+ 139,187,145,113,193,153,121,213,183,159,233,218,205,248,243,239,183,
+ 145,117,166,120, 88,255, 0,255,255, 0,255,255, 0,255,199,170,150,
+ 174,133,105,243,238,233,183,143,114,165,114, 76,179,135,101,255,255,
+ 255,255,255,255,193,151,116,197,155,120,215,185,160,249,245,241,180,
+ 140,112,199,171,151,255, 0,255,255, 0,255,146, 91, 52,242,235,230,
+ 177,135,105,157,103, 64,163,111, 73,178,132, 98,255,255,255,255,255,
+ 255,189,146,111,193,150,114,197,155,120,214,183,157,247,241,237,147,
+ 93, 54,255, 0,255,192,161,139,195,166,145,211,188,173,148, 92, 51,
+ 154,100, 60,161,108, 69,169,120, 82,200,168,143,204,173,148,183,137,
+ 101,187,143,107,191,147,112,193,150,115,231,215,201,207,181,161,193,
+ 161,139,162,115, 83,221,204,192,175,134,106,145, 88, 47,151, 96, 56,
+ 157,103, 64,167,118, 81,228,212,200,229,214,202,180,134, 98,182,135,
+ 99,185,139,103,186,142,106,209,178,155,230,215,204,165,118, 86,141,
+ 83, 43,245,240,237,148, 94, 56,142, 83, 42,148, 91, 51,153, 98, 58,
+ 159,105, 66,243,237,232,255,255,255,208,181,160,176,127, 90,178,131,
+ 94,180,133, 96,189,148,117,248,243,240,142, 84, 45,141, 83, 43,245,
+ 240,237,147, 92, 54,138, 79, 37,144, 86, 45,149, 93, 52,154, 99, 59,
+ 181,139,109,252,251,249,254,254,254,193,157,130,172,122, 84,173,124,
+ 86,183,141,108,247,243,239,142, 84, 44,162,115, 83,221,204,192,172,
+ 130,101,135, 74, 32,139, 80, 39,144, 86, 45,149, 92, 52,153, 98, 58,
+ 194,161,137,255,255,255,243,236,232,165,114, 75,166,115, 77,195,161,
+ 134,225,210,198,164,117, 85,192,161,139,195,165,144,208,185,169,135,
+ 74, 32,135, 74, 32,159,110, 75,160,111, 77,148, 91, 50,168,122, 89,
+ 255,255,255,253,252,251,161,109, 70,159,106, 67,218,198,183,198,170,
+ 149,192,161,139,255, 0,255,146, 92, 53,241,234,229,165,120, 88,135,
+ 74, 32,176,136,108,254,253,253,233,222,214,246,242,239,255,255,255,
+ 220,202,189,152, 96, 56,179,137,107,242,235,230,145, 91, 52,255, 0,
+ 255,255, 0,255,198,169,149,173,131,103,242,235,231,166,120, 89,156,
+ 105, 71,222,206,194,247,243,240,241,234,230,208,184,167,160,111, 77,
+ 173,130,100,243,237,232,171,128, 98,198,169,149,255, 0,255,255, 0,
+ 255,255, 0,255,163,116, 84,170,127, 97,240,232,227,208,185,169,172,
+ 130,101,150, 96, 59,150, 96, 59,172,130,101,209,186,170,240,233,228,
+ 170,128, 98,163,116, 84,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,198,169,149,145, 91, 52,193,162,141,219,201,189,244,
+ 239,235,244,239,235,219,201,189,193,163,141,145, 90, 51,199,170,150,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,192,161,139,162,115, 83,141, 83, 43,141,
+ 83, 43,162,115, 83,192,161,139,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255);
+
+Const
+ stdimg_list_remove_16 : Array[0..821] of byte = (
+ 66, 77, 54, 3, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 40, 0, 0,
+ 0, 16, 0, 0, 0, 16, 0, 0, 0, 1, 0, 24, 0, 0, 0, 0, 0,
+ 0, 3, 0, 0,215, 13, 0, 0,215, 13, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 198,167,146,138, 78, 37,135, 74, 32,135, 74, 32,135, 74, 32,135, 74,
- 32,135, 74, 32,135, 74, 32,135, 74, 32,135, 74, 32,135, 74, 32,135,
- 74, 32,135, 74, 32,135, 74, 32,138, 78, 37,198,169,148,138, 78, 37,
- 217,181,149,221,186,154,221,186,154,221,186,154,221,186,154,221,186,
- 154,221,186,154,221,186,154,221,186,154,221,186,154,221,186,154,221,
- 186,154,221,186,154,217,181,149,138, 79, 37,135, 74, 32,223,192,162,
- 213,172,134,213,172,134,213,172,134,213,172,134,213,172,134,213,172,
- 134,213,172,134,213,172,134,213,172,134,213,172,134,213,172,134,213,
- 172,134,223,192,162,135, 74, 32,135, 74, 32,226,197,170,215,175,138,
- 215,175,138,215,175,138,143, 85, 42,143, 85, 42,143, 85, 42,143, 85,
- 42,143, 85, 42,143, 85, 42,215,175,138,215,175,138,215,175,138,226,
- 197,170,135, 74, 32,135, 74, 32,228,202,177,217,179,143,217,179,143,
- 217,179,143,143, 85, 42,217,179,143,217,179,143,217,179,143,217,179,
- 143,217,179,143,217,179,143,217,179,143,217,179,143,228,202,177,135,
- 74, 32,135, 74, 32,230,205,181,217,179,143,143, 85, 42,205,164,128,
- 143, 85, 42,205,164,128,143, 85, 42,217,179,143,217,179,143,217,179,
- 143,217,179,143,217,179,143,217,179,143,230,205,181,135, 74, 32,135,
- 74, 32,231,207,184,217,179,143,182,133, 95,143, 85, 42,143, 85, 42,
- 143, 85, 42,182,133, 95,217,179,143,217,179,143,217,179,143,217,179,
- 143,217,179,143,217,179,143,231,207,184,135, 74, 32,135, 74, 32,232,
- 210,188,217,179,143,217,179,143,205,164,128,143, 85, 42,205,164,128,
- 217,179,143,217,179,143,217,179,143,217,179,143,217,179,143,217,179,
- 143,217,179,143,232,210,188,135, 74, 32,136, 76, 34,230,209,188,234,
- 212,192,234,212,192,234,212,192,234,212,192,234,212,192,226,197,169,
- 217,179,143,217,179,143,217,179,143,217,179,143,217,179,143,217,179,
- 143,234,212,192,135, 74, 32,139, 77, 36,136, 76, 34,135, 74, 32,135,
- 74, 32,135, 74, 32,135, 74, 32,140, 82, 42,218,190,167,227,200,173,
- 217,179,143,217,179,143,217,179,143,217,179,143,217,179,143,235,215,
- 196,135, 74, 32,135, 74, 32,204,164,133,188,136, 95,188,136, 94,188,
- 136, 94,188,136, 94,175,120, 80,144, 86, 46,220,194,172,236,217,199,
- 236,217,199,236,217,199,236,217,199,236,217,199,233,214,196,138, 79,
- 37,135, 74, 32,209,176,151,218,186,158,205,161,124,205,161,123,205,
- 161,124,218,186,158,190,150,120,135, 74, 32,135, 74, 32,135, 74, 32,
- 135, 74, 32,135, 74, 32,135, 74, 32,138, 78, 37,198,168,147,225,210,
- 200,144, 89, 49,218,191,169,236,217,200,236,217,200,236,217,200,218,
- 191,169,144, 89, 49,225,210,200,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,225,210,
- 200,135, 74, 32,135, 74, 32,135, 74, 32,135, 74, 32,135, 74, 32,225,
- 210,200,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,182,132, 93,164,101, 52,164,101, 52,
+ 164,101, 52,164,101, 52,164,101, 52,164,101, 52,164,101, 52,164,101,
+ 52,164,101, 52,164,101, 52,182,132, 93,255,255,255,255,255,255,255,
+ 255,255,255,255,255,164,101, 52,229,204,180,219,183,149,219,182,148,
+ 218,180,146,218,179,144,217,173,134,216,170,131,215,168,127,215,166,
+ 125,224,190,159,164,101, 52,255,255,255,255,255,255,255,255,255,255,
+ 255,255,164,101, 52,232,211,192,231,209,187,231,209,188,230,206,183,
+ 230,206,183,230,206,183,230,206,183,230,205,182,230,204,181,230,204,
+ 182,164,101, 52,255,255,255,255,255,255,255,255,255,255,255,255,182,
+ 132, 93,164,101, 52,164,101, 52,164,101, 52,164,101, 52,164,101, 52,
+ 164,101, 52,164,101, 52,164,101, 52,164,101, 52,164,101, 52,182,132,
+ 93,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
@@ -1919,108 +1748,432 @@ Const
255,255,255,255,255,255);
Const
- stdimg_folder_16 : Array[0..821] of byte = (
+ stdimg_edit_cut_16 : Array[0..821] of byte = (
66, 77, 54, 3, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 40, 0, 0,
0, 16, 0, 0, 0, 16, 0, 0, 0, 1, 0, 24, 0, 0, 0, 0, 0,
0, 3, 0, 0, 19, 11, 0, 0, 19, 11, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 0, 0, 0,255,255,255,172,172,226, 37, 37,178, 26, 26,175, 29, 29,
+ 174,209,209,239,255,255,255,255,255,255,255,255,255,255,255,255,172,
+ 172,226, 70, 70,190, 27, 27,176, 39, 39,179,209,209,239,255,255,255,
+ 255,255,255, 49, 49,182, 41, 41,219, 36, 36,209, 31, 31,206, 31, 31,
+ 177,209,209,239,255,255,255,255,255,255,209,209,239, 29, 29,177, 36,
+ 36,212, 34, 34,208, 31, 31,206, 39, 39,178,255,255,255,255,255,255,
+ 19, 19,173, 33, 33,208,255,255,255,117,117,213, 35, 35,211, 52, 52,
+ 184,255,255,255,255,255,255, 59, 59,187, 37, 37,214,114,114,214,255,
+ 255,255, 35, 35,210, 22, 22,173,255,255,255,255,255,255, 43, 43,179,
+ 37, 37,213,134,134,213,255,255,255, 38, 38,208, 13, 13,170,255,255,
+ 255,255,255,255, 5, 5,169, 38, 39,205,255,255,255,137,137,214, 34,
+ 34,209, 43, 43,179,255,255,255,255,255,255,172,172,226, 7, 7,168,
+ 35, 35,209, 73, 73,192, 26, 27,194, 1, 1,166,255,255,255,241,242,
+ 250, 30, 31,205, 25, 27,193, 74, 74,193, 33, 33,206, 7, 7,167,143,
+ 143,216,255,255,255,255,255,255,255,255,255,142,142,215, 9, 9,170,
+ 34, 34,210, 31, 31,206, 16, 17,184, 92, 94,196, 6, 7,169, 26, 26,
+ 201, 34, 34,209, 33, 33,203, 12, 12,170,171,171,225,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,127,127,210,
+ 33, 33,175, 6, 6,166, 70, 75,163, 2, 2,166, 25, 26,199, 37, 37,
+ 178,131,131,211,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,212,214,213,
+ 132,137,137,195,198,197,175,178,179, 52, 55,160,231,232,232,255,255,
255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 198,167,146,138, 78, 37,135, 74, 32,135, 74, 32,135, 74, 32,135, 74,
- 32,135, 74, 32,135, 74, 32,135, 74, 32,135, 74, 32,135, 74, 32,135,
- 74, 32,135, 74, 32,135, 74, 32,138, 78, 37,198,169,148,138, 78, 37,
- 217,181,149,221,186,154,221,186,154,221,186,154,221,186,154,221,186,
- 154,221,186,154,221,186,154,221,186,154,221,186,154,221,186,154,221,
- 186,154,221,186,154,217,181,149,138, 79, 37,135, 74, 32,223,192,162,
- 213,172,134,213,172,134,213,172,134,213,172,134,213,172,134,213,172,
- 134,213,172,134,213,172,134,213,172,134,213,172,134,213,172,134,213,
- 172,134,223,192,162,135, 74, 32,135, 74, 32,226,197,170,215,175,138,
- 215,175,138,215,175,138,215,175,138,215,175,138,215,175,138,215,175,
- 138,215,175,138,215,175,138,215,175,138,215,175,138,215,175,138,226,
- 197,170,135, 74, 32,135, 74, 32,228,202,177,217,179,143,217,179,143,
- 217,179,143,217,179,143,217,179,143,217,179,143,217,179,143,217,179,
- 143,217,179,143,217,179,143,217,179,143,217,179,143,228,202,177,135,
- 74, 32,135, 74, 32,230,205,181,217,179,143,217,179,143,217,179,143,
- 217,179,143,217,179,143,217,179,143,217,179,143,217,179,143,217,179,
- 143,217,179,143,217,179,143,217,179,143,230,205,181,135, 74, 32,135,
- 74, 32,231,207,184,217,179,143,217,179,143,217,179,143,217,179,143,
- 217,179,143,217,179,143,217,179,143,217,179,143,217,179,143,217,179,
- 143,217,179,143,217,179,143,231,207,184,135, 74, 32,135, 74, 32,232,
- 210,188,217,179,143,217,179,143,217,179,143,217,179,143,217,179,143,
- 217,179,143,217,179,143,217,179,143,217,179,143,217,179,143,217,179,
- 143,217,179,143,232,210,188,135, 74, 32,136, 76, 34,230,209,188,234,
- 212,192,234,212,192,234,212,192,234,212,192,234,212,192,226,197,169,
- 217,179,143,217,179,143,217,179,143,217,179,143,217,179,143,217,179,
- 143,234,212,192,135, 74, 32,139, 77, 36,136, 76, 34,135, 74, 32,135,
- 74, 32,135, 74, 32,135, 74, 32,140, 82, 42,218,190,167,227,200,173,
- 217,179,143,217,179,143,217,179,143,217,179,143,217,179,143,235,215,
- 196,135, 74, 32,135, 74, 32,204,164,133,188,136, 95,188,136, 94,188,
- 136, 94,188,136, 94,175,120, 80,144, 86, 46,220,194,172,236,217,199,
- 236,217,199,236,217,199,236,217,199,236,217,199,233,214,196,138, 79,
- 37,135, 74, 32,209,176,151,218,186,158,205,161,124,205,161,123,205,
- 161,124,218,186,158,190,150,120,135, 74, 32,135, 74, 32,135, 74, 32,
- 135, 74, 32,135, 74, 32,135, 74, 32,138, 78, 37,198,168,147,225,210,
- 200,144, 89, 49,218,191,169,236,217,200,236,217,200,236,217,200,218,
- 191,169,144, 89, 49,225,210,200,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,225,210,
- 200,135, 74, 32,135, 74, 32,135, 74, 32,135, 74, 32,135, 74, 32,225,
- 210,200,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,181,184,183,184,188,187,
+ 230,232,231,167,172,170,139,144,142,184,187,186,255,255,255,255,255,
255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,231,232,232,136,141,139,223,225,225,245,246,245,
+ 151,156,154,165,169,168,140,145,143,231,232,232,255,255,255,255,255,
255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,152,156,154,178,182,181,247,247,247,142,147,145,156,160,159,
+ 179,182,181,182,187,185,172,175,174,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,228,229,229,136,
+ 141,139,217,220,219,239,240,239,171,175,173,184,187,186,179,184,182,
+ 203,206,205,137,142,140,197,199,198,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,144,148,146,176,181,179,246,
+ 247,247,155,159,157,202,204,203,255,255,255,141,146,144,201,206,204,
+ 172,176,175,156,160,159,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,136,141,139,208,212,210,239,240,239,179,
+ 183,181,255,255,255,255,255,255,225,227,226,167,172,170,195,200,198,
+ 142,147,145,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,143,148,146,247,247,247,170,173,172,202,204,203,255,
+ 255,255,255,255,255,255,255,255,152,156,155,208,211,210,169,173,171,
255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,221,223,222,145,149,148,162,166,165,255,255,255,255,255,255,255,
+ 255,255,255,255,255,185,187,186,148,152,150,255,255,255,255,255,255,
255,255,255,255,255,255);
Const
- stdimg_folder_open_file_16 : Array[0..821] of byte = (
+ stdimg_menu_save_16 : Array[0..821] of byte = (
+ 66, 77, 54, 3, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 40, 0, 0,
+ 0, 16, 0, 0, 0, 16, 0, 0, 0, 1, 0, 24, 0, 0, 0, 0, 0,
+ 0, 3, 0, 0, 19, 11, 0, 0, 19, 11, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,216,171,142,205,149,112,189,115, 66,183,104, 53,181,104,
+ 53,180,103, 52,178,102, 52,176,101, 51,174,100, 51,172, 99, 50,170,
+ 98, 50,169, 97, 50,168, 96, 49,167, 97, 50,171,105, 60,188,134, 97,
+ 195,125, 79,235,198,173,234,197,173,254,251,248,254,251,248,254,251,
+ 248,254,251,248,254,251,248,254,251,248,254,251,248,254,251,248,254,
+ 251,248,254,251,248,200,154,124,199,152,121,173,107, 64,186,108, 56,
+ 237,202,179,224,162,122,254,250,247, 98,192,136, 98,192,136, 98,192,
+ 136, 98,192,136, 98,192,136, 98,192,136, 98,192,136, 98,192,136,253,
+ 249,246,202,141,101,201,155,124,167, 97, 50,187,108, 56,238,204,182,
+ 225,162,122,254,250,247,191,220,194,191,220,194,191,220,194,191,220,
+ 194,191,220,194,191,220,194,191,220,194,191,220,194,253,249,246,205,
+ 144,104,204,158,129,168, 97, 50,187,107, 56,239,206,184,225,162,121,
+ 254,250,247, 98,192,136, 98,192,136, 98,192,136, 98,192,136, 98,192,
+ 136, 98,192,136, 98,192,136, 98,192,136,253,249,246,207,147,106,206,
+ 163,132,170, 97, 50,186,106, 54,239,208,187,226,162,122,254,251,248,
+ 254,251,248,254,251,248,254,251,248,254,251,248,254,251,248,254,251,
+ 248,254,251,248,254,251,248,254,251,248,211,150,109,210,167,138,171,
+ 98, 50,187,106, 54,240,210,190,226,163,122,226,163,122,225,163,122,
+ 226,163,123,225,163,123,224,161,120,222,159,119,221,159,118,220,157,
+ 116,217,155,114,216,153,113,214,153,112,213,171,142,173, 99, 51,187,
+ 106, 54,242,213,194,227,163,122,227,163,122,226,163,123,226,163,123,
+ 226,164,123,225,162,121,224,161,120,222,160,119,222,158,117,220,157,
+ 116,218,155,115,217,155,115,218,176,149,175,100, 51,187,106, 54,242,
+ 216,197,227,164,123,227,163,122,227,164,122,226,164,123,226,163,123,
+ 225,163,123,225,162,121,223,160,119,222,159,118,221,158,116,219,156,
+ 114,220,157,116,221,181,154,177,101, 52,187,107, 54,244,217,199,230,
+ 166,125,200,140,100,201,141,101,201,142,103,203,146,108,203,146,109,
+ 202,144,105,200,140,101,200,140,100,200,140,100,200,140,100,218,156,
+ 116,225,186,159,179,102, 52,187,108, 55,244,220,201,231,167,125,249,
+ 236,225,249,236,225,249,237,227,252,244,238,253,250,247,253,247,243,
+ 250,237,229,247,231,219,247,229,217,246,229,216,222,160,119,228,190,
+ 164,180,103, 52,189,110, 58,245,221,204,231,168,126,250,240,232,250,
+ 240,232,201,141,102,250,240,233,253,248,243,254,250,248,252,244,239,
+ 249,233,223,247,231,219,247,229,217,224,162,120,231,194,169,182,104,
+ 53,192,116, 66,246,223,208,232,168,126,252,246,241,252,246,241,200,
+ 140,100,250,241,233,251,244,238,253,250,247,253,249,246,250,240,232,
+ 248,232,221,247,230,219,225,163,122,239,213,195,183,106, 54,198,130,
+ 85,246,223,209,233,170,128,254,250,246,253,250,246,200,140,100,251,
+ 243,238,251,241,234,252,246,242,254,251,248,252,246,241,249,236,226,
+ 248,231,219,238,208,186,236,208,189,189,116, 67,214,165,133,246,224,
+ 209,247,224,209,254,251,248,254,251,247,253,249,246,252,245,240,250,
+ 240,234,251,242,237,253,249,246,253,250,247,251,241,235,248,233,223,
+ 236,209,190,205,146,106,226,197,177,225,189,166,217,171,141,201,137,
+ 94,192,117, 67,189,110, 58,187,108, 55,187,107, 54,187,106, 54,187,
+ 106, 54,188,108, 57,189,110, 59,187,109, 58,191,116, 68,201,141,101,
+ 231,206,188,255,255,255);
+
+Const
+ stdimg_arrow_up : Array[0..149] of byte = (
+ 66, 77,150, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 40, 0, 0,
+ 0, 7, 0, 0, 0, 4, 0, 0, 0, 1, 0, 24, 0, 0, 0, 0, 0,
+ 96, 0, 0, 0, 19, 11, 0, 0, 19, 11, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 0,255, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 0,255, 0, 0, 0,
+ 255, 0,255,255, 0,255, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 0,
+ 255,255, 0,255, 0, 0, 0,255, 0,255,255, 0,255,255, 0,255, 0,
+ 0, 0,255, 0,255,255, 0,255,255, 0,255, 0, 0, 0);
+
+Const
+ stdimg_executable_16 : Array[0..821] of byte = (
66, 77, 54, 3, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 40, 0, 0,
0, 16, 0, 0, 0, 16, 0, 0, 0, 1, 0, 24, 0, 0, 0, 0, 0,
0, 3, 0, 0,215, 13, 0, 0,215, 13, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,120, 72, 54,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,120, 72,
+ 54,153,111, 86,120, 72, 54,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,120, 72, 54,218,199,195,195,159,
+ 157,153,111, 86,120, 72, 54,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,120, 72, 54,218,199,195,188,151,145,204,176,172,221,202,
+ 200,153,111, 86,120, 72, 54,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,120, 72, 54,
+ 218,199,195,181,142,133,182,144,135,183,145,137,217,197,193,190,154,
+ 148,153,111, 86,120, 72, 54,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,120, 72, 54,218,199,195,174,136,122,
+ 175,135,122,176,137,124,193,162,152,216,196,191,188,153,144,181,143,
+ 133,153,111, 86,120, 72, 54,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,120, 72, 54,218,199,195,201,177,167,200,176,165,187,155,143,
+ 183,149,136,171,131,116,198,170,161,194,163,153,175,136,123,177,137,
+ 125,153,111, 86,120, 72, 54,255, 0,255,255, 0,255,120, 72, 54,218,
+ 199,195,207,185,175,207,186,176,208,187,177,209,187,178,202,178,167,
+ 187,156,142,205,181,171,209,188,179,173,134,119,171,130,115,172,132,
+ 117,153,111, 86,120, 72, 54,255, 0,255,255, 0,255,120, 72, 54,218,
+ 199,195,204,182,171,205,183,172,206,184,173,206,185,174,199,174,162,
+ 176,140,124,191,162,149,203,179,169,170,130,113,153,111, 86,120, 72,
+ 54,255, 0,255,255, 0,255,255, 0,255,255, 0,255,120, 72, 54,218,
+ 199,195,202,180,167,203,180,168,203,181,169,204,182,170,176,142,124,
+ 180,148,131,177,144,127,153,111, 86,120, 72, 54,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,120, 72, 54,218,
+ 199,195,200,177,163,200,178,164,201,178,165,186,158,141,150,106, 81,
+ 153,111, 86,120, 72, 54,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,120, 72, 54,218,
+ 199,195,198,174,159,198,175,160,186,159,141,144,100, 72,120, 72, 54,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,120, 72, 54,218,
+ 199,195,195,171,155,159,122, 95,120, 72, 54,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,120, 72, 54,218,
+ 199,195,120, 72, 54,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,120, 72, 54,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255);
+
+Const
+ stdimg_search_16 : Array[0..821] of byte = (
+ 66, 77, 54, 3, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 40, 0, 0,
+ 0, 16, 0, 0, 0, 16, 0, 0, 0, 1, 0, 24, 0, 0, 0, 0, 0,
+ 0, 3, 0, 0, 19, 11, 0, 0, 19, 11, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,100,148,186, 34,
+ 103,157,129,168,198,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,111,156,194, 85,141,188,137,181,221, 24,
+ 95,151,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,123,164,202,100,151,197,157,193,228,102,153,199, 49,113,165,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,233,207,186,
+ 219,178,146,211,166,128,208,161,124,210,166,133,174,161,153,117,162,
+ 204,171,203,232,118,164,206, 64,123,175,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,232,202,176,232,201,174,245,225,205,
+ 247,229,211,247,229,209,243,221,200,223,186,156,199,168,145,134,174,
+ 213, 80,135,187,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,241,219,200,237,208,183,248,232,217,245,222,200,243,216,189,
+ 243,214,187,244,219,194,247,228,210,223,187,157,160,151,149,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,238,
+ 206,178,247,231,215,246,225,204,244,219,194,244,218,192,243,216,189,
+ 243,215,187,244,219,194,243,222,201,210,168,135,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,240,206,175,249,
+ 236,223,245,223,200,245,221,198,244,220,195,244,218,193,243,217,190,
+ 243,215,189,248,230,211,211,166,128,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,244,211,181,249,237,225,246,
+ 225,204,245,223,201,245,222,199,244,220,196,244,219,194,244,218,192,
+ 248,231,214,215,171,135,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,248,219,193,249,235,222,247,231,214,246,
+ 225,204,245,224,202,245,222,200,245,221,197,246,225,203,245,226,208,
+ 223,185,153,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,252,234,216,248,226,204,250,238,227,247,231,214,246,
+ 226,206,246,225,203,246,227,208,249,234,221,236,207,181,236,212,191,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,251,228,206,249,226,205,250,236,222,249,238,226,249,
+ 237,226,248,233,218,240,213,189,237,208,183,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,252,234,217,250,221,194,246,214,185,244,211,181,243,
+ 212,184,245,224,205,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255);
+
+Const
+ stdimg_menu_quit_16 : Array[0..821] of byte = (
+ 66, 77, 54, 3, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 40, 0, 0,
+ 0, 16, 0, 0, 0, 16, 0, 0, 0, 1, 0, 24, 0, 0, 0, 0, 0,
+ 0, 3, 0, 0, 19, 11, 0, 0, 19, 11, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255, 31, 31,163, 31, 31,163, 31, 31,163, 31, 31,
+ 163, 31, 31,163, 31, 31,163, 31, 31,163, 31, 31,163, 31, 31,163, 31,
+ 31,163, 31, 31,163, 31, 31,163,255, 0,255,255, 0,255,255, 0,255,
+ 33, 33,176, 6, 5,193, 0, 0,194, 0, 0,201, 0, 0,206, 0, 0,
+ 217, 24, 24,228, 26, 26,234, 12, 15,235, 6, 12,236, 26, 36,239, 36,
+ 48,241, 50, 67,251, 42, 47,189,255, 0,255,255, 0,255, 16, 16,173,
+ 0, 0,181, 0, 0,190, 0, 0,195,108,108,225,216,216,249,255,255,
+ 255,255,255,255,227,227,253,133,136,243, 24, 34,233, 31, 43,235, 45,
+ 60,239, 39, 46,196,255, 0,255,255, 0,255, 16, 16,170, 0, 0,181,
+ 1, 1,187,142,142,229,255,255,255,223,223,246,144,144,233,139,139,
+ 235,212,212,246,255,255,255,173,177,248, 32, 44,235, 42, 57,239, 38,
+ 45,195,255, 0,255,255, 0,255, 18, 18,168, 1, 1,179,105,105,214,
+ 255,255,255,173,173,233, 10, 10,206, 0, 0,213, 0, 0,221, 2, 2,
+ 224,149,151,238,255,255,255,147,153,246, 29, 43,237, 37, 44,193,255,
+ 0,255,255, 0,255, 23, 23,166, 23, 23,185,211,211,242,246,246,252,
+ 51, 51,207, 30, 30,212, 31, 31,218, 19, 19,222, 0, 0,227, 7, 10,
+ 227,228,228,250,235,236,254, 41, 53,238, 34, 40,192,255, 0,255,255,
+ 0,255, 27, 27,164, 51, 51,190,239,239,250,220,220,246, 44, 44,203,
+ 54, 54,212, 50, 50,217, 54, 54,223, 57, 56,230, 18, 19,230,181,182,
+ 247,255,255,255, 51, 60,238, 30, 35,190,255, 0,255,255, 0,255, 31,
+ 31,163, 58, 58,188,227,227,245,239,239,251, 67, 67,206, 61, 61,210,
+ 155,155,235,158,158,239, 73, 73,227, 74, 74,233,222,222,252,239,240,
+ 253, 30, 36,234, 28, 31,189,255, 0,255,255, 0,255, 36, 36,162, 65,
+ 65,188,170,170,222,255,255,255,159,159,229, 74, 74,208,238,238,251,
+ 244,244,253, 84, 84,224,149,149,239,255,255,255,197,197,244, 14, 16,
+ 231, 22, 23,187,255, 0,255,255, 0,255, 40, 40,162, 89, 89,193, 97,
+ 97,194,221,221,238,255,255,255,147,147,224,225,225,247,230,230,249,
+ 160,160,235,255,255,255,233,233,246,131,131,230, 99, 99,237, 23, 23,
+ 185,255, 0,255,255, 0,255, 46, 46,163,107,107,195,100,100,195,113,
+ 113,198,175,175,215,133,133,212,231,231,248,233,233,250,165,165,225,
+ 208,208,232,135,135,222,123,123,229,141,141,234, 53, 53,186,255, 0,
+ 255,255, 0,255, 55, 55,165,120,120,195,118,118,196,118,118,200,113,
+ 113,199,123,123,207,241,241,251,246,246,253,131,131,216,128,128,215,
+ 137,137,224,143,143,225,150,150,229, 68, 68,186,255, 0,255,255, 0,
+ 255, 84, 84,167,172,172,222,170,170,219,172,172,222,175,175,225,179,
+ 179,229,176,176,228,179,179,231,189,189,237,191,191,238,195,195,239,
+ 197,197,240,209,209,247,163,163,193,255, 0,255,255, 0,255,255, 0,
+ 255,103,103,175,100,100,172,100,100,171,101,101,172,101,101,172,101,
+ 101,173,102,102,173,102,102,173,102,102,173,103,103,173,104,104,173,
+ 104,104,175,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255);
+
+Const
+ stdimg_menu_exit_16 : Array[0..821] of byte = (
+ 66, 77, 54, 3, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 40, 0, 0,
+ 0, 16, 0, 0, 0, 16, 0, 0, 0, 1, 0, 24, 0, 0, 0, 0, 0,
+ 0, 3, 0, 0, 19, 11, 0, 0, 19, 11, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,165,193,214,128,167,197, 99,148,184, 22, 94,147, 29, 99,151,
+ 153,153,153,113,113,113, 84, 84, 84, 81, 81, 81, 79, 79, 79, 76, 76,
+ 76, 74, 74, 74, 71, 71, 71, 69, 69, 69, 37,103,157, 50,116,168, 61,
+ 124,175, 71,132,181, 78,138,186, 62,126,173, 32,101,152,255,255,255,
+ 255,255,255, 88, 88, 88,162,162,162,162,162,162,163,163,163,164,164,
+ 164,164,164,164,165,165,165, 47,111,165,120,171,210,120,171,211,115,
+ 167,209,105,160,205, 64,127,174, 35,103,154,255,255,255,255,255,255,
+ 92, 92, 92,161,161,161, 60,115, 64,160,161,161,163,163,163,163,163,
+ 163,164,164,164, 54,116,170,125,175,212, 91,154,201, 84,149,199, 88,
+ 150,200, 65,128,174, 38,105,157,255,255,255,255,255,255, 96, 96, 96,
+ 160,160,160, 61,118, 65, 54,113, 57,162,162,162,162,162,162,163,163,
+ 163, 61,121,176,130,179,215, 98,159,204, 90,154,201, 94,155,202, 67,
+ 129,175, 44,109,160, 55,130, 62, 52,126, 59, 49,121, 55, 46,117, 52,
+ 73,145, 80, 70,143, 76, 57,115, 61,161,161,161,162,162,162, 69,126,
+ 180,136,183,217,103,163,207, 97,158,204, 99,159,204, 69,131,177, 49,
+ 113,164, 59,135, 66,137,203,146,132,200,141,128,198,136,123,195,131,
+ 119,193,127, 71,143, 77, 59,116, 63,161,161,161, 76,132,186,141,187,
+ 219,110,168,209,102,166,209, 95,180,223, 71,133,177, 55,117,169, 62,
+ 139, 70,143,206,153,125,198,135,120,195,129,115,192,124,116,192,124,
+ 121,194,129, 73,144, 79, 84,127, 87, 84,137,191,148,191,221,117,173,
+ 212, 99,184,225, 75,212,255, 66,139,184, 61,122,173, 65,144, 74,148,
+ 210,159,145,208,154,141,205,150,137,203,146,132,200,141, 81,152, 88,
+ 65,124, 70,159,159,159, 90,142,196,152,195,224,124,179,215,116,175,
+ 214, 94,196,237, 75,136,179, 69,127,178, 68,148, 77, 66,145, 75, 63,
+ 141, 72, 61,137, 69, 93,164,101, 90,160, 97, 69,131, 75,158,158,158,
+ 158,158,158, 96,146,201,158,199,226,131,184,218,125,180,215,126,179,
+ 215, 79,137,180, 75,132,183,255,255,255,255,255,255,119,119,119,154,
+ 154,154, 61,138, 69, 73,138, 79,156,156,156,157,157,157,157,157,157,
+ 102,150,204,162,203,227,137,189,220,131,185,218,132,185,218, 81,139,
+ 181, 82,137,188,255,255,255,255,255,255,122,122,122,153,153,153, 82,
+ 145, 89,153,154,153,155,155,155,156,156,156,156,156,156,108,154,208,
+ 167,206,229,143,193,223,137,189,220,139,189,220, 83,141,182, 90,142,
+ 194,255,255,255,255,255,255,125,125,125,153,153,153,153,153,153,154,
+ 154,154,154,154,154,155,155,155,155,155,155,111,157,211,170,209,231,
+ 171,209,231,152,199,225,145,194,222, 86,143,183, 96,147,198,255,255,
+ 255,255,255,255,128,128,128,126,126,126,124,124,124,122,122,122,119,
+ 119,119,117,117,117,114,114,114,113,158,212,111,158,214,135,178,220,
+ 171,211,232,169,208,230, 88,144,184,103,151,203,255,255,255,255,255,
255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,132,172,220,109,156,212,
+ 133,177,218, 90,145,185,109,156,207,255,255,255,255,255,255,255,255,
255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 165,129,103,139, 82, 41,139, 82, 41,157,108, 74,157,108, 74,157,108,
- 74,157,108, 74,157,108, 74,157,108, 74,157,108, 74,157,108, 74,157,
- 108, 74,139, 82, 41,145,110, 84,255,255,255,255,255,255,139, 82, 41,
- 209,165,123,210,165,124,210,165,124,210,165,124,210,165,124,210,165,
- 124,210,165,124,210,165,124,210,165,124,210,165,124,210,165,124,209,
- 165,123,139, 82, 41,255,255,255,255,255,255,157,104, 63,208,161,116,
- 207,159,114,207,159,114,207,159,114,207,159,114,207,159,114,207,159,
- 114,207,159,114,207,159,114,207,159,114,207,159,114,208,161,116,139,
- 82, 41,255,255,255,139, 82, 41,196,151,112,208,162,119,207,160,117,
- 207,160,117,207,160,117,207,160,117,207,160,117,207,160,117,207,160,
- 117,207,160,117,207,160,117,207,160,117,208,162,119,196,151,112,139,
- 82, 41,139, 82, 41,206,164,127,210,165,123,209,164,122,209,164,122,
- 209,164,122,209,164,122,209,164,122,209,164,122,209,164,122,209,164,
- 122,209,164,122,209,164,122,210,166,124,212,169,129,139, 82, 41,139,
- 82, 41,215,180,148,220,186,153,220,186,153,220,186,153,220,185,152,
- 216,179,143,212,169,130,211,168,127,211,168,127,211,168,127,211,168,
- 127,211,168,127,212,168,128,209,169,133,139, 82, 41,139, 82, 41,139,
- 82, 41,139, 82, 41,139, 82, 41,139, 82, 41,139, 82, 41,139, 82, 41,
- 210,173,142,218,180,145,217,179,145,217,179,145,217,179,145,217,179,
- 145,217,180,145,217,183,152,139, 82, 41,255,255,255,139, 82, 41,127,
- 120,111,253,253,253,248,249,249,243,241,240,205,137, 89,139, 82, 41,
- 139, 82, 41,139, 82, 41,139, 82, 41,139, 82, 41,139, 82, 41,139, 82,
- 41,139, 82, 41,139, 82, 41,255,255,255,139, 82, 41,142,136,127,242,
- 242,242,241,242,241,241,241,241,205,137, 89,255,247,240,253,231,214,
- 253,230,212,252,228,208,251,227,203,254,243,232,205,136, 88,139, 82,
- 41,255,255,255,255,255,255,139, 82, 41,177,154,132,151,138,124,150,
- 137,123,148,136,121,205,137, 89,255,247,242, 92, 92, 92, 92, 92, 92,
- 92, 92, 92, 92, 92, 92,253,242,231,205,137, 89,139, 82, 41,255,255,
- 255,255,255,255,139, 82, 41,218,183,153,212,172,137,212,172,137,213,
- 174,140,205,136, 88,254,247,241,252,228,209,251,226,204,249,221,196,
- 247,218,192,252,242,233,205,137, 89,139, 82, 41,255,255,255,255,255,
- 255,157,103, 62,197,159,132,213,181,155,213,181,155,211,179,152,204,
- 135, 87,255,247,241, 93, 93, 93, 92, 92, 92, 92, 92, 92,254,249,243,
- 255,247,240,205,137, 89,255,255,255,255,255,255,255,255,255,255,255,
- 255,139, 82, 41,139, 82, 41,139, 82, 41,139, 82, 41,205,137, 89,255,
- 247,240,255,247,240,255,247,240,255,247,240,255,247,240,255,247,240,
- 205,137, 89,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,205,137, 89,205,137, 89,205,
- 137, 89,205,137, 89,205,137, 89,205,137, 89,205,137, 89,205,137, 89,
- 255,255,255,255,255,255);
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,177,202,232,
+ 108,156,211,112,158,210);
+
+Const
+ stdimg_bookmark_16 : Array[0..821] of byte = (
+ 66, 77, 54, 3, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 40, 0, 0,
+ 0, 16, 0, 0, 0, 16, 0, 0, 0, 1, 0, 24, 0, 0, 0, 0, 0,
+ 0, 3, 0, 0, 19, 11, 0, 0, 19, 11, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,255, 0,255,223,209,197,157,105, 71,135, 74, 32,135, 74,
+ 32,135, 74, 32,135, 74, 32,135, 74, 32,135, 74, 32,135, 74, 32,135,
+ 74, 32,135, 74, 32,135, 74, 32,135, 74, 32,135, 74, 32,135, 74, 32,
+ 255, 0,255,150, 96, 59,168,109, 61,215,169,130,182,134, 96,162,115,
+ 77,166,122, 85,172,129, 95,177,136,103,181,143,111,185,149,118,189,
+ 155,126,194,160,133,197,165,139,200,169,144,135, 74, 32,255, 0,255,
+ 135, 74, 32,188,132, 80,216,169,130,179,130, 90,156,107, 66,147,110,
+ 75,127,111, 86,166,120, 82,169,124, 87,151,124, 95,150,128,101,179,
+ 137,103,182,141,108,199,167,142,135, 74, 32,255, 0,255,135, 74, 32,
+ 188,132, 80,216,169,130,179,130, 90,156,107, 66, 26,104,116, 12,108,
+ 126, 37,107,116, 68,110,109, 9,103,121, 8,102,120,149,130,106,182,
+ 141,108,198,165,139,135, 74, 32,255, 0,255,135, 74, 32,188,132, 80,
+ 216,169,130,179,130, 90,156,107, 66, 23,106,120, 64,207,227, 50,182,
+ 202, 38,157,176, 72,221,240, 18,114,131,145,129,105,182,141,108,197,
+ 163,137,135, 74, 32,255, 0,255,135, 74, 32,188,132, 80,216,169,130,
+ 179,130, 90,156,107, 66, 35,106,115, 52,186,206, 79,233,252, 79,233,
+ 252, 78,231,250, 3, 99,118,162,133,104,182,141,108,195,161,134,135,
+ 74, 32,255, 0,255,135, 74, 32,188,132, 80,216,169,130,179,130, 90,
+ 68,104, 99, 19,118,136, 73,224,242, 79,233,252, 79,233,252, 79,232,
+ 251, 36,151,170, 33,109,119,169,138,108,194,159,131,135, 74, 32,255,
+ 0,255,135, 74, 32,188,132, 80,216,169,130,162,127, 93, 3, 98,118,
+ 60,198,216,113,232,247,194,247,254,215,250,254,135,239,252, 74,216,
+ 235, 19,121,140,108,122,112,193,157,128,135, 74, 32,255, 0,255,135,
+ 74, 32,188,132, 80,216,169,130,179,130, 90, 68,104,100, 24,106,119,
+ 3, 97,119,147,221,232,223,250,253, 10,106,125, 18,106,122, 43,111,
+ 121,163,137,109,191,155,126,135, 74, 32,255, 0,255,135, 74, 32,188,
+ 132, 80,216,169,130,179,130, 90,156,107, 66,159,111, 71,111,109, 90,
+ 47,135,150,122,198,210, 62,112,114,175,133, 98,179,137,103,182,141,
+ 108,190,153,123,135, 74, 32,255, 0,255,135, 74, 32,188,132, 80,216,
+ 169,130,179,130, 90,156,107, 66,159,111, 71,162,115, 77, 38,106,115,
+ 13,102,120,146,123, 95,175,133, 98,179,137,103,182,141,108,189,151,
+ 120,135, 74, 32,255, 0,255,135, 74, 32,182,128, 81,183,136,102,172,
+ 124, 92,166,122, 89,167,122, 89,167,123, 89,169,126, 92,170,128, 94,
+ 174,131, 96,175,133, 98,179,137,103,182,141,108,187,149,118,135, 74,
+ 32,255, 0,255,135, 74, 32,156,104, 67,153, 98, 60,156,102, 64,153,
+ 102, 63,159,110, 72,166,119, 84,170,126, 90,172,129, 93,174,131, 96,
+ 176,135,100,179,137,103,182,141,108,186,146,115,135, 74, 32,255, 0,
+ 255,135, 74, 32,150, 92, 47,203,188,176,236,233,230,249,246,244,249,
+ 247,244,250,247,245,250,247,245,250,247,245,250,248,245,250,248,246,
+ 251,248,246,251,248,246,251,249,247,135, 74, 32,255, 0,255,150, 96,
+ 59,160,101, 54,213,202,193,210,217,213,214,220,217,218,224,221,222,
+ 228,225,227,231,229,231,235,233,235,239,237,240,242,241,244,246,245,
+ 249,250,249,253,253,253,135, 74, 32,255, 0,255,223,209,197,157,105,
+ 71,135, 74, 32,135, 74, 32,135, 74, 32,135, 74, 32,135, 74, 32,135,
+ 74, 32,135, 74, 32,135, 74, 32,135, 74, 32,135, 74, 32,135, 74, 32,
+ 135, 74, 32,135, 74, 32);
+
+Const
+ stdimg_menu_check_16 : Array[0..821] of byte = (
+ 66, 77, 54, 3, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 40, 0, 0,
+ 0, 16, 0, 0, 0, 16, 0, 0, 0, 1, 0, 24, 0, 0, 0, 0, 0,
+ 0, 3, 0, 0, 19, 11, 0, 0, 19, 11, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255, 0, 0, 0,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255, 0, 0, 0, 0, 0, 0,
+ 255, 0,255, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255, 0, 0, 0,255, 0,255,255, 0,255,
+ 255, 0,255, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255, 0, 0, 0, 0, 0, 0,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255, 0, 0, 0,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255);
Const
stdimg_btn_close_16 : Array[0..821] of byte = (
@@ -2075,6 +2228,400 @@ Const
255,255,255,255,255,255);
Const
+ stdimg_bevel : Array[0..1709] of byte = (
+ 66, 77,174, 6, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 40, 0, 0,
+ 0, 23, 0, 0, 0, 23, 0, 0, 0, 1, 0, 24, 0, 0, 0, 0, 0,
+ 120, 6, 0, 0, 19, 11, 0, 0, 19, 11, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255, 0, 0, 0,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255, 0, 0, 0,255, 0,255,200,208,212,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255, 0,255,255, 0,255, 0, 0, 0,255, 0,
+ 255,128,128,128,200,208,212,128,128,128,128,128,128,128,128,128,128,
+ 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
+ 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
+ 128,128,128,128,128,128,128,255,255,255,255, 0,255,255, 0,255, 0,
+ 0, 0,255, 0,255,128,128,128,255,255,255,200,208,212,200,208,212,
+ 200,208,212,200,208,212,200,208,212,200,208,212,200,208,212,200,208,
+ 212,200,208,212,200,208,212,200,208,212,200,208,212,200,208,212,200,
+ 208,212,200,208,212,200,208,212,128,128,128,255,255,255,255, 0,255,
+ 255, 0,255, 0, 0, 0,255, 0,255,128,128,128,255,255,255,200,208,
+ 212,200,208,212,200,208,212,200,208,212,200,208,212,200,208,212,200,
+ 208,212,200,208,212,200,208,212,200,208,212,200,208,212,200,208,212,
+ 200,208,212,200,208,212,200,208,212,200,208,212,128,128,128,255,255,
+ 255,255, 0,255,255, 0,255, 0, 0, 0,255, 0,255,128,128,128,255,
+ 255,255,200,208,212,200,208,212,200,208,212,200,208,212,200,208,212,
+ 200,208,212,200,208,212,128,128,128,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,200,208,212,128,
+ 128,128,255,255,255,255, 0,255,255, 0,255, 0, 0, 0,255, 0,255,
+ 128,128,128,255,255,255,200,208,212,200,208,212,200,208,212,200,208,
+ 212,200,208,212,200,208,212,200,208,212,128,128,128,200,208,212,200,
+ 208,212,200,208,212,200,208,212,200,208,212,200,208,212,255,255,255,
+ 200,208,212,128,128,128,255,255,255,255, 0,255,255, 0,255, 0, 0,
+ 0,255, 0,255,128,128,128,255,255,255,200,208,212,200,208,212,200,
+ 208,212,200,208,212,200,208,212,200,208,212,200,208,212,128,128,128,
+ 200,208,212,200,208,212,200,208,212,200,208,212,200,208,212,200,208,
+ 212,255,255,255,200,208,212,128,128,128,255,255,255,255, 0,255,255,
+ 0,255, 0, 0, 0,255, 0,255,128,128,128,255,255,255,200,208,212,
+ 200,208,212,200,208,212,200,208,212,200,208,212,200,208,212,200,208,
+ 212,128,128,128,200,208,212,200,208,212,200,208,212,200,208,212,200,
+ 208,212,200,208,212,255,255,255,200,208,212,128,128,128,255,255,255,
+ 255, 0,255,255, 0,255, 0, 0, 0,255, 0,255,128,128,128,255,255,
+ 255,200,208,212,200,208,212,200,208,212,200,208,212,200,208,212,200,
+ 208,212,200,208,212,128,128,128,128,128,128,128,128,128,128,128,128,
+ 128,128,128,128,128,128,128,128,128,255,255,255,200,208,212,128,128,
+ 128,255,255,255,255, 0,255,255, 0,255, 0, 0, 0,255, 0,255,128,
+ 128,128,255,255,255,200,208,212,200,208,212,200,208,212,200,208,212,
+ 200,208,212,200,208,212,200,208,212,200,208,212,200,208,212,200,208,
+ 212,200,208,212,200,208,212,200,208,212,200,208,212,200,208,212,200,
+ 208,212,128,128,128,255,255,255,255, 0,255,255, 0,255, 0, 0, 0,
+ 255, 0,255,128,128,128,255,255,255,200,208,212,200,208,212,200,208,
+ 212,200,208,212,200,208,212,200,208,212,200,208,212,200,208,212,200,
+ 208,212,200,208,212,200,208,212,200,208,212,200,208,212,200,208,212,
+ 200,208,212,200,208,212,128,128,128,255,255,255,255, 0,255,255, 0,
+ 255, 0, 0, 0,255, 0,255,128,128,128,255,255,255,200,208,212,255,
+ 255,255,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
+ 128,128,128,200,208,212,200,208,212,200,208,212,200,208,212,200,208,
+ 212,200,208,212,200,208,212,200,208,212,128,128,128,255,255,255,255,
+ 0,255,255, 0,255, 0, 0, 0,255, 0,255,128,128,128,255,255,255,
+ 200,208,212,255,255,255,200,208,212,200,208,212,200,208,212,200,208,
+ 212,200,208,212,128,128,128,200,208,212,200,208,212,200,208,212,200,
+ 208,212,200,208,212,200,208,212,200,208,212,200,208,212,128,128,128,
+ 255,255,255,255, 0,255,255, 0,255, 0, 0, 0,255, 0,255,128,128,
+ 128,255,255,255,200,208,212,255,255,255,200,208,212,200,208,212,200,
+ 208,212,200,208,212,200,208,212,128,128,128,200,208,212,200,208,212,
+ 200,208,212,200,208,212,200,208,212,200,208,212,200,208,212,200,208,
+ 212,128,128,128,255,255,255,255, 0,255,255, 0,255, 0, 0, 0,255,
+ 0,255,128,128,128,255,255,255,200,208,212,255,255,255,200,208,212,
+ 200,208,212,200,208,212,200,208,212,200,208,212,128,128,128,200,208,
+ 212,200,208,212,200,208,212,200,208,212,200,208,212,200,208,212,200,
+ 208,212,200,208,212,128,128,128,255,255,255,255, 0,255,255, 0,255,
+ 0, 0, 0,255, 0,255,128,128,128,255,255,255,200,208,212,255,255,
+ 255,200,208,212,200,208,212,200,208,212,200,208,212,200,208,212,128,
+ 128,128,200,208,212,200,208,212,200,208,212,200,208,212,200,208,212,
+ 200,208,212,200,208,212,200,208,212,128,128,128,255,255,255,255, 0,
+ 255,255, 0,255, 0, 0, 0,255, 0,255,128,128,128,255,255,255,200,
+ 208,212,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,128,128,128,200,208,212,200,208,212,200,208,212,200,208,
+ 212,200,208,212,200,208,212,200,208,212,200,208,212,128,128,128,255,
+ 255,255,255, 0,255,255, 0,255, 0, 0, 0,255, 0,255,128,128,128,
+ 255,255,255,200,208,212,200,208,212,200,208,212,200,208,212,200,208,
+ 212,200,208,212,200,208,212,200,208,212,200,208,212,200,208,212,200,
+ 208,212,200,208,212,200,208,212,200,208,212,200,208,212,200,208,212,
+ 128,128,128,255,255,255,255, 0,255,255, 0,255, 0, 0, 0,255, 0,
+ 255,128,128,128,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,200,208,212,255,255,255,255, 0,255,255, 0,255, 0,
+ 0, 0,255, 0,255,128,128,128,128,128,128,128,128,128,128,128,128,
+ 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
+ 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
+ 128,128,128,128,128,128,128,128,128,128,128,200,208,212,255, 0,255,
+ 255, 0,255, 0, 0, 0,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255, 0, 0, 0);
+
+Const
+ stdimg_choice_no_16 : Array[0..821] of byte = (
+ 66, 77, 54, 3, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 40, 0, 0,
+ 0, 16, 0, 0, 0, 16, 0, 0, 0, 1, 0, 24, 0, 0, 0, 0, 0,
+ 0, 3, 0, 0, 19, 11, 0, 0, 19, 11, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,255, 0,255,255, 0,255, 98, 98,162,164,164,178,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,152,152,171,101,101,160,255, 0,255,255, 0,255,
+ 255, 0,255, 48, 48,162, 55, 55,241, 19, 19,202,152,152,172,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,135,
+ 135,164, 17, 17,205, 48, 48,234, 61, 61,154,255, 0,255,255, 0,255,
+ 8, 8,224, 72, 72,245, 76, 76,240, 5, 5,200,135,135,163,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,116,116,157, 5, 5,205, 90,
+ 90,239, 90, 90,244, 9, 9,217,255, 0,255,255, 0,255, 34, 34,254,
+ 55, 55,255, 89, 89,255, 74, 74,237, 5, 5,199,119,119,156,255, 0,
+ 255,255, 0,255, 98, 98,152, 8, 8,206, 90, 90,237,115,115,255, 85,
+ 85,255, 54, 54,253,255, 0,255,255, 0,255, 29, 29,255, 43, 43,255,
+ 57, 57,255, 86, 86,255, 69, 69,235, 5, 5,196,102,102,148, 85, 85,
+ 147, 9, 9,203, 84, 84,237,106,106,255, 80, 80,255, 65, 65,255, 52,
+ 52,255,255, 0,255,255, 0,255,255, 0,255, 30, 30,255, 43, 43,255,
+ 53, 53,255, 74, 74,255, 55, 55,232, 1, 1,187, 6, 6,192, 68, 68,
+ 237, 88, 88,255, 71, 71,255, 62, 62,255, 54, 54,249,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255, 31, 31,251, 47, 47,255,
+ 60, 60,255, 78, 78,255, 49, 49,232, 55, 55,237, 75, 75,255, 56, 56,
+ 255, 50, 50,255, 55, 55,241,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255, 77, 77,238, 97, 97,255,
+ 96, 96,255, 96, 96,255, 98, 98,255, 98, 98,255, 91, 91,255, 73, 73,
+ 227,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255, 43, 43,156, 61, 61,244, 99, 99,255,
+ 99, 99,255,100,100,255,100,100,255, 54, 54,237, 75, 75,146,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255, 47, 47,123, 0, 0,166, 49, 49,242,107,107,255,106,106,255,
+ 106,106,255,105,105,255, 33, 33,230, 0, 0,152, 82, 82,127,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255, 43, 43,115, 0,
+ 0,164, 55, 55,243,121,121,255,120,120,255,121,121,255,121,121,255,
+ 120,120,255,116,116,255, 38, 38,229, 0, 0,146, 82, 82,123,255, 0,
+ 255,255, 0,255,255, 0,255, 45, 45,112, 0, 0,156, 66, 66,242,138,
+ 138,255,137,137,255,136,136,255,102,102,209,103,103,224,141,141,255,
+ 136,136,255,132,132,255, 42, 42,227, 0, 0,139, 91, 91,128,255, 0,
+ 255,255, 0,255, 0, 0,156, 73, 73,242,155,155,255,153,153,255,153,
+ 153,255,115,115,207,255, 0,255,255, 0,255,110,110,228,158,158,255,
+ 153,153,255,148,148,255, 47, 47,229, 13, 13,130,255, 0,255,255, 0,
+ 255, 85, 85,254,174,174,255,169,169,255,168,168,255,119,119,205,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,118,118,228,175,175,255,
+ 169,169,255,169,169,255, 60, 60,222,255, 0,255,255, 0,255,127,127,
+ 208,187,187,255,187,187,255,122,122,207,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,126,126,228,200,200,255,
+ 164,164,255,152,152,199,255, 0,255,255, 0,255,255, 0,255,126,126,
+ 210,127,127,214,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,121,121,231,154,154,197,
+ 255, 0,255,255, 0,255);
+
+Const
+ stdimg_radiobuttons : Array[0..2213] of byte = (
+ 66, 77,166, 8, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 40, 0, 0,
+ 0, 60, 0, 0, 0, 12, 0, 0, 0, 1, 0, 24, 0, 0, 0, 0, 0,
+ 112, 8, 0, 0,196, 14, 0, 0,196, 14, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255,255,255,255,255,255,191,191,191,191,191,191,191,191,191,
+ 191,191,191,255,255,255,255,255,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255,255,255,255,255,255,191,191,191,191,191,191,191,
+ 191,191,191,191,191,255,255,255,255,255,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255,255,255,255,255,255,191,191,191,191,191,
+ 191,191,191,191,191,191,191,255,255,255,255,255,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255,255,255,255,255,255,191,191,191,
+ 191,191,191,191,191,191,191,191,191,255,255,255,255,255,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255,255,255,255,255,255,191,
+ 191,191,191,191,191,191,191,191,191,191,191,255,255,255,255,255,255,
+ 255, 0,255,255, 0,255,255, 0,255,127,127,127,191,191,191,191,191,
+ 191,255,255,255,255,255,255,255,255,255,255,255,255,191,191,191,191,
+ 191,191,255,255,255,255, 0,255,255, 0,255,127,127,127,191,191,191,
+ 191,191,191,255,255,255,255,255,255,255,255,255,255,255,255,191,191,
+ 191,191,191,191,255,255,255,255, 0,255,255, 0,255,127,127,127,191,
+ 191,191,191,191,191,127,127,127,127,127,127,127,127,127,127,127,127,
+ 191,191,191,191,191,191,255,255,255,255, 0,255,255, 0,255,127,127,
+ 127,191,191,191,191,191,191,127,127,127,127,127,127,127,127,127,127,
+ 127,127,191,191,191,191,191,191,255,255,255,255, 0,255,255, 0,255,
+ 127,127,127,191,191,191,191,191,191,127,127,127,127,127,127,127,127,
+ 127,127,127,127,191,191,191,191,191,191,255,255,255,255, 0,255,255,
+ 0,255,127,127,127, 0, 0, 0,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,191,191,191,255,255,255,255, 0,
+ 255,255, 0,255,127,127,127, 0, 0, 0,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,191,191,191,255,255,255,
+ 255, 0,255,255, 0,255,127,127,127, 0, 0, 0,127,127,127,127,127,
+ 127,127,127,127,127,127,127,127,127,127,127,127,127,191,191,191,255,
+ 255,255,255, 0,255,255, 0,255,127,127,127, 0, 0, 0,127,127,127,
+ 127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,191,191,
+ 191,255,255,255,255, 0,255,255, 0,255,127,127,127, 0, 0, 0,127,
+ 127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,
+ 191,191,191,255,255,255,255, 0,255,127,127,127, 0, 0, 0,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,191,191,191,255,255,255,127,127,127, 0, 0, 0,
+ 255,255,255,255,255,255,255,255,255, 0, 0, 0, 0, 0, 0,255,255,
+ 255,255,255,255,255,255,255,191,191,191,255,255,255,127,127,127, 0,
+ 0, 0,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,
+ 127,127,127,127,127,127,127,127,127,191,191,191,255,255,255,127,127,
+ 127, 0, 0, 0,127,127,127,127,127,127,127,127,127, 0, 0, 0, 0,
+ 0, 0,127,127,127,127,127,127,127,127,127,191,191,191,255,255,255,
+ 127,127,127, 0, 0, 0,127,127,127,127,127,127,127,127,127,127,127,
+ 127,127,127,127,127,127,127,127,127,127,127,127,127,191,191,191,255,
+ 255,255,127,127,127, 0, 0, 0,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,191,191,
+ 191,255,255,255,127,127,127, 0, 0, 0,255,255,255,255,255,255, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,255,
+ 191,191,191,255,255,255,127,127,127, 0, 0, 0,127,127,127,127,127,
+ 127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,
+ 127,127,191,191,191,255,255,255,127,127,127, 0, 0, 0,127,127,127,
+ 127,127,127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,127,127,
+ 127,127,127,127,191,191,191,255,255,255,127,127,127, 0, 0, 0,127,
+ 127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,
+ 127,127,127,127,127,127,191,191,191,255,255,255,127,127,127, 0, 0,
+ 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,191,191,191,255,255,255,127,127,127,
+ 0, 0, 0,255,255,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,255,255,255,255,255,255,191,191,191,255,255,255,127,
+ 127,127, 0, 0, 0,127,127,127,127,127,127,127,127,127,127,127,127,
+ 127,127,127,127,127,127,127,127,127,127,127,127,191,191,191,255,255,
+ 255,127,127,127, 0, 0, 0,127,127,127,127,127,127, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,127,127,127,127,127,127,191,191,191,
+ 255,255,255,127,127,127, 0, 0, 0,127,127,127,127,127,127,127,127,
+ 127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,191,
+ 191,191,255,255,255,127,127,127, 0, 0, 0,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,191,191,191,255,255,255,127,127,127, 0, 0, 0,255,255,255,255,
+ 255,255,255,255,255, 0, 0, 0, 0, 0, 0,255,255,255,255,255,255,
+ 255,255,255,191,191,191,255,255,255,127,127,127, 0, 0, 0,127,127,
+ 127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,
+ 127,127,127,127,127,191,191,191,255,255,255,127,127,127, 0, 0, 0,
+ 127,127,127,127,127,127,127,127,127, 0, 0, 0, 0, 0, 0,127,127,
+ 127,127,127,127,127,127,127,191,191,191,255,255,255,127,127,127, 0,
+ 0, 0,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,
+ 127,127,127,127,127,127,127,127,127,191,191,191,255,255,255,255, 0,
+ 255,127,127,127, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,191,191,191,255,255,255,255, 0,255,
+ 255, 0,255,127,127,127, 0, 0, 0,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,191,191,191,255,255,255,255,
+ 0,255,255, 0,255,127,127,127, 0, 0, 0,127,127,127,127,127,127,
+ 127,127,127,127,127,127,127,127,127,127,127,127,191,191,191,255,255,
+ 255,255, 0,255,255, 0,255,127,127,127, 0, 0, 0,127,127,127,127,
+ 127,127,127,127,127,127,127,127,127,127,127,127,127,127,191,191,191,
+ 255,255,255,255, 0,255,255, 0,255,127,127,127, 0, 0, 0,127,127,
+ 127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,191,
+ 191,191,255,255,255,255, 0,255,255, 0,255,127,127,127, 0, 0, 0,
+ 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0,
+ 0, 0, 0, 0,255,255,255,255, 0,255,255, 0,255,127,127,127, 0,
+ 0, 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,
+ 0, 0, 0, 0, 0, 0,255,255,255,255, 0,255,255, 0,255,127,127,
+ 127, 0, 0, 0, 0, 0, 0,127,127,127,127,127,127,127,127,127,127,
+ 127,127, 0, 0, 0, 0, 0, 0,255,255,255,255, 0,255,255, 0,255,
+ 127,127,127, 0, 0, 0, 0, 0, 0,127,127,127,127,127,127,127,127,
+ 127,127,127,127, 0, 0, 0, 0, 0, 0,255,255,255,255, 0,255,255,
+ 0,255,127,127,127, 0, 0, 0, 0, 0, 0,127,127,127,127,127,127,
+ 127,127,127,127,127,127, 0, 0, 0, 0, 0, 0,255,255,255,255, 0,
+ 255,255, 0,255,255, 0,255,127,127,127,127,127,127, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,127,127,127,127,127,127,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,127,127,127,127,127,127, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,127,127,127,127,127,127,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,127,127,127,127,127,127,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,127,127,127,127,127,
+ 127,255, 0,255,255, 0,255,255, 0,255,255, 0,255,127,127,127,127,
+ 127,127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,127,127,127,
+ 127,127,127,255, 0,255,255, 0,255,255, 0,255,255, 0,255,127,127,
+ 127,127,127,127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,127,
+ 127,127,127,127,127,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,127,127,127,127,127,127,127,127,127,127,127,
+ 127,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,127,127,127,127,127,127,127,127,127,
+ 127,127,127,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,127,127,127,127,127,127,127,
+ 127,127,127,127,127,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,127,127,127,127,127,
+ 127,127,127,127,127,127,127,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,127,127,127,
+ 127,127,127,127,127,127,127,127,127,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255);
+
+Const
+ stdimg_refresh_16 : Array[0..821] of byte = (
+ 66, 77, 54, 3, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 40, 0, 0,
+ 0, 16, 0, 0, 0, 16, 0, 0, 0, 1, 0, 24, 0, 0, 0, 0, 0,
+ 0, 3, 0, 0, 19, 11, 0, 0, 19, 11, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,255, 0,255,197,157,126,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,225,205,189,189,144,108,174,118, 73,166,105, 57,176,
+ 122, 79,196,156,124,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,164,101, 52,203,167,139,255, 0,255,225,204,188,172,113,
+ 68,184,134, 93,206,166,132,216,182,151,219,185,153,211,172,138,195,
+ 149,111,169,109, 63,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 165,104, 56,185,136, 96,180,129, 88,180,128, 86,227,202,180,236,218,
+ 201,231,209,188,227,201,176,222,190,160,210,171,136,206,165,130,211,
+ 174,142,169,110, 64,255, 0,255,255, 0,255,255, 0,255,167,105, 58,
+ 241,228,216,212,178,149,244,233,224,243,232,221,237,220,204,210,173,
+ 143,179,125, 83,166,104, 56,166,105, 57,166,106, 58,169,109, 61,176,
+ 120, 76,197,157,125,255, 0,255,255, 0,255,166,104, 57,246,238,230,
+ 245,236,227,245,237,228,230,210,193,179,126, 84,185,136, 97,255, 0,
+ 255,255, 0,255,217,191,171,175,117, 74,182,124, 79,167,107, 59,167,
+ 107, 59,255, 0,255,255, 0,255,165,104, 55,246,238,230,235,215,196,
+ 234,217,201,164,102, 53,217,191,171,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,173,115, 70,225,196,174,200,158,124,164,101, 52,255,
+ 0,255,255, 0,255,165,103, 54,245,237,229,246,237,229,245,236,228,
+ 215,184,157,177,122, 79,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,165,103, 54,255, 0,255,255,
+ 0,255,166,105, 57,164,102, 53,164,102, 53,165,102, 54,165,103, 54,
+ 165,103, 55,189,143,108,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,198,158,128,164,101, 52,175,120, 76,178,123, 82,178,123,
+ 82,178,124, 82,164,101, 52,255, 0,255,255, 0,255,165,103, 54,217,
+ 189,167,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,187,139,102,209,174,145,246,238,231,242,230,219,246,238,
+ 230,167,108, 61,255, 0,255,255, 0,255,164,102, 54,168,108, 61,221,
+ 187,162,174,118, 75,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 221,197,179,164,102, 53,233,215,199,235,216,198,245,236,227,168,109,
+ 62,255, 0,255,255, 0,255,170,111, 65,171,112, 65,169,109, 61,170,
+ 112, 66,213,184,162,255, 0,255,255, 0,255,183,134, 95,188,141,103,
+ 235,219,205,245,235,226,246,238,230,246,238,230,169,109, 62,255, 0,
+ 255,255, 0,255,202,164,135,192,145,106,197,152,114,168,107, 60,164,
+ 102, 53,168,108, 60,186,139,101,217,187,161,241,228,216,242,230,219,
+ 243,232,221,206,168,137,234,216,200,169,110, 63,255, 0,255,255, 0,
+ 255,255, 0,255,169,111, 65,211,173,140,220,189,157,221,190,161,229,
+ 203,180,233,211,191,238,221,204,240,226,213,231,210,191,178,124, 82,
+ 187,141,104,174,117, 73,165,104, 55,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,169,109, 63,193,146,107,211,176,143,223,194,168,222,
+ 193,168,212,177,147,188,140,102,170,112, 67,224,202,185,255, 0,255,
+ 219,194,174,164,101, 52,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,200,161,132,178,125, 83,168,108, 61,176,120, 77,190,
+ 145,110,225,205,189,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 212,182,159,255, 0,255);
+
+Const
+ stdimg_list_add_16 : Array[0..821] of byte = (
+ 66, 77, 54, 3, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 40, 0, 0,
+ 0, 16, 0, 0, 0, 16, 0, 0, 0, 1, 0, 24, 0, 0, 0, 0, 0,
+ 0, 3, 0, 0,215, 13, 0, 0,215, 13, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,182,132,
+ 93,164,101, 52,164,101, 52,182,132, 93,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,164,101, 52,230,206,
+ 183,230,206,183,164,101, 52,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,164,101, 52,230,206,183,217,173,
+ 134,164,101, 52,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,164,101, 52,230,206,183,217,173,134,164,101,
+ 52,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,182,132, 93,164,101, 52,164,101, 52,
+ 164,101, 52,164,101, 52,217,173,134,217,173,134,164,101, 52,164,101,
+ 52,164,101, 52,164,101, 52,182,132, 93,255,255,255,255,255,255,255,
+ 255,255,255,255,255,164,101, 52,229,204,180,219,183,149,219,182,148,
+ 218,180,146,218,179,144,217,173,134,216,170,131,215,168,127,215,166,
+ 125,224,190,159,164,101, 52,255,255,255,255,255,255,255,255,255,255,
+ 255,255,164,101, 52,232,211,192,231,209,187,231,209,188,230,206,183,
+ 230,206,183,230,206,183,230,206,183,230,205,182,230,204,181,230,204,
+ 182,164,101, 52,255,255,255,255,255,255,255,255,255,255,255,255,182,
+ 132, 93,164,101, 52,164,101, 52,164,101, 52,164,101, 52,230,206,183,
+ 230,206,183,164,101, 52,164,101, 52,164,101, 52,164,101, 52,182,132,
+ 93,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,164,101, 52,230,206,183,230,206,183,
+ 164,101, 52,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,164,101, 52,230,206,183,230,206,183,164,101, 52,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,164,101, 52,230,206,183,230,206,183,164,101, 52,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,182,
+ 132, 93,164,101, 52,164,101, 52,182,132, 93,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255);
+
+Const
stdimg_edit_copy_16 : Array[0..821] of byte = (
66, 77, 54, 3, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 40, 0, 0,
0, 16, 0, 0, 0, 16, 0, 0, 0, 1, 0, 24, 0, 0, 0, 0, 0,
@@ -2127,297 +2674,58 @@ Const
255,255,255,255,255,255);
Const
- stdimg_edit_delete_16 : Array[0..821] of byte = (
- 66, 77, 54, 3, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 40, 0, 0,
- 0, 16, 0, 0, 0, 16, 0, 0, 0, 1, 0, 24, 0, 0, 0, 0, 0,
- 0, 3, 0, 0, 19, 11, 0, 0, 19, 11, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0,255,255,255,186,188,188,145,148,147,173,176,175,255,255,
- 255,255,255,255,144,148,146,158,161,160,163,166,164,255,255,255,255,
- 255,255,219,220,219,151,153,153,189,191,190,255,255,255,255,255,255,
- 255,255,255,141,145,144,250,250,250,151,154,153,169,172,171,159,162,
- 161,150,154,152,238,239,239,170,174,172,155,158,157,152,155,154,139,
- 142,141,255,255,255,172,175,175,255,255,255,255,255,255,255,255,255,
- 186,188,188,142,146,145,246,246,246,153,156,155,171,173,172,143,147,
- 144,224,225,224,178,180,180,211,213,212,152,155,154,236,236,236,160,
- 163,162,212,213,213,255,255,255,255,255,255,255,255,255,255,255,255,
- 141,144,143,221,222,221,142,147,144,201,201,201,138,143,140,206,208,
- 207,164,166,165,200,200,200,124,128,127,227,228,228,146,149,148,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,117,121,120,
- 203,205,204,133,138,135,166,167,166,146,147,147,179,180,179,146,147,
- 146,182,183,182,124,128,127,189,190,189,123,126,125,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,106,110,109,205,206,206,
- 108,111,111,172,174,173,109,112,111,175,177,176,108,111,110,178,180,
- 179,111,115,114,179,180,180,109,113,112,255,255,255,255,255,255,255,
- 255,255,165,118, 87,135, 74, 32,135, 74, 32,135, 74, 32,135, 74, 32,
- 135, 74, 32,135, 74, 32,135, 74, 32,135, 74, 32,135, 74, 32,135, 74,
- 32,135, 74, 32,135, 74, 32,135, 74, 32,135, 74, 32,165,118, 87,135,
- 74, 32,221,187,156,207,159,114,207,159,114,207,159,114,207,159,114,
- 207,159,114,207,159,114,207,159,114,207,159,114,207,159,114,207,159,
- 114,207,159,114,207,159,114,221,187,156,135, 74, 32,135, 74, 32,221,
- 187,156,221,187,156,221,187,156,221,187,156,221,187,156,221,187,156,
- 221,187,156,221,187,156,221,187,156,221,187,156,221,187,156,221,187,
- 156,221,187,156,221,187,156,135, 74, 32,135, 74, 32,221,187,156,202,
- 138, 88,202,138, 88,202,138, 88,202,138, 88,202,138, 88,202,138, 88,
- 202,138, 88,202,138, 88,202,138, 88,202,138, 88,202,138, 88,202,138,
- 88,221,187,156,135, 74, 32,135, 74, 32,221,187,156,134, 82, 44,134,
- 81, 43,134, 81, 43,134, 81, 43,134, 81, 43,134, 81, 43,134, 82, 44,
- 134, 82, 44,134, 82, 44,134, 82, 44,134, 82, 44,134, 82, 44,221,187,
- 156,135, 74, 32,135, 74, 32,221,187,156,106, 91, 78,201,201,201,156,
- 156,156,156,156,156,156,156,156,155,155,155,155,155,155,155,155,155,
- 155,155,155,155,155,155,155,155,155,106, 91, 78,221,187,156,135, 74,
- 32,135, 74, 32,221,187,156,119,124,122,217,217,217,189,189,189,189,
- 189,189,189,189,189,189,189,189,188,188,188,188,188,188,188,188,188,
- 191,191,191,192,192,192,119,124,122,221,187,156,135, 74, 32,195,165,
- 144,135, 74, 32,133,138,136,231,231,231,215,215,215,214,214,214,214,
- 214,214,214,214,214,214,214,214,213,213,213,213,213,213,218,218,218,
- 220,220,220,133,138,136,135, 74, 32,195,165,144,255,255,255,255,255,
- 255,133,138,136,241,241,241,235,235,235,235,235,235,235,235,235,234,
- 234,234,234,234,234,234,234,234,234,234,234,234,234,234,233,233,233,
- 133,138,136,255,255,255,255,255,255,255,255,255,255,255,255,171,174,
- 173,133,138,136,133,138,136,133,138,136,133,138,136,133,138,136,133,
- 138,136,133,138,136,133,138,136,133,138,136,133,138,136,171,174,173,
- 255,255,255,255,255,255);
-
-Const
- stdimg_search_16 : Array[0..821] of byte = (
+ stdimg_about_16 : Array[0..821] of byte = (
66, 77, 54, 3, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 40, 0, 0,
0, 16, 0, 0, 0, 16, 0, 0, 0, 1, 0, 24, 0, 0, 0, 0, 0,
- 0, 3, 0, 0, 19, 11, 0, 0, 19, 11, 0, 0, 0, 0, 0, 0, 0,
+ 0, 3, 0, 0, 18, 11, 0, 0, 18, 11, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
- 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
- 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
- 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
- 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
- 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255,225,188,172,225,188,172,225,188,172,225,188,172,225,188,172,225,
+ 188,172,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,225,188,172,228,195,181,241,224,
+ 216,250,243,240,255,255,255,254,253,252,250,243,240,241,224,216,228,
+ 195,181,225,188,172,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,225,188,172,237,214,205,254,253,252,247,243,239,218,196,
+ 179,202,169,144,204,173,148,225,204,189,249,246,243,254,253,252,237,
+ 214,205,225,188,172,255, 0,255,255, 0,255,255, 0,255,225,188,172,
+ 237,214,205,255,255,255,223,205,191,181,138,105,182,139,107,186,144,
+ 113,189,150,119,194,155,124,200,163,135,234,220,209,255,255,255,237,
+ 214,205,225,188,172,255, 0,255,255, 0,255,228,195,181,254,253,252,
+ 220,201,187,170,123, 87,174,128, 94,205,177,155,251,249,247,255,255,
+ 255,217,193,175,194,155,125,198,161,132,234,220,209,254,253,252,228,
+ 195,181,255, 0,255,225,188,172,241,224,216,245,239,235,165,116, 81,
+ 166,118, 81,171,123, 88,174,128, 93,243,236,231,255,255,255,186,144,
+ 113,190,149,119,194,155,125,200,164,135,249,246,243,241,224,216,225,
+ 188,172,225,188,172,250,243,240,202,173,153,158,106, 70,162,111, 75,
+ 166,117, 81,170,123, 88,243,236,230,255,255,255,182,139,106,186,144,
+ 112,190,149,118,193,155,125,225,205,189,250,243,240,225,188,172,225,
+ 188,172,254,253,252,169,125, 93,154,101, 63,159,107, 69,162,111, 76,
+ 166,117, 82,242,235,229,255,255,255,178,134,100,182,139,106,186,144,
+ 112,190,150,119,205,173,148,254,253,252,225,188,172,225,188,172,254,
+ 253,252,166,121, 87,151, 96, 57,154,101, 63,158,106, 69,162,112, 75,
+ 241,234,229,255,255,255,175,128, 94,178,134,101,182,139,106,186,145,
+ 112,202,169,144,254,253,252,225,188,172,225,188,172,250,243,240,195,
+ 164,143,146, 91, 50,151, 95, 57,155,101, 63,189,153,127,234,222,214,
+ 254,254,254,171,123, 88,174,128, 94,178,133,100,182,138,106,218,196,
+ 179,250,243,240,225,188,172,225,188,172,241,224,216,243,236,232,147,
+ 90, 52,147, 90, 50,151, 96, 57,155,101, 63,158,107, 69,162,111, 75,
+ 166,118, 82,171,122, 88,174,128, 94,181,138,106,247,243,239,241,224,
+ 216,225,188,172,255, 0,255,228,195,181,254,253,252,210,186,170,143,
+ 85, 44,147, 90, 50,151, 96, 57,215,194,179,232,220,211,163,112, 76,
+ 166,118, 81,171,123, 88,223,205,192,254,253,252,228,195,181,255, 0,
+ 255,255, 0,255,225,188,172,237,214,205,255,255,255,210,186,170,147,
+ 91, 52,147, 90, 51,220,201,187,237,228,221,159,107, 69,166,117, 81,
+ 220,201,187,255,255,255,237,214,205,225,188,172,255, 0,255,255, 0,
+ 255,255, 0,255,225,188,172,237,214,205,254,253,252,243,236,232,195,
+ 164,142,166,120, 88,169,125, 93,202,173,153,245,239,235,254,253,252,
+ 237,214,205,225,188,172,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,225,188,172,228,195,181,241,224,216,250,243,240,255,
+ 255,255,254,253,252,250,243,240,241,224,216,228,195,181,225,188,172,
255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
- 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,100,148,186, 34,
- 103,157,129,168,198,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
- 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
- 255,255, 0,255,255, 0,255,111,156,194, 85,141,188,137,181,221, 24,
- 95,151,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
- 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
- 255,123,164,202,100,151,197,157,193,228,102,153,199, 49,113,165,255,
- 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,233,207,186,
- 219,178,146,211,166,128,208,161,124,210,166,133,174,161,153,117,162,
- 204,171,203,232,118,164,206, 64,123,175,255, 0,255,255, 0,255,255,
- 0,255,255, 0,255,255, 0,255,232,202,176,232,201,174,245,225,205,
- 247,229,211,247,229,209,243,221,200,223,186,156,199,168,145,134,174,
- 213, 80,135,187,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
- 0,255,241,219,200,237,208,183,248,232,217,245,222,200,243,216,189,
- 243,214,187,244,219,194,247,228,210,223,187,157,160,151,149,255, 0,
- 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,238,
- 206,178,247,231,215,246,225,204,244,219,194,244,218,192,243,216,189,
- 243,215,187,244,219,194,243,222,201,210,168,135,255, 0,255,255, 0,
- 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,240,206,175,249,
- 236,223,245,223,200,245,221,198,244,220,195,244,218,193,243,217,190,
- 243,215,189,248,230,211,211,166,128,255, 0,255,255, 0,255,255, 0,
- 255,255, 0,255,255, 0,255,255, 0,255,244,211,181,249,237,225,246,
- 225,204,245,223,201,245,222,199,244,220,196,244,219,194,244,218,192,
- 248,231,214,215,171,135,255, 0,255,255, 0,255,255, 0,255,255, 0,
- 255,255, 0,255,255, 0,255,248,219,193,249,235,222,247,231,214,246,
- 225,204,245,224,202,245,222,200,245,221,197,246,225,203,245,226,208,
- 223,185,153,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
- 255,255, 0,255,252,234,216,248,226,204,250,238,227,247,231,214,246,
- 226,206,246,225,203,246,227,208,249,234,221,236,207,181,236,212,191,
- 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
- 255,255, 0,255,251,228,206,249,226,205,250,236,222,249,238,226,249,
- 237,226,248,233,218,240,213,189,237,208,183,255, 0,255,255, 0,255,
- 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
- 255,255, 0,255,252,234,217,250,221,194,246,214,185,244,211,181,243,
- 212,184,245,224,205,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
- 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
- 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
- 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255,255, 0,255,255, 0,255,225,188,172,225,188,172,225,188,172,225,
+ 188,172,225,188,172,225,188,172,255, 0,255,255, 0,255,255, 0,255,
255, 0,255,255, 0,255);
Const
- stdimg_dialog_warning_32 : Array[0..3125] of byte = (
- 66, 77, 54, 12, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 40, 0, 0,
- 0, 32, 0, 0, 0, 32, 0, 0, 0, 1, 0, 24, 0, 0, 0, 0, 0,
- 0, 12, 0, 0, 19, 11, 0, 0, 19, 11, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,252,252,252,244,244,244,237,237,237,235,235,
- 235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,
- 235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,
- 235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,
- 235,235,235,235,237,237,237,242,242,242,248,248,248,254,254,254,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,239,239,239,
- 222,222,222,198,198,207,190,190,201,186,186,197,186,186,197,186,186,
- 197,186,186,197,186,186,197,186,186,197,186,186,197,186,186,197,186,
- 186,197,186,186,197,186,186,197,186,186,197,186,186,197,186,186,197,
- 186,186,197,186,186,197,186,186,197,186,186,197,186,186,197,190,190,
- 201,189,189,200,197,197,206,223,223,223,246,246,246,255,255,255,255,
- 255,255,255,255,255,244,244,244,178,178,210, 22, 22,165, 0, 0,159,
- 0, 0,159, 0, 0,159, 0, 0,159, 0, 0,159, 0, 0,159, 0, 0,
- 159, 0, 0,159, 0, 0,159, 0, 0,159, 0, 0,159, 0, 0,159, 0,
- 0,159, 0, 0,159, 0, 0,159, 0, 0,159, 0, 0,159, 0, 0,159,
- 0, 0,159, 0, 0,159, 0, 0,159, 0, 0,159, 0, 0,159, 0, 0,
- 159, 21, 21,165,173,173,209,250,250,250,255,255,255,255,255,255,243,
- 243,243, 39, 39,171, 61, 61,196,112,112,224,117,117,226,116,116,226,
- 113,113,225,111,111,225,108,108,224,105,105,223,102,102,223,100,100,
- 222, 97, 97,222, 94, 94,221, 92, 92,220, 89, 89,220, 86, 86,219, 83,
- 83,219, 81, 81,218, 78, 78,218, 75, 75,217, 72, 72,216, 69, 69,216,
- 67, 67,215, 64, 64,215, 62, 62,214, 54, 54,212, 28, 28,188, 20, 20,
- 166,246,246,246,255,255,255,255,255,255,253,253,253, 15, 15,166,121,
- 121,221, 20, 20,208, 0, 0,204, 0, 0,204, 0, 0,204, 0, 0,204,
- 0, 0,204, 0, 0,204, 0, 0,204, 0, 0,204, 0, 0,204, 0, 0,
- 204, 0, 0,204, 0, 0,204, 0, 0,204, 0, 0,204, 0, 0,204, 0,
- 0,204, 0, 0,204, 0, 0,204, 0, 0,204, 0, 0,204, 0, 0,204,
- 0, 0,204, 10, 10,206, 56, 56,207, 2, 2,160,247,247,251,255,255,
- 255,255,255,255,255,255,255, 90, 90,194, 89, 89,200, 58, 58,216, 0,
- 0,204,163,163,219,210,210,224,210,210,224,211,211,225,212,212,226,
- 212,212,226,213,213,227,214,214,228,215,215,229,216,216,230,216,216,
- 230,217,217,231,217,217,231,218,218,232,218,218,232,219,219,233,220,
- 220,234,221,221,235,222,222,236,193,193,231, 0, 0,204, 27, 27,209,
- 44, 44,192, 53, 53,181,255,255,255,255,255,255,255,255,255,255,255,
- 255,221,221,242, 25, 25,168,117,117,221, 8, 8,206, 80, 80,211,224,
- 224,224,225,225,225,225,225,225,226,226,226,227,227,227,227,227,227,
- 228,228,228,229,229,229,230,230,230,230,230,230,231,231,231,232,232,
- 232,233,233,233,234,234,234,234,234,234,235,235,235,236,236,236,237,
- 237,237,105,105,219, 3, 3,205, 59, 59,211, 14, 14,166,193,193,232,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,109,109,
- 201, 85, 85,197, 68, 68,218, 2, 2,204,179,179,219,224,224,224,225,
- 225,225,225,225,225,226,226,226,227,227,227,227,227,227,228,228,228,
- 60, 60, 60, 55, 55, 55,230,230,230,231,231,231,232,232,232,233,233,
- 233,234,234,234,234,234,234,235,235,235,205,205,231, 7, 7,205, 36,
- 36,211, 47, 47,188, 70, 70,186,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,234,234,247, 23, 23,169,121,121,
- 220, 14, 14,207, 59, 59,209,223,223,223,224,224,224,224,224,224,225,
- 225,225,226,226,226,226,226,226,227,227,227, 55, 55, 55, 53, 53, 53,
- 230,230,230,230,230,230,231,231,231,232,232,232,233,233,233,234,234,
- 234,234,234,234, 82, 82,215, 8, 8,206, 67, 67,210, 10, 10,163,212,
- 212,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,129,129,208, 74, 74,190, 81, 81,220, 0, 0,
- 204,162,162,218,223,223,223,224,224,224,224,224,224,225,225,225,226,
- 226,226,226,226,226,215,215,215,215,215,215,229,229,229,230,230,230,
- 230,230,230,231,231,231,232,232,232,233,233,233,186,186,227, 1, 1,
- 204, 47, 47,213, 46, 46,185, 96, 96,196,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 244,244,251, 25, 25,169,121,121,218, 23, 23,209, 42, 42,208,221,221,
- 223,223,223,223,224,224,224,224,224,224,225,225,225,226,226,226, 37,
- 37, 37, 37, 37, 37,228,228,228,229,229,229,229,229,229,230,230,230,
- 231,231,231,232,232,232, 59, 59,211, 14, 14,207, 73, 73,209, 11, 11,
- 164,228,228,245,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,151,151,216,
- 63, 63,185, 94, 94,222, 0, 0,204,141,141,215,223,223,223,223,223,
- 223,224,224,224,224,224,224,225,225,225, 27, 27, 27, 27, 27, 27,227,
- 227,227,228,228,228,229,229,229,229,229,229,230,230,230,164,164,223,
- 0, 0,204, 60, 60,215, 41, 41,179,120,120,205,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,251,251,253, 35, 35,174,116,116,215,
- 34, 34,211, 27, 27,206,215,215,221,223,223,223,223,223,223,224,224,
- 224,224,224,224, 13, 13, 13, 13, 13, 13,226,226,226,227,227,227,228,
- 228,228,229,229,229,226,226,228, 40, 40,209, 24, 24,209, 75, 75,206,
- 16, 16,167,241,241,250,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,172,172,224, 49, 49,178,106,106,223, 1, 1,204,
- 121,121,213,222,222,222,222,222,222,223,223,223,224,224,224, 3, 3,
- 3, 3, 3, 3,225,225,225,226,226,226,227,227,227,228,228,228,140,
- 140,218, 1, 1,204, 75, 75,218, 34, 34,174,144,144,213,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,254,
- 254,255, 49, 49,179,109,109,211, 47, 47,213, 16, 16,206,206,206,220,
- 222,222,222,222,222,222,215,215,215, 0, 0, 0, 0, 0, 0,217,217,
- 217,225,225,225,226,226,226,218,218,226, 25, 25,207, 36, 36,211, 74,
- 74,203, 27, 27,171,249,249,253,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,193,193,232, 36,
- 36,173,117,117,224, 4, 4,205,102,102,212,221,221,221,222,222,222,
- 204,204,204, 0, 0, 0, 0, 0, 0,206,206,206,225,225,225,225,225,
- 225,118,118,216, 4, 4,205, 87, 87,219, 27, 27,170,167,167,222,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255, 69, 69,186,100,100,205, 59,
- 59,216, 7, 7,205,195,195,219,221,221,221,193,193,193, 0, 0, 0,
- 0, 0, 0,195,195,195,224,224,224,206,206,223, 12, 12,205, 49, 49,
- 214, 70, 70,199, 45, 45,178,254,254,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,211,211,238, 25, 25,170,124,124,224, 8, 8,206, 82,
- 82,210,221,221,221,218,218,218,207,207,207,207,207,207,220,220,220,
- 223,223,223, 97, 97,213, 9, 9,206, 98, 98,219, 17, 17,166,189,189,
- 230,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255, 92, 92,194, 89, 89,199, 72, 72,218, 2, 2,204,180,180,217,221,
- 221,221,221,221,221,222,222,222,222,222,222,192,192,220, 4, 4,204,
- 64, 64,217, 65, 65,194, 68, 68,186,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,226,226,244, 20, 20,
- 168,128,128,224, 15, 15,207, 63, 63,209,220,220,220,221,221,221,221,
- 221,221,222,222,222, 74, 74,210, 17, 17,207,104,104,219, 11, 11,163,
- 210,210,238,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,114,114,202, 79, 79,193, 85, 85,
- 220, 0, 0,204,162,162,215,220,220,220,220,220,220,173,173,217, 1,
- 1,204, 80, 80,220, 59, 59,189, 92, 92,194,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,238,238,249, 20, 20,167,128,128,222, 25, 25,209, 44, 44,
- 207,218,218,219,220,220,220, 53, 53,208, 28, 28,210,106,106,217, 10,
- 10,164,226,226,244,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 137,137,211, 67, 67,187, 99, 99,223, 0, 0,204,143,143,214,152,152,
- 214, 1, 1,204, 97, 97,223, 51, 51,184,118,118,204,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,246,246,252, 25, 25,169,
- 122,122,218, 36, 36,211, 21, 21,206, 23, 23,205, 42, 42,212,104,104,
- 215, 14, 14,165,239,239,249,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,158,158,218, 53, 53,181,113,113,225,
- 1, 1,204, 3, 3,205,113,113,225, 41, 41,177,142,142,212,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,252,252,254, 37, 37,174,111,111,213, 66, 66,217, 70, 70,218,
- 96, 96,210, 25, 25,170,248,248,252,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,180,
- 180,227, 22, 22,168,109,109,218,106,106,218, 20, 20,169,165,165,221,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,140,140,211, 12,
- 12,165, 8, 8,163,124,124,206,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,252,252,254,251,251,253,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255);
-
-Const
stdimg_hidden : Array[0..821] of byte = (
66, 77, 54, 3, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 40, 0, 0,
0, 15, 0, 0, 0, 16, 0, 0, 0, 1, 0, 24, 0, 0, 0, 0, 0,
@@ -2470,277 +2778,240 @@ Const
255,255,255, 0, 0, 0);
Const
- stdimg_document : Array[0..1061] of byte = (
- 66, 77, 38, 4, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 40, 0, 0,
- 0, 18, 0, 0, 0, 18, 0, 0, 0, 1, 0, 24, 0, 0, 0, 0, 0,
- 240, 3, 0, 0,235, 10, 0, 0,235, 10, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0,255, 0,255,255, 0,255,255, 0,255,255, 0,255, 98, 98,
- 98, 91, 91, 91, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90,
- 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 97, 97, 97,
- 255, 0,255,255, 0,255, 0, 0,255, 0,255,255, 0,255,255, 0,255,
- 88, 88, 88, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
- 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
- 48, 48, 90, 90, 90,255, 0,255,255, 0,255, 0, 0,255, 0,255,255,
- 0,255,255, 0,255, 88, 88, 88,182,193,198,182,193,198,172,189,196,
- 163,184,195,154,179,194,145,175,192,136,170,191,127,165,190,118,160,
- 189,115,158,188, 48, 48, 48, 90, 90, 90,255, 0,255,255, 0,255, 0,
- 0,255, 0,255,255, 0,255,255, 0,255, 88, 88, 88,222,222,222,225,
- 237,244,216,232,242,208,228,240,200,222,238,191,218,236,184,214,233,
- 176,209,231,167,204,229,120,161,188, 48, 48, 48, 90, 90, 90,255, 0,
- 255,255, 0,255, 0, 0,255, 0,255,255, 0,255,255, 0,255, 88, 88,
- 88,222,222,222,233,241,247,137,144,148,132,141,147,127,139,146,122,
- 136,145,117,133,143,112,130,142,176,209,231,127,163,188, 48, 48, 48,
- 90, 90, 90,255, 0,255,255, 0,255, 0, 0,255, 0,255,255, 0,255,
- 255, 0,255, 88, 88, 88,222,222,222,242,246,250,234,242,248,226,238,
- 245,218,233,242,210,228,240,201,224,238,193,220,236,186,214,233,133,
- 166,188, 48, 48, 48, 90, 90, 90,255, 0,255,255, 0,255, 0, 0,255,
- 0,255,255, 0,255,255, 0,255, 88, 88, 88,222,222,222,251,252,252,
- 148,151,152,143,148,151,138,145,149,133,142,148,128,139,146,123,136,
- 145,194,219,236,138,168,188, 48, 48, 48, 90, 90, 90,255, 0,255,255,
- 0,255, 0, 0,255, 0,255,255, 0,255,255, 0,255, 88, 88, 88,222,
- 222,222,255,255,255,252,253,253,244,248,250,235,243,248,228,238,245,
- 220,234,243,212,230,241,202,223,236,144,171,188, 48, 48, 48, 90, 90,
- 90,255, 0,255,255, 0,255, 0, 0,255, 0,255,255, 0,255,255, 0,
- 255, 88, 88, 88,222,222,222,255,255,255,155,155,155,154,154,154,148,
- 151,152,143,148,151,139,145,149,134,143,148,212,226,236,151,174,188,
- 48, 48, 48, 90, 90, 90,255, 0,255,255, 0,255, 0, 0,255, 0,255,
- 255, 0,255,255, 0,255, 88, 88, 88,223,223,223,255,255,255,255,255,
- 255,255,255,255,254,254,254,245,248,251,237,244,248,227,237,243,220,
- 231,238,151,174,188, 48, 48, 48, 90, 90, 90,255, 0,255,255, 0,255,
- 0, 0,255, 0,255,255, 0,255,255, 0,255, 88, 88, 88,222,222,222,
- 255,255,255,155,155,155,155,155,155,155,155,155,155,155,155,246,249,
- 251,236,240,244,217,224,231,175,182,190, 48, 48, 48, 90, 90, 90,255,
- 0,255,255, 0,255, 0, 0,255, 0,255,255, 0,255,255, 0,255, 88,
- 88, 88,222,222,222,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,245,245,246,222,224,226,177,183,188,132,137,143, 48, 48,
- 48, 90, 90, 90,255, 0,255,255, 0,255, 0, 0,255, 0,255,255, 0,
- 255,255, 0,255, 88, 88, 88,222,222,222,255,255,255,155,155,155,155,
- 155,155,155,155,155,255,255,255,137,137,137,112,112,112,107,107,107,
- 66, 66, 66, 48, 48, 48, 96, 96, 96,255, 0,255,255, 0,255, 0, 0,
- 255, 0,255,255, 0,255,255, 0,255, 88, 88, 88,222,222,222,255,255,
- 255,255,255,255,255,255,255,255,255,255,252,252,252,112,112,112,206,
- 206,206,255,255,255,153,153,153, 48, 48, 48,135,135,135,255, 0,255,
- 255, 0,255, 0, 0,255, 0,255,255, 0,255,255, 0,255, 88, 88, 88,
- 222,222,222,255,255,255,255,255,255,255,255,255,255,255,255,234,234,
- 234,109,109,109,255,255,255,153,153,153, 88, 88, 88,135,135,135,255,
- 0,255,255, 0,255,255, 0,255, 0, 0,255, 0,255,255, 0,255,255,
- 0,255, 88, 88, 88,222,222,222,222,222,222,222,222,222,222,222,222,
- 222,222,222,177,183,188, 88, 88, 88,153,153,153, 88, 88, 88,135,135,
- 135,255, 0,255,255, 0,255,255, 0,255,255, 0,255, 0, 0,255, 0,
- 255,255, 0,255,255, 0,255, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88,
- 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88,
- 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
- 255, 0, 0,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
- 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
- 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
- 255, 0,255,255, 0,255, 0, 0);
-
-Const
- stdimg_menu_preferences_16 : Array[0..821] of byte = (
+ stdimg_menu_saveas_16 : Array[0..821] of byte = (
66, 77, 54, 3, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 40, 0, 0,
0, 16, 0, 0, 0, 16, 0, 0, 0, 1, 0, 24, 0, 0, 0, 0, 0,
0, 3, 0, 0, 19, 11, 0, 0, 19, 11, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0,215,194,180,135, 74, 32,135, 74, 32,135, 74, 32,223,207,
- 196,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
- 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
- 135, 74, 32,190,165,146,184,156,134,184,156,134,135, 74, 32,223,207,
- 196,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,193,
- 196,195,154,158,157,193,196,195,255, 0,255,255, 0,255,135, 74, 32,
- 204,187,173,167,145,125,181,149,122,174,139,114,135, 74, 32,223,207,
- 196,255, 0,255,255, 0,255,255, 0,255,219,220,220,133,138,136,158,
- 161,160,133,138,136,255, 0,255,255, 0,255,135, 74, 32,204,187,173,
- 164,141,120,162,138,116,180,149,122,179,147,124,135, 74, 32,255, 0,
- 255,255, 0,255,219,220,220,133,138,136,210,211,212,194,195,196,133,
- 138,136,255, 0,255,255, 0,255,232,221,213,135, 74, 32,212,200,189,
- 164,141,120,164,141,120,190,165,146,135, 74, 32,255, 0,255,219,220,
- 220,133,138,136,226,227,228,194,196,198,133,138,136,193,196,195,255,
- 0,255,255, 0,255,255, 0,255,243,237,233,135, 74, 32,204,187,173,
- 204,187,173,179,147,124,135, 74, 32,193,196,195,133,138,136,211,211,
- 212,189,190,191,133,138,136,219,220,220,255, 0,255,255, 0,255,255,
- 0,255,255, 0,255,255, 0,255,243,237,233,135, 74, 32,135, 74, 32,
- 135, 74, 32,133,131,125,170,173,173,200,201,202,189,190,191,133,138,
- 136,219,220,220,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
- 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
- 181,183,184,133,138,136,183,184,185,133,138,136,219,220,220,255, 0,
- 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,219,
- 220,220,133,138,136,133,138,136,133,138,136,133,138,136,208,209,210,
- 163,164,164,133,138,136,193,196,195,255, 0,255,255, 0,255,255, 0,
- 255,255, 0,255,255, 0,255,255, 0,255,219,220,220,133,138,136,243,
- 243,243,239,240,240,237,238,238,234,236,236,182,185,186,133,138,136,
- 219,220,220,133,138,136,219,220,220,255, 0,255,255, 0,255,255, 0,
- 255,255, 0,255,255, 0,255,133,138,136,245,246,246,169,172,171,133,
- 138,136,247,247,247,226,227,229,170,173,173,245,246,246,255, 0,255,
- 219,220,220,133,138,136,219,220,220,255, 0,255,255, 0,255,255, 0,
- 255,255, 0,255,219,220,220,133,138,136,255, 0,255,219,220,220,133,
- 138,136,250,250,250,133,138,136,255, 0,255,255, 0,255,255, 0,255,
- 219,220,220,133,138,136,135,140,138,179,179,179,255, 0,255,255, 0,
- 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,133,138,136,238,
- 240,240,133,138,136,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
- 133,138,136,240,240,240,133,138,136,179,179,179,255, 0,255,255, 0,
- 255,255, 0,255,255, 0,255,133,138,136,233,235,236,133,138,136,219,
- 220,220,255, 0,255,255, 0,255,255, 0,255,255, 0,255,179,179,179,
- 133,138,136,238,239,239,133,138,136,255, 0,255,255, 0,255,255, 0,
- 255,255, 0,255,219,220,220,133,138,136,219,220,220,255, 0,255,255,
- 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,179,179,179,
- 133,138,136,219,220,220,255, 0,255,255, 0,255,255, 0,255,255, 0,
- 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
- 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
- 255, 0,255,255, 0,255);
+ 0, 0, 0,216,171,142,205,149,112,189,115, 66,183,104, 53,181,104,
+ 53,180,103, 52,178,102, 52,176,101, 51,174,100, 51,172, 99, 50,170,
+ 98, 50,169, 97, 50,168, 96, 49,167, 97, 50,171,105, 60,188,134, 97,
+ 195,125, 79,235,198,173,234,197,173,254,251,248,254,251,248,254,251,
+ 248,254,251,248,254,251,248,254,251,248,254,251,248,254,251,248,254,
+ 251,248,254,251,248,200,154,124,199,152,121,173,107, 64,186,108, 56,
+ 237,202,179,224,162,122,254,250,247, 98,192,136, 98,192,136, 98,192,
+ 136, 98,192,136, 98,192,136, 98,192,136, 98,192,136, 98,192,136,253,
+ 249,246,202,141,101,201,155,124,167, 97, 50,187,108, 56,238,204,182,
+ 225,162,122,254,250,247,191,220,194,191,220,194,191,220,194,191,220,
+ 194,191,220,194,191,220,194,191,220,194,191,220,194,253,249,246,205,
+ 144,104,204,158,129,168, 97, 50,187,107, 56,239,206,184,225,162,121,
+ 254,250,247, 98,192,136, 98,192,136,206,247,255, 41, 41, 41, 82, 82,
+ 82,206,247,255, 98,192,136, 98,192,136,253,249,246,207,147,106,206,
+ 163,132,170, 97, 50,186,106, 54,239,208,187,226,162,122,254,251,248,
+ 206,247,255,206,247,255,206,247,255,206,247,255,206,247,255,206,247,
+ 255,206,247,255,206,247,255,254,251,248,211,150,109,210,167,138,171,
+ 98, 50,187,106, 54,240,210,190,226,163,122,226,163,122,206,247,255,
+ 206,247,255,206,247,255, 41, 41, 41, 82, 82, 82,206,247,255,206,247,
+ 255,206,247,255,216,153,113,214,153,112,213,171,142,173, 99, 51,187,
+ 106, 54,242,213,194,227,163,122,208,242,250,206,247,255,206,247,255,
+ 206,247,255, 82, 82, 82, 41, 41, 41,132,156,165,206,247,255,206,247,
+ 255,210,247,254,217,155,115,218,176,149,175,100, 51,187,106, 54,242,
+ 216,197,227,164,123,181,238,254,181,239,255,181,239,255,181,239,255,
+ 181,239,255, 82, 82, 82, 41, 41, 41, 82, 82, 82,181,239,255,181,239,
+ 254,220,157,116,221,181,154,177,101, 52,187,107, 54,244,217,199,230,
+ 166,125,186,236,250,181,239,255, 41, 41, 41, 82, 82, 82,181,239,255,
+ 181,239,255, 41, 41, 41, 41, 41, 41,181,239,255,186,239,253,218,156,
+ 116,225,186,159,179,102, 52,187,108, 55,244,220,201,231,167,125,201,
+ 230,240,181,239,255, 41, 41, 41, 41, 41, 41,181,239,255,132,156,165,
+ 41, 41, 41, 41, 41, 41,181,239,255,201,239,249,222,160,119,228,190,
+ 164,180,103, 52,189,110, 58,245,221,204,231,168,126,250,240,232,181,
+ 239,255,132,156,165, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41,
+ 132,156,165,181,239,255,247,229,217,224,162,120,231,194,169,182,104,
+ 53,192,116, 66,246,223,208,232,168,126,252,246,241,198,242,246,148,
+ 247,255,148,247,255,148,247,255,148,247,255,148,247,255,148,247,255,
+ 184,228,232,247,230,219,225,163,122,239,213,195,183,106, 54,198,130,
+ 85,246,223,209,233,170,128,254,250,246,253,250,246,218,241,243,175,
+ 244,250,153,246,254,153,246,254,175,244,250,218,241,243,249,236,226,
+ 248,231,219,238,208,186,236,208,189,189,116, 67,214,165,133,246,224,
+ 209,247,224,209,254,251,248,254,251,247,253,249,246,252,245,240,250,
+ 240,234,251,242,237,253,249,246,253,250,247,251,241,235,248,233,223,
+ 236,209,190,205,146,106,226,197,177,225,189,166,217,171,141,201,137,
+ 94,192,117, 67,189,110, 58,187,108, 55,187,107, 54,187,106, 54,187,
+ 106, 54,188,108, 57,189,110, 59,187,109, 58,191,116, 68,201,141,101,
+ 231,206,188,255,255,255);
Const
- stdimg_choice_no_16 : Array[0..821] of byte = (
- 66, 77, 54, 3, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 40, 0, 0,
- 0, 16, 0, 0, 0, 16, 0, 0, 0, 1, 0, 24, 0, 0, 0, 0, 0,
- 0, 3, 0, 0, 19, 11, 0, 0, 19, 11, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0,255, 0,255,255, 0,255, 98, 98,162,164,164,178,255, 0,
- 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
- 0,255,255, 0,255,152,152,171,101,101,160,255, 0,255,255, 0,255,
- 255, 0,255, 48, 48,162, 55, 55,241, 19, 19,202,152,152,172,255, 0,
- 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,135,
- 135,164, 17, 17,205, 48, 48,234, 61, 61,154,255, 0,255,255, 0,255,
- 8, 8,224, 72, 72,245, 76, 76,240, 5, 5,200,135,135,163,255, 0,
- 255,255, 0,255,255, 0,255,255, 0,255,116,116,157, 5, 5,205, 90,
- 90,239, 90, 90,244, 9, 9,217,255, 0,255,255, 0,255, 34, 34,254,
- 55, 55,255, 89, 89,255, 74, 74,237, 5, 5,199,119,119,156,255, 0,
- 255,255, 0,255, 98, 98,152, 8, 8,206, 90, 90,237,115,115,255, 85,
- 85,255, 54, 54,253,255, 0,255,255, 0,255, 29, 29,255, 43, 43,255,
- 57, 57,255, 86, 86,255, 69, 69,235, 5, 5,196,102,102,148, 85, 85,
- 147, 9, 9,203, 84, 84,237,106,106,255, 80, 80,255, 65, 65,255, 52,
- 52,255,255, 0,255,255, 0,255,255, 0,255, 30, 30,255, 43, 43,255,
- 53, 53,255, 74, 74,255, 55, 55,232, 1, 1,187, 6, 6,192, 68, 68,
- 237, 88, 88,255, 71, 71,255, 62, 62,255, 54, 54,249,255, 0,255,255,
- 0,255,255, 0,255,255, 0,255,255, 0,255, 31, 31,251, 47, 47,255,
- 60, 60,255, 78, 78,255, 49, 49,232, 55, 55,237, 75, 75,255, 56, 56,
- 255, 50, 50,255, 55, 55,241,255, 0,255,255, 0,255,255, 0,255,255,
- 0,255,255, 0,255,255, 0,255,255, 0,255, 77, 77,238, 97, 97,255,
- 96, 96,255, 96, 96,255, 98, 98,255, 98, 98,255, 91, 91,255, 73, 73,
- 227,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
- 0,255,255, 0,255,255, 0,255, 43, 43,156, 61, 61,244, 99, 99,255,
- 99, 99,255,100,100,255,100,100,255, 54, 54,237, 75, 75,146,255, 0,
- 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
- 0,255, 47, 47,123, 0, 0,166, 49, 49,242,107,107,255,106,106,255,
- 106,106,255,105,105,255, 33, 33,230, 0, 0,152, 82, 82,127,255, 0,
- 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255, 43, 43,115, 0,
- 0,164, 55, 55,243,121,121,255,120,120,255,121,121,255,121,121,255,
- 120,120,255,116,116,255, 38, 38,229, 0, 0,146, 82, 82,123,255, 0,
- 255,255, 0,255,255, 0,255, 45, 45,112, 0, 0,156, 66, 66,242,138,
- 138,255,137,137,255,136,136,255,102,102,209,103,103,224,141,141,255,
- 136,136,255,132,132,255, 42, 42,227, 0, 0,139, 91, 91,128,255, 0,
- 255,255, 0,255, 0, 0,156, 73, 73,242,155,155,255,153,153,255,153,
- 153,255,115,115,207,255, 0,255,255, 0,255,110,110,228,158,158,255,
- 153,153,255,148,148,255, 47, 47,229, 13, 13,130,255, 0,255,255, 0,
- 255, 85, 85,254,174,174,255,169,169,255,168,168,255,119,119,205,255,
- 0,255,255, 0,255,255, 0,255,255, 0,255,118,118,228,175,175,255,
- 169,169,255,169,169,255, 60, 60,222,255, 0,255,255, 0,255,127,127,
- 208,187,187,255,187,187,255,122,122,207,255, 0,255,255, 0,255,255,
- 0,255,255, 0,255,255, 0,255,255, 0,255,126,126,228,200,200,255,
- 164,164,255,152,152,199,255, 0,255,255, 0,255,255, 0,255,126,126,
- 210,127,127,214,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
- 0,255,255, 0,255,255, 0,255,255, 0,255,121,121,231,154,154,197,
- 255, 0,255,255, 0,255);
+ stdimg_link : Array[0..449] of byte = (
+ 66, 77,194, 1, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 40, 0, 0,
+ 0, 11, 0, 0, 0, 11, 0, 0, 0, 1, 0, 24, 0, 0, 0, 0, 0,
+ 140, 1, 0, 0, 18, 11, 0, 0, 18, 11, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,128,128,128,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255, 0, 0, 0, 0, 0, 0,128,128,128,255,255,255,255,255,255,255,
+ 255,255, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255, 0, 0, 0, 0, 0, 0,128,128,128,255,255,255,255,255,
+ 255, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255, 0, 0, 0, 0, 0, 0,128,128,128,255,255,255,
+ 255,255,255, 0, 0, 0, 0, 0, 0,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255, 0, 0, 0, 0, 0, 0,128,128,128,255,
+ 255,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,
+ 0, 0, 0,255,255,255,255,255,255, 0, 0, 0, 0, 0, 0,128,128,
+ 128,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,255,255,255,255,255,255, 0, 0, 0, 0, 0, 0,
+ 128,128,128,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,255, 0, 0, 0, 0,
+ 0, 0,128,128,128,255,255,255,255,255,255,255,255,255, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,255, 0, 0,
+ 0, 0, 0, 0,128,128,128,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 0, 0, 0, 0, 0, 0,128,128,128,128,128,128,128,128,128,128,128,
+ 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
+ 128,128, 0, 0, 0, 0, 0, 0);
Const
- stdimg_edit_cut_16 : Array[0..821] of byte = (
- 66, 77, 54, 3, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 40, 0, 0,
- 0, 16, 0, 0, 0, 16, 0, 0, 0, 1, 0, 24, 0, 0, 0, 0, 0,
- 0, 3, 0, 0, 19, 11, 0, 0, 19, 11, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0,255,255,255,172,172,226, 37, 37,178, 26, 26,175, 29, 29,
- 174,209,209,239,255,255,255,255,255,255,255,255,255,255,255,255,172,
- 172,226, 70, 70,190, 27, 27,176, 39, 39,179,209,209,239,255,255,255,
- 255,255,255, 49, 49,182, 41, 41,219, 36, 36,209, 31, 31,206, 31, 31,
- 177,209,209,239,255,255,255,255,255,255,209,209,239, 29, 29,177, 36,
- 36,212, 34, 34,208, 31, 31,206, 39, 39,178,255,255,255,255,255,255,
- 19, 19,173, 33, 33,208,255,255,255,117,117,213, 35, 35,211, 52, 52,
- 184,255,255,255,255,255,255, 59, 59,187, 37, 37,214,114,114,214,255,
- 255,255, 35, 35,210, 22, 22,173,255,255,255,255,255,255, 43, 43,179,
- 37, 37,213,134,134,213,255,255,255, 38, 38,208, 13, 13,170,255,255,
- 255,255,255,255, 5, 5,169, 38, 39,205,255,255,255,137,137,214, 34,
- 34,209, 43, 43,179,255,255,255,255,255,255,172,172,226, 7, 7,168,
- 35, 35,209, 73, 73,192, 26, 27,194, 1, 1,166,255,255,255,241,242,
- 250, 30, 31,205, 25, 27,193, 74, 74,193, 33, 33,206, 7, 7,167,143,
- 143,216,255,255,255,255,255,255,255,255,255,142,142,215, 9, 9,170,
- 34, 34,210, 31, 31,206, 16, 17,184, 92, 94,196, 6, 7,169, 26, 26,
- 201, 34, 34,209, 33, 33,203, 12, 12,170,171,171,225,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,127,127,210,
- 33, 33,175, 6, 6,166, 70, 75,163, 2, 2,166, 25, 26,199, 37, 37,
- 178,131,131,211,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,212,214,213,
- 132,137,137,195,198,197,175,178,179, 52, 55,160,231,232,232,255,255,
+ stdimg_checkboxes : Array[0..2601] of byte = (
+ 66, 77, 42, 10, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 40, 0, 0,
+ 0, 65, 0, 0, 0, 13, 0, 0, 0, 1, 0, 24, 0, 0, 0, 0, 0,
+ 244, 9, 0, 0,196, 14, 0, 0,196, 14, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,181,184,183,184,188,187,
- 230,232,231,167,172,170,139,144,142,184,187,186,255,255,255,255,255,
255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,231,232,232,136,141,139,223,225,225,245,246,245,
- 151,156,154,165,169,168,140,145,143,231,232,232,255,255,255,255,255,
255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,152,156,154,178,182,181,247,247,247,142,147,145,156,160,159,
- 179,182,181,182,187,185,172,175,174,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,228,229,229,136,
- 141,139,217,220,219,239,240,239,171,175,173,184,187,186,179,184,182,
- 203,206,205,137,142,140,197,199,198,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,144,148,146,176,181,179,246,
- 247,247,155,159,157,202,204,203,255,255,255,141,146,144,201,206,204,
- 172,176,175,156,160,159,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,136,141,139,208,212,210,239,240,239,179,
- 183,181,255,255,255,255,255,255,225,227,226,167,172,170,195,200,198,
- 142,147,145,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,143,148,146,247,247,247,170,173,172,202,204,203,255,
- 255,255,255,255,255,255,255,255,152,156,155,208,211,210,169,173,171,
255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,221,223,222,145,149,148,162,166,165,255,255,255,255,255,255,255,
- 255,255,255,255,255,185,187,186,148,152,150,255,255,255,255,255,255,
- 255,255,255,255,255,255);
-
-Const
- stdimg_menu_check_16 : Array[0..821] of byte = (
- 66, 77, 54, 3, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 40, 0, 0,
- 0, 16, 0, 0, 0, 16, 0, 0, 0, 1, 0, 24, 0, 0, 0, 0, 0,
- 0, 3, 0, 0, 19, 11, 0, 0, 19, 11, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
- 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
- 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
- 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
- 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
- 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
- 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
- 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
- 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
- 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
- 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
- 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
- 255, 0,255,255, 0,255,255, 0,255, 0, 0, 0,255, 0,255,255, 0,
- 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
- 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
- 255, 0,255, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 0,255,255, 0,
- 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
- 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 0,255,255, 0,
- 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
- 0,255,255, 0,255,255, 0,255,255, 0,255, 0, 0, 0, 0, 0, 0,
- 255, 0,255, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 0,255,255, 0,
- 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
- 0,255,255, 0,255,255, 0,255, 0, 0, 0,255, 0,255,255, 0,255,
- 255, 0,255, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 0,255,255, 0,
- 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
- 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
- 255, 0,255, 0, 0, 0, 0, 0, 0,255, 0,255,255, 0,255,255, 0,
- 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
- 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
- 255, 0,255, 0, 0, 0,255, 0,255,255, 0,255,255, 0,255,255, 0,
- 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
- 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
- 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
- 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
- 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
- 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
- 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
- 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
- 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
- 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
- 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
- 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
- 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
- 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
- 255, 0,255,255, 0,255);
-
-
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255, 0,127,127,127,191,191,
+ 191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,
+ 191,191,191,191,191,191,191,191,191,191,191,191,191,191,255,255,255,
+ 127,127,127,191,191,191,191,191,191,191,191,191,191,191,191,191,191,
+ 191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,
+ 191,191,255,255,255,127,127,127,191,191,191,191,191,191,191,191,191,
+ 191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,
+ 191,191,191,191,191,191,191,255,255,255,127,127,127,191,191,191,191,
+ 191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,
+ 191,191,191,191,191,191,191,191,191,191,191,191,255,255,255,127,127,
+ 127,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,
+ 191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,
+ 255,255,255, 0,127,127,127, 0, 0, 0,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,191,191,191,255,255,255,127,127,127, 0, 0, 0,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,191,191,191,255,255,255,127,127,127,
+ 0, 0, 0,127,127,127,127,127,127,127,127,127,127,127,127,127,127,
+ 127,127,127,127,127,127,127,127,127,127,127,127,127,191,191,191,255,
+ 255,255,127,127,127, 0, 0, 0,127,127,127,127,127,127,127,127,127,
+ 127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,
+ 127,191,191,191,255,255,255,127,127,127, 0, 0, 0,127,127,127,127,
+ 127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,
+ 127,127,127,127,127,127,191,191,191,255,255,255, 0,127,127,127, 0,
+ 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,191,191,191,255,255,
+ 255,127,127,127, 0, 0, 0,255,255,255, 0, 0, 0, 0, 0, 0,255,
+ 255,255,255,255,255,255,255,255, 0, 0, 0, 0, 0, 0,255,255,255,
+ 191,191,191,255,255,255,127,127,127, 0, 0, 0,127,127,127,127,127,
+ 127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,
+ 127,127,127,127,127,191,191,191,255,255,255,127,127,127, 0, 0, 0,
+ 127,127,127, 52, 52, 52, 52, 52, 52,127,127,127,127,127,127,127,127,
+ 127, 52, 52, 52, 52, 52, 52,127,127,127,191,191,191,255,255,255,127,
+ 127,127, 0, 0, 0,127,127,127,127,127,127,127,127,127,127,127,127,
+ 127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,191,191,
+ 191,255,255,255, 0,127,127,127, 0, 0, 0,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,191,191,191,255,255,255,127,127,127, 0, 0, 0,255,
+ 255,255, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,255,255,255,191,191,191,255,255,255,127,127,
+ 127, 0, 0, 0,127,127,127,127,127,127,127,127,127,127,127,127,127,
+ 127,127,127,127,127,127,127,127,127,127,127,127,127,127,191,191,191,
+ 255,255,255,127,127,127, 0, 0, 0,127,127,127, 52, 52, 52, 52, 52,
+ 52, 52, 52, 52,127,127,127, 52, 52, 52, 52, 52, 52, 52, 52, 52,127,
+ 127,127,191,191,191,255,255,255,127,127,127, 0, 0, 0,127,127,127,
+ 127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,
+ 127,127,127,127,127,127,127,191,191,191,255,255,255, 0,127,127,127,
+ 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,191,191,191,255,
+ 255,255,127,127,127, 0, 0, 0,255,255,255,255,255,255, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,
+ 255,191,191,191,255,255,255,127,127,127, 0, 0, 0,127,127,127,127,
+ 127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,
+ 127,127,127,127,127,127,191,191,191,255,255,255,127,127,127, 0, 0,
+ 0,127,127,127,127,127,127, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+ 52, 52, 52, 52, 52,127,127,127,127,127,127,191,191,191,255,255,255,
+ 127,127,127, 0, 0, 0,127,127,127,127,127,127,127,127,127,127,127,
+ 127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,191,
+ 191,191,255,255,255, 0,127,127,127, 0, 0, 0,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,191,191,191,255,255,255,127,127,127, 0, 0, 0,
+ 255,255,255,255,255,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,255,255,255,255,255,255,255,255,255,191,191,191,255,255,255,127,
+ 127,127, 0, 0, 0,127,127,127,127,127,127,127,127,127,127,127,127,
+ 127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,191,191,
+ 191,255,255,255,127,127,127, 0, 0, 0,127,127,127,127,127,127,127,
+ 127,127, 52, 52, 52, 52, 52, 52, 52, 52, 52,127,127,127,127,127,127,
+ 127,127,127,191,191,191,255,255,255,127,127,127, 0, 0, 0,127,127,
+ 127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,
+ 127,127,127,127,127,127,127,127,191,191,191,255,255,255, 0,127,127,
+ 127, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,191,191,191,
+ 255,255,255,127,127,127, 0, 0, 0,255,255,255,255,255,255, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,
+ 255,255,191,191,191,255,255,255,127,127,127, 0, 0, 0,127,127,127,
+ 127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,
+ 127,127,127,127,127,127,127,191,191,191,255,255,255,127,127,127, 0,
+ 0, 0,127,127,127,127,127,127, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+ 52, 52, 52, 52, 52, 52,127,127,127,127,127,127,191,191,191,255,255,
+ 255,127,127,127, 0, 0, 0,127,127,127,127,127,127,127,127,127,127,
+ 127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,
+ 191,191,191,255,255,255, 0,127,127,127, 0, 0, 0,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,191,191,191,255,255,255,127,127,127, 0, 0,
+ 0,255,255,255, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,191,191,191,255,255,255,
+ 127,127,127, 0, 0, 0,127,127,127,127,127,127,127,127,127,127,127,
+ 127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,191,
+ 191,191,255,255,255,127,127,127, 0, 0, 0,127,127,127, 52, 52, 52,
+ 52, 52, 52, 52, 52, 52,127,127,127, 52, 52, 52, 52, 52, 52, 52, 52,
+ 52,127,127,127,191,191,191,255,255,255,127,127,127, 0, 0, 0,127,
+ 127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,
+ 127,127,127,127,127,127,127,127,127,191,191,191,255,255,255, 0,127,
+ 127,127, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,191,191,
+ 191,255,255,255,127,127,127, 0, 0, 0,255,255,255, 0, 0, 0, 0,
+ 0, 0,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0, 0, 0,
+ 255,255,255,191,191,191,255,255,255,127,127,127, 0, 0, 0,127,127,
+ 127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,
+ 127,127,127,127,127,127,127,127,191,191,191,255,255,255,127,127,127,
+ 0, 0, 0,127,127,127, 52, 52, 52, 52, 52, 52,127,127,127,127,127,
+ 127,127,127,127, 52, 52, 52, 52, 52, 52,127,127,127,191,191,191,255,
+ 255,255,127,127,127, 0, 0, 0,127,127,127,127,127,127,127,127,127,
+ 127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,
+ 127,191,191,191,255,255,255, 0,127,127,127, 0, 0, 0,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,191,191,191,255,255,255,127,127,127, 0,
+ 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,191,191,191,255,255,
+ 255,127,127,127, 0, 0, 0,127,127,127,127,127,127,127,127,127,127,
+ 127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,
+ 191,191,191,255,255,255,127,127,127, 0, 0, 0,127,127,127,127,127,
+ 127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,
+ 127,127,127,127,127,191,191,191,255,255,255,127,127,127, 0, 0, 0,
+ 127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,
+ 127,127,127,127,127,127,127,127,127,127,191,191,191,255,255,255, 0,
+ 127,127,127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,191,
+ 191,191,255,255,255,127,127,127, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,191,191,191,255,255,255,127,127,127, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,191,191,191,255,255,255,127,127,
+ 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,191,191,191,
+ 255,255,255,127,127,127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,191,191,191,255,255,255, 0,127,127,127,127,127,127,127,127,
+ 127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,
+ 127,127,127,127,127,127,127,127,127,127,127,255,255,255,127,127,127,
+ 127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,
+ 127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,255,
+ 255,255,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,
+ 127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,
+ 127,127,127,127,255,255,255,127,127,127,127,127,127,127,127,127,127,
+ 127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,
+ 127,127,127,127,127,127,127,127,127,255,255,255,127,127,127,127,127,
+ 127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,
+ 127,127,127,127,127,127,127,127,127,127,127,127,127,127,255,255,255,
+ 0);
diff --git a/src/corelib/x11/fpg_interface.pas b/src/corelib/x11/fpg_interface.pas
index c4adf079..3a1e1920 100644
--- a/src/corelib/x11/fpg_interface.pas
+++ b/src/corelib/x11/fpg_interface.pas
@@ -33,6 +33,8 @@ type
TfpgApplicationImpl = TfpgX11Application;
TfpgClipboardImpl = TfpgX11Clipboard;
TfpgFileListImpl = TfpgX11FileList;
+ TfpgMimeDataImpl = TfpgX11MimeData;
+ TfpgDragImpl = TfpgX11Drag;
implementation
diff --git a/src/corelib/x11/fpg_utils_impl.inc b/src/corelib/x11/fpg_utils_impl.inc
index d8625b8c..753b0ea1 100644
--- a/src/corelib/x11/fpg_utils_impl.inc
+++ b/src/corelib/x11/fpg_utils_impl.inc
@@ -1,7 +1,7 @@
{%mainunit fpg_utils.pas}
uses
- Unix;
+ Unix, BaseUnix, fpg_constants, fpg_stringutils;
// X11 specific filesystem implementations of encoding functions
@@ -40,3 +40,11 @@ begin
fpSystem(Helper + ' ' + aURL + '&');
end;
+function fpgFileSize(const AFilename: TfpgString): integer;
+var
+ st: baseunix.stat;
+begin
+ if not fpstat(pointer(AFilename),st) >= 0 then
+ exit(-1);
+ Result := st.st_size;
+end;
diff --git a/src/corelib/x11/fpg_x11.pas b/src/corelib/x11/fpg_x11.pas
index 3d832130..71f06d39 100644
--- a/src/corelib/x11/fpg_x11.pas
+++ b/src/corelib/x11/fpg_x11.pas
@@ -19,7 +19,8 @@ unit fpg_x11;
{$mode objfpc}{$H+}
-{.$Define DEBUG}
+{.$Define DEBUG} // general debugging - mostly OS messages though
+{.$Define DNDDEBUG} // drag-n-drop specific debugging
{ TODO : Compiz effects: Menu popup with correct window hint. Same for Combo dropdown window. }
@@ -28,6 +29,7 @@ interface
uses
Classes,
SysUtils,
+ contnrs,
X,
Xlib,
XUtil,
@@ -51,6 +53,11 @@ type
TfpgGContext = Xlib.TGc;
PInt = ^integer;
+ TAtomArray = array[0..0] of TAtom;
+ PAtomArray = ^TAtomArray;
+
+ TWindowArray = array[0..0] of TWindow;
+ PWindowArray = ^TWindowArray;
{$HINTS OFF}
TXIC = record
@@ -119,6 +126,7 @@ type
// forward declaration
TfpgX11Window = class;
+ TfpgX11Drag = class;
TfpgX11FontResource = class(TfpgFontResourceBase)
@@ -205,6 +213,8 @@ type
TfpgX11Window = class(TfpgWindowBase)
+ private
+ QueueEnabledDrops: boolean;
protected
FWinFlags: TXWindowStateFlags;
FWinHandle: TfpgWinHandle;
@@ -220,6 +230,8 @@ type
function DoWindowToScreen(ASource: TfpgWindowBase; const AScreenPos: TPoint): TPoint; override;
procedure DoUpdateWindowPosition; override;
procedure DoSetMouseCursor; override;
+ procedure DoDNDEnabled(const AValue: boolean); override;
+ procedure DoAcceptDrops(const AValue: boolean); override;
property WinHandle: TfpgWinHandle read FWinHandle;
public
constructor Create(AOwner: TComponent); override;
@@ -235,9 +247,48 @@ type
FComposeBuffer: TfpgString;
FComposeStatus: TStatus;
FEventFilter: TX11EventFilter;
+ { XDND type list received from Source window }
+ FDNDTypeList: TObjectList;
+ { all XDND atoms }
+ XdndAware: TAtom;
+ XdndTypeList: TAtom;
+ XdndSelection: TAtom;
+ { XDND client messages }
+ XdndEnter: TAtom;
+ XdndPosition: TAtom;
+ XdndStatus: TAtom;
+ XdndLeave: TAtom;
+ XdndDrop: TAtom;
+ XdndFinished: TAtom;
+ { XDND actions }
+ XdndActionCopy: TAtom;
+ XdndActionMove: TAtom;
+ XdndActionLink: TAtom;
+ XdndActionAsk: TAtom;
+ XdndActionPrivate: TAtom;
+ { XDND variables }
+ FActionType: TAtom;
+ FSrcWinHandle: TfpgWinHandle;
+ FDNDVersion: integer;
+ FDNDDataType: TAtom;
+ FSrcTimeStamp: clong;
+ FLastDropTarget: TfpgWinHandle;
+ FDropPos: TPoint;
+ FDrag: TfpgX11Drag;
+ procedure SetDrag(const AValue: TfpgX11Drag);
function ConvertShiftState(AState: Cardinal): TShiftState;
function KeySymToKeycode(KeySym: TKeySym): Word;
function StartComposing(const Event: TXEvent): TKeySym;
+ function GetDropActionFromAtom(const AAtom: TAtom): TfpgDropAction;
+ function GetAtomFromDropAction(const AAction: TfpgDropAction): TAtom;
+ procedure XdndInit;
+ procedure ResetDNDVariables;
+ procedure HandleDNDenter(ATopLevelWindow: TfpgX11Window; const ASource: TWindow; const ev: TXEvent);
+ procedure HandleDNDleave(ATopLevelWindow: TfpgX11Window; const ASource: TWindow);
+ procedure HandleDNDposition(ATopLevelWindow: TfpgX11Window; const ASource: TWindow; const x_root: integer; const y_root: integer; const AAction: TAtom; const ATimestamp: x.TTime);
+ procedure HandleDNDdrop(ATopLevelWindow: TfpgX11Window; const ASource: TWindow; const ATimestamp: x.TTime);
+ procedure HandleDNDSelection(const ev: TXEvent);
+ property Drag: TfpgX11Drag read FDrag write SetDrag;
protected
FDisplay: PXDisplay;
DisplayDepth: integer;
@@ -251,8 +302,9 @@ type
xia_motif_wm_hints: TAtom;
xia_wm_protocols: TAtom;
xia_wm_delete_window: TAtom;
- netlayer: TNETWindowLayer;
+ xia_wm_state: TAtom;
xia_targets: TAtom;
+ netlayer: TNETWindowLayer;
InputMethod: PXIM;
InputContext: PXIC;
FLastKeySym: TKeySym; // Used for KeyRelease event
@@ -295,6 +347,40 @@ type
end;
+ TfpgX11MimeData = class(TfpgMimeDataBase)
+ end;
+
+
+ TfpgX11Drag = class(TfpgDragBase)
+ private
+ FLastTarget: TfpgWinHandle;
+ FUseVersion: integer;
+ FTargetIsDNDAware: Boolean;
+ FStatusPending: Boolean;
+ FDropAccepted: Boolean;
+ FProposedAction: TAtom;
+ FAcceptedAction: TAtom;
+ FMimeTypesArray: array of TAtom;
+ xia_plain_text: TAtom;
+ procedure SetTypeListProperty;
+ procedure InitializeMimeTypesToAtoms;
+ procedure Dragging(ev: TXEvent);
+ function IsDNDAware(win: TWindow): boolean;
+ procedure SendDNDLeave(ATarget: TWindow);
+ procedure SendDNDEnter(ATarget: TWindow);
+ procedure SendDNDPosition(ATarget: TWindow; x_root: cint; y_root: cint; AAction: TAtom; ATime: X.TTime);
+ procedure SendDNDDrop;
+ procedure HandleDNDStatus(ATarget: TWindow; AAccept: integer; ARect: TfpgRect; AAction: TAtom);
+ procedure HandleSelectionRequest(ev: TXEvent);
+ protected
+ FSource: TfpgX11Window;
+ function GetSource: TfpgX11Window; virtual;
+ public
+ destructor Destroy; override;
+ function Execute(const ADropActions: TfpgDropActions; const ADefaultAction: TfpgDropAction = daCopy): TfpgDropAction; override;
+ end;
+
+
function fpgColorToX(col: TfpgColor): longword;
@@ -309,13 +395,24 @@ uses
fpg_widget,
fpg_popupwindow,
fpg_stringutils, // used for GetTextWidth
+ fpg_utils,
fpg_form, // for modal event support
cursorfont,
- xatom; // used for XA_WM_NAME
+ xatom, // used for XA_WM_NAME
+ math;
+
+type
+ TDNDSrcType = class(TObject)
+ public
+ Name: TfpgString;
+ ID: integer;
+ end;
var
xapplication: TfpgApplication;
+const
+ FPG_XDND_VERSION: culong = 4; // our supported XDND version
// some externals
@@ -335,6 +432,8 @@ function XdbeDeallocateBackBufferName(ADisplay: PXDisplay; ABuffer: TfpgWinHandl
function XOpenIM(para1: PDisplay; para2: PXrmHashBucketRec; para3: Pchar; para4: Pchar): PXIM; cdecl; external;
function XCreateIC(para1: PXIM; para2: array of const): PXIC; cdecl; external;
+const
+ AltGrMask = 1 shl 13; // missing from X unit
function ConvertTo565Pixel(rgb: longword): word;
begin
@@ -504,9 +603,9 @@ end;
procedure ProcessSelection(var ev: TXEvent);
var
s: string;
- actual: TAtom;
- format: integer;
- count, remaining: longword;
+ actualformat: TAtom;
+ actualtype: cint;
+ count, remaining: culong;
data: PChar;
begin
if ev.xselection._property > 0 then
@@ -515,7 +614,7 @@ begin
ev.xselection._property, 0, 16000,
TBool(false), // delete
0, // type
- @actual, @format, @count, @remaining,
+ @actualformat, @actualtype, @count, @remaining,
@data);
s := data;
@@ -539,7 +638,6 @@ begin
e._type := SelectionNotify;
e.requestor := ev.xselectionrequest.requestor;
e.selection := ev.xselectionrequest.selection;
-// e.selection := xapplication.xia_clipboard;
e.target := ev.xselectionrequest.target;
e.time := ev.xselectionrequest.time;
e._property := ev.xselectionrequest._property;
@@ -547,18 +645,82 @@ begin
if e.target = xapplication.xia_targets then
begin
a := XA_STRING;
- XChangeProperty(xapplication.Display, e.requestor, e._property,
- XA_ATOM, 32, PropModeReplace, PByte(@a), Sizeof(TAtom)); // I think last parameter is right?
+ XChangeProperty(xapplication.Display, e.requestor, e._property, XA_ATOM,
+ 32, PropModeReplace, PByte(@a), Sizeof(TAtom)); // I think last parameter is right?
end
else
begin
XChangeProperty(xapplication.Display, e.requestor, e._property, e.target,
- 8, 0, PByte(@fpgClipboard.FClipboardText[1]), Length(fpgClipboard.FClipboardText));
+ 8, PropModeReplace, PByte(@fpgClipboard.FClipboardText[1]), Length(fpgClipboard.FClipboardText));
end;
XSendEvent(xapplication.Display, e.requestor, false, 0, @e );
end;
+function IsTopLevel(AWin: TWindow): Boolean;
+var
+ actualtype: TAtom = None;
+ actualformat: cint;
+ count, remaining: culong;
+ data: pchar = nil;
+begin
+ XGetWindowProperty(xapplication.Display, AWin, xapplication.xia_wm_state, 0, 0,
+ TBool(False), AnyPropertyType, @actualtype, @actualformat, @count,
+ @remaining, @data);
+ if data <> nil then
+ XFree(data);
+ Result := actualtype <> None;
+end;
+
+{ find toplevel window that contains mouse co-ordinates x, y (co-ordinates are
+ from root window) }
+function FindWindow(ARoot: TWindow; const x, y: cint): TWindow;
+var
+ wattr: TXWindowAttributes;
+ r, p: TWindow;
+ children: PWindowArray = nil;
+ numchildren: cuint = 0;
+ i: integer;
+begin
+ XGetWindowAttributes(xapplication.Display, ARoot, @wattr);
+ if (wattr.map_state <> IsUnmapped) and
+ ((x >= wattr.x) and (x < (wattr.x + wattr.width))) and
+ ((y >= wattr.y) and (y < (wattr.y + wattr.height))) then
+ begin
+ // mapped and inside, is it a top-level?
+ if (IsTopLevel(ARoot)) then
+ begin
+ Result := ARoot;
+ exit;
+ end;
+ if XQueryTree(xapplication.Display, ARoot, @r, @p, @children, @numchildren) <> 0 then
+ begin
+ if (numchildren > 0) then
+ begin
+ r := None;
+ { upon return from XQueryTree, children are listed in the current
+ stacking order, from bottom-most (first) to top-most (last) }
+ for i := numchildren-1 downto 0 do
+ begin
+ r := FindWindow(children^[i], x - wattr.x, y - wattr.y);
+ if r <> None then
+ break;
+ end;
+
+ XFree(children);
+ if r <> None then
+ begin
+ Result := r;
+ exit;
+ end;
+ Result := ARoot; // a fallback Result - we should never get here though
+ end;
+ end;
+ end
+ else
+ Result := None;
+end;
+
// File utils
function ExtractTargetSymLinkPath(ALink: string): string;
begin
@@ -573,6 +735,13 @@ end;
{ TfpgX11Application }
+procedure TfpgX11Application.SetDrag(const AValue: TfpgX11Drag);
+begin
+ if Assigned(FDrag) then
+ FDrag.Free;
+ FDrag := AValue;
+end;
+
function TfpgX11Application.ConvertShiftState(AState: Cardinal): TShiftState;
begin
Result := [];
@@ -592,11 +761,12 @@ begin
Include(Result, ssAlt);
if (AState and Mod2Mask) <> 0 then
Include(Result, ssNum);
- if (AState and Mod4Mask) <> 0 then
+ { NOTE: Mod3Mask is normally unused for some reason }
+ if (AState and Mod4Mask) <> 0 then { aka "Windows key" }
Include(Result, ssSuper);
if (AState and Mod5Mask) <> 0 then
Include(Result, ssScroll);
- if (AState and (1 shl 13)) <> 0 then
+ if (AState and AltGrMask) <> 0 then
Include(Result, ssAltGr);
end;
@@ -627,7 +797,7 @@ begin
0..Ord('a')-1, Ord('z')+1..$bf, $f7:
Result := KeySym;
Ord('a')..Ord('z'), $c0..$f6, $f8..$ff:
- Result := KeySym - 32;
+ Result := KeySym - 32; // ignore case: convert lowercase a-z to A-Z keysyms;
$20a0..$20ac: Result := Table_20aX[KeySym];
$fe20: Result := keyTab;
$fe50..$fe60: Result := Table_feXX[KeySym];
@@ -685,6 +855,424 @@ begin
Length(FComposeBuffer), @Result, @FComposeStatus);
end;
+function TfpgX11Application.GetDropActionFromAtom(const AAtom: TAtom): TfpgDropAction;
+begin
+ if AAtom = XdndActionCopy then
+ Result := daCopy
+ else if AAtom = XdndActionMove then
+ Result := daMove
+ else if AAtom = XdndActionLink then
+ Result := daLink
+ else
+ Result := daCopy; { the safe fallback option }
+end;
+
+function TfpgX11Application.GetAtomFromDropAction(const AAction: TfpgDropAction): TAtom;
+begin
+ case AAction of
+ daCopy: Result := XdndActionCopy;
+ daMove: Result := XdndActionMove;
+ daLink: Result := XdndActionLink;
+ else
+ Result := XdndActionCopy; { the safe fallback option }
+ end;
+end;
+
+procedure TfpgX11Application.XdndInit;
+begin
+ XdndAware := XInternAtom(FDisplay, 'XdndAware', False);
+ XdndTypeList := XInternAtom(FDisplay, 'XdndTypeList', False);
+ XdndSelection := XInternAtom(FDisplay, 'XdndSelection', False);
+
+ // client messages
+ XdndEnter := XInternAtom(FDisplay, 'XdndEnter', False);
+ XdndPosition := XInternAtom(FDisplay, 'XdndPosition', False);
+ XdndStatus := XInternAtom(FDisplay, 'XdndStatus', False);
+ XdndLeave := XInternAtom(FDisplay, 'XdndLeave', False);
+ XdndDrop := XInternAtom(FDisplay, 'XdndDrop', False);
+ XdndFinished := XInternAtom(FDisplay, 'XdndFinished', False);
+
+ // actions
+ XdndActionCopy := XInternAtom(FDisplay, 'XdndActionCopy', False);
+ XdndActionMove := XInternAtom(FDisplay, 'XdndActionMove', False);
+ XdndActionLink := XInternAtom(FDisplay, 'XdndActionLink', False);
+ XdndActionAsk := XInternAtom(FDisplay, 'XdndActionAsk', False);
+ XdndActionPrivate := XInternAtom(FDisplay, 'XdndActionPrivate', False);
+end;
+
+procedure TfpgX11Application.ResetDNDVariables;
+var
+ msgp: TfpgMessageParams;
+begin
+ if FLastDropTarget <> 0 then
+ begin
+ fillchar(msgp, sizeof(msgp), 0);
+ fpgPostMessage(nil, FindWindowByHandle(FLastDropTarget), FPGM_DROPEXIT, msgp);
+ end;
+ FDNDTypeList.Clear;
+ FActionType := 0;
+ FSrcWinHandle := 0;
+ FLastDropTarget := 0;
+ FDropPos.X := 0;
+ FDropPos.Y := 0;
+end;
+
+procedure TfpgX11Application.HandleDNDenter(ATopLevelWindow: TfpgX11Window;
+ const ASource: TWindow; const ev: TXEvent);
+var
+ actualtype: TAtom;
+ actualformat: cint;
+ count, remaining: culong;
+ xdndtypes: PAtomArray;
+ i: integer;
+ s: TfpgString;
+ itm: TDNDSrcType;
+begin
+ {$IFDEF DNDDEBUG}
+ writeln('TfpgX11Application.HandleDNDenter');
+ {$ENDIF}
+ ResetDNDVariables;
+ FSrcWinHandle := ASource;
+ FDNDVersion := min(FPG_XDND_VERSION, (ev.xclient.data.l[1] and $FF000000) shr 24);
+ {$IFDEF DNDDEBUG}
+ writeln(Format(' ver(%d) check-XdndTypeList(%s) data=%xh,%d,%d,%d,%d',
+ [ FDNDVersion,
+ BoolToStr(fpgIsBitSet(ev.xclient.data.l[1], 0), True),
+ ev.xclient.data.l[0],
+ ev.xclient.data.l[1],
+ ev.xclient.data.l[2],
+ ev.xclient.data.l[3],
+ ev.xclient.data.l[4] ]));
+ writeln(Format(' * We will be using XDND v%d protocol *', [FDNDVersion]));
+ if fpgIsBitSet(ev.xclient.data.l[1], 0) then
+ writeln(' ** We need to fetch XdndTypeList (>3 types)');
+ {$ENDIF}
+
+ // read typelist
+ if fpgIsBitSet(ev.xclient.data.l[1], 0) then
+ begin
+ // now fetch the data
+ XGetWindowProperty(Display, FSrcWinHandle,
+ XdndTypeList, 0, 16000,
+ TBool(False),
+ AnyPropertyType,
+ @actualtype, @actualformat, @count, @remaining,
+ @xdndtypes);
+
+ {$IFDEF DNDDEBUG}
+ s := XGetAtomName(Display, actualtype);
+ writeln('Actual fetch -----------------------');
+ writeln(Format(' ActualType: %s (%d)', [s, ActualType]));
+ writeln(' Actualformat = ', ActualFormat);
+ writeln(' count = ', count);
+ writeln(' remaining = ', remaining);
+ {$ENDIF}
+
+ if (actualtype <> XA_ATOM) or (actualformat <> 32) then
+ count := 0;
+ end
+ else
+ begin
+ count := 3;
+ xdndtypes := @ev.xclient.data.l[2];
+ end;
+
+ for i := 0 to count-1 do
+ begin
+ if xdndtypes^[i] <> 0 then
+ begin
+ s := XGetAtomName(FDisplay, xdndtypes^[i]);
+ {$IFDEF DNDDEBUG}
+ writeln(Format(' Format #%d = %s (%d)', [i+1, s, xdndtypes^[i]]));
+ {$ENDIF}
+ // store each supported data type for later use
+ itm := TDNDSrcType.Create;
+ itm.Name := s;
+ itm.ID := xdndtypes^[i];
+ FDNDTypeList.Add(itm);
+ end;
+ end;
+ if count > 3 then
+ XFree(xdndtypes);
+end;
+
+procedure TfpgX11Application.HandleDNDleave(ATopLevelWindow: TfpgX11Window;
+ const ASource: TWindow);
+var
+ wg: TfpgWidget;
+begin
+ {$IFDEF DNDDEBUG}
+ writeln('TfpgX11Application.HandleDNDleave');
+ {$ENDIF}
+ if FLastDropTarget <> 0 then { 0 would be first time in, so there is no last window }
+ begin
+ wg := FindWindowByHandle(FLastDropTarget) as TfpgWidget;
+ if wg.AcceptDrops then
+ begin
+ if Assigned(wg.OnDragLeave) then
+ wg.OnDragLeave(wg);
+ end;
+ end;
+ ResetDNDVariables;
+end;
+
+procedure TfpgX11Application.HandleDNDposition(ATopLevelWindow: TfpgX11Window; const ASource: TWindow;
+ const x_root: integer; const y_root: integer; const AAction: TAtom; const ATimestamp: x.TTime);
+var
+ Msg: TXEvent;
+ dx, dy, dx2, dy2: cint;
+ child: TWindow;
+ prevchild: TWindow;
+
+ ret_root: TfpgWinHandle;
+ ret_child: TfpgWinHandle;
+ root_x, root_y: integer;
+ child_x, child_y: integer;
+
+ s: string;
+ i: integer;
+ lTargetWinHandle: TWindow;
+ w: TfpgX11Window;
+ wg: TfpgWidget;
+ wg2: TfpgWidget;
+ msgp: TfpgMessageParams;
+ lDragEnterEvent: TfpgDragEnterEvent;
+ lDropAction: TfpgDropAction;
+ lAccept: Boolean;
+ lMimeChoice: TfpgString;
+ lMimeList: TStringList;
+begin
+ {$IFDEF DNDDEBUG}
+ writeln('TfpgX11Application.HandleDNDposition (toplevel window = ', ATopLevelWindow.Name, ')');
+ {$ENDIF}
+ lAccept := False;
+ FSrcWinHandle := ASource;
+ FActionType := AAction;
+ FSrcTimeStamp := ATimeStamp;
+ lTargetWinHandle := ATopLevelWindow.WinHandle;
+ lMimeChoice := 'text/plain';
+
+ {$IFDEF DNDDEBUG}
+ s := XGetAtomName(FDisplay, AAction);
+ writeln(Format(' requested action: %s (%d)', [s, AAction]));
+ writeln(' x_root: ', x_root, ' y_root: ', y_root);
+ {$ENDIF}
+
+ // Find window under cursor, and position of cursor inside that window
+ XTranslateCoordinates(FDisplay, XDefaultRootWindow(FDisplay), ATopLevelWindow.WinHandle,
+ x_root, y_root, @dx, @dy, @ret_child);
+ child := ret_child;
+ prevchild := ATopLevelWindow.WinHandle;
+ while ret_child <> 0 do // If we have chidren, iterate until we reach the top most child
+ begin
+ child := ret_child;
+ dx2 := dx;
+ dy2 := dy;
+ XTranslateCoordinates(FDisplay, prevchild, child,
+ dx2, dy2, @dx, @dy, @ret_child);
+ prevchild := child;
+ end;
+
+ if child <> 0 then
+ w := FindWindowByHandle(child)
+ else
+ w := ATopLevelWindow;
+
+ {$IFDEF DNDDEBUG}
+ writeln(Format('x:%d y:%d child:%d (%x)', [dx, dy, w.WinHandle, w.WinHandle]));
+ {$ENDIF}
+
+ if Assigned(w) then
+ begin
+ lTargetWinHandle := w.WinHandle;
+ {$IFDEF DNDDEBUG}
+ writeln('dragging over window: ', w.Name);
+ {$ENDIF}
+ if w is TfpgWidget then // TODO: We could use Interfaces here eg: IDragDropEnabled
+ begin
+ wg := TfpgWidget(w);
+ if FLastDropTarget <> lTargetWinHandle then
+ begin
+ if FLastDropTarget <> 0 then { 0 would be first time in, so there is no last window }
+ begin
+ wg2 := FindWindowByHandle(FLastDropTarget) as TfpgWidget;
+ if wg2.AcceptDrops then
+ begin
+ if Assigned(wg2.OnDragLeave) then
+ wg2.OnDragLeave(wg2);
+ end;
+ fillchar(msgp, sizeof(msgp), 0);
+ { Notify the widget so it can reset its looks if needed }
+ fpgPostMessage(nil, wg2, FPGM_DROPEXIT, msgp);
+ end;
+ end;
+ FLastDropTarget := lTargetWinHandle;
+ if wg.AcceptDrops then
+ begin
+ if Assigned(wg.OnDragEnter) then
+ begin
+ lDropAction := GetDropActionFromAtom(AAction);
+ lMimeList := TStringList.Create;
+ for i := 0 to FDNDTypeList.Count-1 do
+ lMimeList.Add(TDNDSrcType(FDNDTypeList[i]).Name);
+
+ { Use the first mime-type as the default option presented. The mime-list
+ should always be from most specific to least specific. }
+ if lMimeList.Count > 0 then
+ lMimeChoice := lMimeList[0]
+ else
+ {$NOTE We need to replace this message with a resouce string }
+ raise Exception.Create('fpGUI/X11: no mime types available for DND operation');
+
+ { TODO: We need to populate the Source parameter. }
+ wg.OnDragEnter(self, nil, lMimeList, lMimeChoice, lDropAction, lAccept);
+ lMimeList.Free;
+ FActionType := GetAtomFromDropAction(lDropAction);
+ end;
+
+ { Notify widget of drag status, so it can update its look }
+ if lAccept then
+ begin
+ FDropPos.X := dx;
+ FDropPos.Y := dy;
+ fillchar(msgp, sizeof(msgp), 0);
+ msgp.mouse.x := dx;
+ msgp.mouse.y := dy;
+ fpgPostMessage(nil, w, FPGM_DROPENTER, msgp);
+ end;
+ end;
+ end;
+ end;
+
+ FDNDDataType := None;
+ for i := 0 to FDNDTypeList.Count-1 do
+ begin
+ { This list must be from most specific to least specific }
+ if TDNDSrcType(FDNDTypeList[i]).Name = lMimeChoice then
+ begin
+ FDNDDataType := TDNDSrcType(FDNDTypeList[i]).ID;
+ break;
+ end;
+ end;
+
+ // send message to confirm drop will be accepted in specified rectangle
+ FillChar(Msg, SizeOf(Msg), 0);
+ Msg.xany._type := ClientMessage;
+ Msg.xany.display := FDisplay;
+ Msg.xclient.window := FSrcWinHandle; // source winhandle msg is going to
+ Msg.xclient.message_type := XdndStatus;
+ Msg.xclient.format := 32;
+
+ Msg.xclient.data.l[0] := ATopLevelWindow.WinHandle; // always top-level window
+ if lAccept then
+ begin
+ Msg.xclient.data.l[1] := 1;
+ Msg.xclient.data.l[4] := FActionType;
+ end
+ else
+ begin
+ Msg.xclient.data.l[1] := 0;
+ Msg.xclient.data.l[4] := None;
+ end;
+ Msg.xclient.data.l[2] := 0; // x & y co-ordinates
+ Msg.xclient.data.l[3] := 0; // w & h co-ordinates
+
+ XSendEvent(FDisplay, FSrcWinHandle, False, NoEventMask, @Msg);
+end;
+
+procedure TfpgX11Application.HandleDNDdrop(ATopLevelWindow: TfpgX11Window;
+ const ASource: TWindow; const ATimestamp: x.TTime);
+var
+ Msg: TXEvent;
+begin
+ {$IFDEF DNDDEBUG}
+ writeln('TfpgX11Application.HandleDNDdrop');
+ {$ENDIF}
+ { TODO: Must XConvertSelection always be called? }
+ if FDNDDataType <> None then
+ XConvertSelection(FDisplay, XdndSelection, FDNDDataType, XdndSelection, ATopLevelWindow.FWinHandle, ATimestamp);
+
+ { send message to signal drop is finished }
+ FillChar(Msg, SizeOf(Msg), 0);
+ Msg.xany._type := ClientMessage;
+ Msg.xany.display := FDisplay;
+ Msg.xclient.window := FSrcWinHandle; // source winhandle msg is going to
+ Msg.xclient.message_type := XdndFinished;
+ Msg.xclient.format := 32;
+
+ Msg.xclient.data.l[0] := ATopLevelWindow.FWinHandle; // winhandle of target window
+ if FDNDDataType = None then
+ Msg.xclient.data.l[1] := 0 // drop NOT accepted
+ else
+ Msg.xclient.data.l[1] := 1; // drop accepted - target can remove the data
+ Msg.xclient.data.l[2] := FActionType; // this should be the action we accepted
+
+ XSendEvent(FDisplay, FSrcWinHandle, False, NoEventMask, @Msg);
+end;
+
+procedure TfpgX11Application.HandleDNDSelection(const ev: TXEvent);
+var
+ actualtype: TAtom;
+ actualformat: cint;
+ count, remaining, dummy: culong;
+ s: variant;
+ data: PChar;
+ wg: TfpgWidget;
+begin
+ {$IFDEF DNDDEBUG}
+ writeln('TfpgX11Application.HandleDNDselection');
+ {$ENDIF}
+ if FLastDropTarget <> 0 then { 0 would be first time in, so there is no last window }
+ begin
+ wg := FindWindowByHandle(FLastDropTarget) as TfpgWidget;
+ if not wg.AcceptDrops then
+ Exit;
+ end;
+
+ { do not get data yet, just see how much there is }
+ XGetWindowProperty(FDisplay, ev.xselection.requestor,
+ ev.xselection._property, 0, 0,
+ TBool(false),
+ AnyPropertyType,
+ @actualtype, @actualformat, @count, @remaining,
+ @data);
+
+ { we handle the DND selection here }
+ {$IFDEF DNDDEBUG}
+ s := XGetAtomName(FDisplay, actualtype);
+ writeln(Format(' ActualType: %s (%d)', [s, ActualType]));
+ writeln(' Actualformat = ', ActualFormat);
+ writeln(' count = ', count);
+ writeln(' remaining = ', remaining);
+ writeln('-----------------');
+ {$ENDIF}
+
+ if remaining > 0 then { we have data - now fetch it! }
+ begin
+ XGetWindowProperty(FDisplay, ev.xselection.requestor,
+ ev.xselection._property, 0, remaining,
+ TBool(false),
+ AnyPropertyType,
+ @actualtype, @actualformat, @count, @dummy,
+ @data);
+ s := data;
+ end;
+
+ if FLastDropTarget <> 0 then { 0 would be first time in, so there is no last window }
+ begin
+ wg := FindWindowByHandle(FLastDropTarget) as TfpgWidget;
+ if wg.AcceptDrops then
+ begin
+ if Assigned(wg.OnDragDrop) then
+ wg.OnDragDrop(nil, nil, FDropPos.X, FDropPos.Y, s);
+ end;
+ end;
+ {$IFDEF DNDDEBUG}
+ writeln(' s = ', s);
+ {$ENDIF}
+ ResetDNDVariables;
+end;
+
function TfpgX11Application.DoGetFontFaceList: TStringList;
var
pfs: PFcFontSet;
@@ -740,11 +1328,16 @@ begin
DefaultColorMap := XDefaultColorMap(FDisplay, DefaultScreen);
// Initialize atoms
- xia_clipboard := XInternAtom(FDisplay, 'CLIPBOARD', longbool(0));
- xia_targets := XInternAtom(FDisplay, 'TARGETS', longbool(0));
- xia_motif_wm_hints := XInternAtom(FDisplay, '_MOTIF_WM_HINTS', longbool(0));
- xia_wm_protocols := XInternAtom(FDisplay, 'WM_PROTOCOLS', longbool(0));
- xia_wm_delete_window := XInternAtom(FDisplay, 'WM_DELETE_WINDOW', longbool(0));
+ xia_clipboard := XInternAtom(FDisplay, 'CLIPBOARD', TBool(False));
+ xia_targets := XInternAtom(FDisplay, 'TARGETS', TBool(False));
+ xia_motif_wm_hints := XInternAtom(FDisplay, '_MOTIF_WM_HINTS', TBool(False));
+ xia_wm_protocols := XInternAtom(FDisplay, 'WM_PROTOCOLS', TBool(False));
+ xia_wm_delete_window := XInternAtom(FDisplay, 'WM_DELETE_WINDOW', TBool(False));
+ xia_wm_state := XInternAtom(FDisplay, 'WM_STATE', TBool(False));
+
+ { initializa the XDND atoms }
+ FDNDTypeList := TObjectList.Create;
+ XdndInit;
netlayer := TNETWindowLayer.Create(FDisplay);
@@ -764,7 +1357,7 @@ destructor TfpgX11Application.Destroy;
begin
netlayer.Free;
XCloseDisplay(FDisplay);
-
+ FDNDTypeList.Free;
inherited Destroy;
end;
@@ -778,7 +1371,7 @@ var
rootw: TfpgWinHandle;
parentw: TfpgWinHandle;
childs: ^TfpgWinHandle;
- cnum: longword;
+ cnum: cuint;
begin
childs := nil;
if XQueryTree(xapplication.display, wh, @rootw, @parentw, @childs, @cnum) <> 0 then
@@ -852,7 +1445,6 @@ var
xfd: integer;
KeySym: TKeySym;
Popup: TfpgWidget;
- status: TStatus;
needToWait: boolean;
// debug purposes only
@@ -890,7 +1482,7 @@ var
procedure ReportLostWindow(const event: TXEvent);
begin
{$IFDEF DEBUG}
- writeln('fpGFX/X11: ', GetXEventName(event._type), ' can''t find <',
+ writeln('fpGUI/X11: ', GetXEventName(event._type), ' can''t find <',
IntToHex(event.xany.window, 9), '>');
{$ENDIF}
end;
@@ -1063,6 +1655,19 @@ begin
ClosePopups;
end;
end;
+ end
+ else
+ begin
+ if Assigned(Drag) then // button released
+ begin
+ Drag.SendDNDDrop;
+ { TODO: Start timeout in case XdndFinished is not received, so we can free Drag }
+// writeln('Freeing Drag Object');
+ if not Drag.FDropAccepted then
+ begin
+ FreeAndNil(FDrag);
+ end;
+ end;
end;
w := FindWindowByHandle(ev.xbutton.window); // restore w
@@ -1143,34 +1748,41 @@ begin
until not XCheckTypedWindowEvent(display, ev.xmotion.window, X.MotionNotify, @ev);
w := FindWindowByHandle(ev.xmotion.window);
if not Assigned(w) then
- ReportLostWindow(ev);
- if xapplication.TopModalForm <> nil then
- begin
- ew := TfpgX11Window(WidgetParentForm(TfpgWidget(w)));
- if (ew <> nil) and (xapplication.TopModalForm <> ew) and (waUnblockableMessages in ew.WindowAttributes = False) then
- blockmsg := true;
- end;
- if not blockmsg then
+ ReportLostWindow(ev)
+ else
begin
- msgp.mouse.x := ev.xmotion.x;
- msgp.mouse.y := ev.xmotion.y;
- msgp.mouse.Buttons := (ev.xmotion.state and $FF00) shr 8;
- msgp.mouse.shiftstate := ConvertShiftState(ev.xmotion.state);
- fpgPostMessage(nil, FindWindowByHandle(ev.xmotion.window), FPGM_MOUSEMOVE, msgp);
+ if Assigned(Drag) then
+ begin
+ if ((ev.xmotion.state and $FF00) shr 8) = MOUSE_LEFT then
+ Drag.Dragging(ev);
+ end;
+ if xapplication.TopModalForm <> nil then
+ begin
+ ew := TfpgX11Window(WidgetParentForm(TfpgWidget(w)));
+ if (ew <> nil) and (xapplication.TopModalForm <> ew) and (waUnblockableMessages in ew.WindowAttributes = False) then
+ blockmsg := true;
+ end;
+ if not blockmsg then
+ begin
+ msgp.mouse.x := ev.xmotion.x;
+ msgp.mouse.y := ev.xmotion.y;
+ msgp.mouse.Buttons := (ev.xmotion.state and $FF00) shr 8;
+ msgp.mouse.shiftstate := ConvertShiftState(ev.xmotion.state);
+ fpgPostMessage(nil, w, FPGM_MOUSEMOVE, msgp);
+ end;
end;
end;
- // message blockings for modal windows
+ { one use is for message blockings for modal windows, or XDND etc. }
X.ClientMessage:
begin
- w := FindWindowByBackupHandle(ev.xclient.window);
+ w := FindWindowByHandle(ev.xclient.window);
if not Assigned(w) then
ReportLostWindow(ev);
// WM_PROTOCOLS message
if Assigned(w) and (ev.xclient.message_type = xia_wm_protocols) then
begin
- //WriteLn(XGetAtomName(FDisplay, TAtom(ev.xclient.data.l[0])));
if (ev.xclient.data.l[0] = netlayer.NetAtom[naWM_PING]) then
begin
// always respond to pings or the wm will kill us
@@ -1182,14 +1794,86 @@ begin
begin
// This is ugly!!!!!!!!!!!!!!!
ew := TfpgX11Window(WidgetParentForm(TfpgWidget(w)));
- if (ew <> nil) and (xapplication.TopModalForm <> ew) and (waUnblockableMessages in ew.WindowAttributes = False) then
+ if (ew <> nil) and (TopModalForm <> ew) and (waUnblockableMessages in ew.WindowAttributes = False) then
blockmsg := true;
end;
if not blockmsg then
fpgPostMessage(nil, FindWindowByHandle(ev.xclient.window), FPGM_CLOSE);
end;
- end; // WM_PROTOCOLS
+ end
+ { XDND protocol - XdndEnter }
+ else if Assigned(w) and (ev.xclient.message_type = XdndEnter) then
+ begin
+ {$IFDEF DNDDEBUG}
+ writeln('ClientMessage.XdndEnter event received');
+ {$ENDIF}
+ HandleDNDenter(w, ev.xclient.data.l[0], ev);
+ end
+ { XDND protocol - XdndPosition }
+ else if Assigned(w) and (ev.xclient.message_type = XdndPosition) then
+ begin
+ {$IFDEF DNDDEBUG}
+ writeln('ClientMessage.XdndPosition event received');
+ {$ENDIF}
+ HandleDNDposition(w, // top level window
+ ev.xclient.data.l[0], // Source window
+ (ev.xclient.data.l[2] and $FFFF0000) shr 16, // x_root
+ ev.xclient.data.l[2] and $0000FFFF, // y_root
+ ev.xclient.data.l[4], // action
+ ev.xclient.data.l[3]); // timestamp
+ end
+ { XDND protocol - XdndStatus }
+ else if Assigned(w) and (ev.xclient.message_type = XdndStatus) then
+ begin
+ {$IFDEF DNDDEBUG}
+ writeln('ClientMessage.XdndStatus event received');
+ {$ENDIF}
+ if Assigned(Drag) then
+ begin
+ Drag.HandleDNDStatus(
+ ev.xclient.data.l[0],
+ ev.xclient.data.l[1] and 1,
+ fpgRect(
+ (ev.xclient.data.l[2] shr 16) and $FFFF,
+ ev.xclient.data.l[2] and $FFFF,
+ (ev.xclient.data.l[3] shr 16) and $FFFF,
+ ev.xclient.data.l[3] and $FFFF),
+ ev.xclient.data.l[4]);
+ end;
+ end
+ { XDND protocol - XdndLeave }
+ else if Assigned(w) and (ev.xclient.message_type = XdndLeave) then
+ begin
+ {$IFDEF DNDDEBUG}
+ writeln('ClientMessage.XdndLeave event received');
+ {$ENDIF}
+ HandleDNDleave(w, ev.xclient.data.l[0]);
+ end
+ { XDND protocol - XdndDrop }
+ else if Assigned(w) and (ev.xclient.message_type = XdndDrop) then
+ begin
+ {$IFDEF DNDDEBUG}
+ writeln('ClientMessage.XdndDrop event received');
+ writeln(' ClassName = ', w.ClassName);
+ writeln(' Name = ', w.Name);
+ {$ENDIF}
+ HandleDNDdrop(w, ev.xclient.data.l[0], ev.xclient.data.l[2]);
+ end
+ { XDND protocol - XdndFinished }
+ else if Assigned(w) and (ev.xclient.message_type = XdndFinished) then
+ begin
+ {$IFDEF DNDDEBUG}
+ writeln('ClientMessage.XdndFinished event received');
+ {$ENDIF}
+ if Assigned(Drag) then
+ begin
+ {$IFDEF DNDDEBUG}
+ writeln('Freeing Drag Object');
+ {$ENDIF}
+ FreeAndNil(FDrag);
+ end;
+ end;
end;
X.ConfigureNotify:
@@ -1230,12 +1914,35 @@ begin
X.SelectionNotify:
begin
- ProcessSelection(ev);
+ { Handle XDND data }
+ if ev.xselection._property = XdndSelection then
+ begin
+ {$IFDEF DNDDEBUG}
+ writeln('XdndSelection message received');
+ {$ENDIF}
+ HandleDNDSelection(ev);
+ end
+ else { Handle X Selections - clipboard data }
+ ProcessSelection(ev);
end;
X.SelectionRequest:
begin
- ProcessSelectionRequest(ev);
+ if ev.xselectionrequest.selection = XdndSelection then
+ begin
+ {$IFDEF DNDDEBUG}
+ writeln('found a XdndSelection request');
+ {$ENDIF}
+ if Assigned(Drag) then
+ Drag.HandleSelectionRequest(ev);
+ end
+ else
+ begin
+ {$IFDEF DEBUG}
+ writeln('found a clipboard selection request');
+ {$ENDIF}
+ ProcessSelectionRequest(ev);
+ end;
end;
X.SelectionClear:
@@ -1265,6 +1972,18 @@ begin
w := FindWindowByHandle(ev.xmap.window);
if w <> nil then
Include(w.FWinFlags, xwsfMapped);
+
+ { X11 is too efficient, so new windows don't need a OnResize when mapped,
+ but because Windows GDI does so, we want the same events under X11.
+ Lets fake one. }
+ if w <> nil then
+ begin
+ msgp.rect.Left := w.Left;
+ msgp.rect.Top := w.Top;
+ msgp.rect.Width := w.Width;
+ msgp.rect.Height := w.Height;
+ fpgPostMessage(nil, w, FPGM_RESIZE, msgp);
+ end;
end;
X.UnmapNotify:
@@ -1303,7 +2022,7 @@ begin
end;
else
- WriteLn('fpGFX/X11: Unhandled X11 event received: ', GetXEventName(ev._type));
+ WriteLn('fpGUI/X11: Unhandled X11 event received: ', GetXEventName(ev._type));
end;
end;
@@ -1425,6 +2144,12 @@ begin
fpgApplication.netlayer.WindowSetSupportPING(FWinHandle);
XFree(WMHints);
+
+ { we need to set the XdndAware property }
+ if QueueEnabledDrops then
+ begin
+ DoDNDEnabled(True);
+ end;
end;
hints.flags := 0;
@@ -1476,6 +2201,8 @@ begin
lmwh := 0;
if fpgApplication.PrevModalForm <> nil then
lmwh := TfpgX11Window(fpgApplication.PrevModalForm).WinHandle
+ else if FocusRootWidget <> nil then
+ lmwh := TfpgX11Window(FocusRootWidget).WinHandle
else if fpgApplication.MainForm <> nil then
lmwh := TfpgX11Window(fpgApplication.MainForm).WinHandle;
if lmwh <> 0 then
@@ -1494,7 +2221,7 @@ begin
if ((FWindowType = wtWindow) or (FWindowType = wtModalForm)) and (waBorderless in FWindowAttributes) and not (waX11SkipWMHints in FWindowAttributes) then
begin
prop := X.None;
- prop := XInternAtom(xapplication.display, '_MOTIF_WM_INFO', longbool(0));
+ prop := XInternAtom(xapplication.display, '_MOTIF_WM_INFO', TBool(False));
if prop = X.None then
begin
// writeln('Window Manager does not support MWM hints. Bypassing window manager control for borderless window.');
@@ -1633,6 +2360,8 @@ begin
end;
case FMouseCursor of
+ mcDefault: shape := XC_left_ptr;
+ mcArrow: shape := XC_arrow;
mcSizeEW: shape := XC_sb_h_double_arrow;
mcSizeNS: shape := XC_sb_v_double_arrow;
mcIBeam: shape := XC_xterm;
@@ -1644,6 +2373,8 @@ begin
mcCross: shape := XC_crosshair;
mcHourGlass: shape := XC_watch;
mcHand: shape := XC_hand2;
+ mcDrag: shape := XC_target;
+ mcNoDrop: shape := XC_pirate;
else
shape := XC_left_ptr; //XC_arrow;
end;
@@ -1655,6 +2386,25 @@ begin
FMouseCursorIsDirty := False;
end;
+procedure TfpgX11Window.DoDNDEnabled(const AValue: boolean);
+begin
+ // notify XDND protocol that we can handle DND
+ if AValue then
+ begin
+ if HasHandle then
+ XChangeProperty(xapplication.Display, WinHandle, xapplication.XdndAware, XA_ATOM, 32, PropModeReplace, @FPG_XDND_VERSION, 1)
+ else
+ QueueEnabledDrops := True; // we need to do this once we have a winhandle
+ end
+ else
+ XDeleteProperty(xapplication.Display, WinHandle, xapplication.XdndAware);
+end;
+
+procedure TfpgX11Window.DoAcceptDrops(const AValue: boolean);
+begin
+ { TODO : Remove EnableDrops, then recurse from here to parent top level from, and set XDNDAware property for form. }
+end;
+
procedure TfpgX11Window.DoSetWindowTitle(const ATitle: string);
var
tp: TXTextProperty;
@@ -1680,6 +2430,7 @@ begin
inherited Create(AOwner);
FWinHandle := 0;
FBackupWinHandle := 0;
+ QueueEnabledDrops := False;
end;
procedure TfpgX11Window.ActivateWindow;
@@ -2358,7 +3109,7 @@ procedure TfpgX11Clipboard.DoSetText(const AValue: TfpgString);
begin
FClipboardText := AValue;
XSetSelectionOwner(xapplication.Display, xapplication.xia_clipboard,
- FClipboardWndHandle, 0);
+ FClipboardWndHandle, CurrentTime);
end;
procedure TfpgX11Clipboard.InitClipboard;
@@ -2450,6 +3201,321 @@ begin
end;
+{ TfpgX11Drag }
+
+procedure TfpgX11Drag.SetTypeListProperty;
+begin
+ XChangeProperty(xapplication.Display, FSource.WinHandle,
+ xapplication.XdndTypeList, XA_ATOM, 32,
+ PropModeReplace, @FMimeTypesArray[0], Length(FMimeTypesArray));
+end;
+
+procedure TfpgX11Drag.InitializeMimeTypesToAtoms;
+var
+ sl: TStringList;
+ i: integer;
+ a: TAtom;
+ s: PChar;
+begin
+ { free old array }
+ SetLength(FMimeTypesArray, 0);
+ { set size of new array. Extra element for the terminating x.None value }
+ SetLength(FMimeTypesArray, FMimedata.Count+1);
+
+ sl := FMimeData.Formats as TStringList;
+ try
+ for i := 0 to FMimeData.Count-1 do
+ begin
+ s := PChar(sl[i]);
+ a := XInternAtom(xapplication.Display, s, TBool(False));
+ FMimeTypesArray[i] := a;
+ end;
+ FMimeTypesArray[i+1] := x.None; // termination value
+ finally
+ sl.Free;
+ end;
+end;
+
+procedure TfpgX11Drag.Dragging(ev: TXEvent);
+var
+ dx, dy: cint;
+ child: TWindow;
+ lTarget: TWindow;
+begin
+ lTarget := FindWindow(ev.xmotion.root, ev.xmotion.x_root, ev.xmotion.y_root);
+ if FLastTarget <> lTarget then
+ begin
+ if FLastTarget <> 0 then { meaning we had a target before }
+ SendDNDLeave(FLastTarget);
+
+ FLastTarget := lTarget;
+ FTargetIsDNDAware := IsDNDAware(lTarget);
+ {$IFDEF DNDDEBUG}
+ writeln('IsDNDAware = ', BoolToStr(FTargetIsDNDAware, True));
+ {$ENDIF}
+ FStatusPending := False;
+ FDropAccepted := False;
+ FAcceptedAction := X.None;
+
+ if FTargetIsDNDAware then
+ SendDNDEnter(FLastTarget);
+ end;
+
+ if FTargetIsDNDAware and not FStatusPending then
+ begin
+ SendDNDPosition(FLastTarget, ev.xmotion.x_root, ev.xmotion.y_root,
+ FProposedAction, ev.xmotion.time);
+ // this is to avoid sending XdndPosition messages over and over
+ // if the target is not responding
+ FStatusPending := True;
+ end;
+end;
+
+function TfpgX11Drag.IsDNDAware(win: TWindow): boolean;
+var
+ actualtype: TAtom;
+ actualformat: cint;
+ count, remaining, dummy: culong;
+ s: TfpgString;
+ data: PChar;
+ lversion: culong;
+begin
+ if (win = None) then
+ begin
+ Result := False;
+ exit;
+ end;
+ XGetWindowProperty(xapplication.Display, win, xapplication.XdndAware, 0, $8000000,
+ TBool(False), XA_ATOM, @actualtype, @actualformat, @count, @remaining, @data);
+
+ if count = 0 then
+ begin
+ if data <> nil then
+ XFree(data);
+ Result := False;
+ exit;
+ end;
+
+ lversion := Integer(data[0]);
+ FUseVersion := min(Integer(FPG_XDND_VERSION), Integer(lversion));
+ Result := True;
+
+ {$IFDEF DNDDEBUG}
+ writeln(Format('IsDNDAware theirs:%d ours:%d using:%d', [lversion, FPG_XDND_VERSION, FUseVersion]));
+ {$ENDIF}
+end;
+
+procedure TfpgX11Drag.SendDNDLeave(ATarget: TWindow);
+var
+ xev: TXEvent;
+begin
+ xev.xany._type := X.ClientMessage;
+ xev.xany.display := xapplication.Display;
+ xev.xclient.window := ATarget;
+ xev.xclient.message_type := xapplication.XdndLeave;
+ xev.xclient.format := 32;
+
+ xev.xclient.data.l[0] := FSource.WinHandle;
+ xev.xclient.data.l[1] := 0;
+
+ xev.xclient.data.l[2] := 0;
+ xev.xclient.data.l[3] := 0;
+ xev.xclient.data.l[4] := 0;
+
+ XSendEvent(xapplication.Display, ATarget, False, NoEventMask, @xev);
+end;
+
+procedure TfpgX11Drag.SendDNDEnter(ATarget: TWindow);
+var
+ xev: TXEvent;
+ i, n: integer;
+ s: PChar;
+ sl: TStrings;
+begin
+ xev.xany._type := X.ClientMessage;
+ xev.xany.display := xapplication.Display;
+ xev.xclient.window := ATarget;
+ xev.xclient.message_type := xapplication.XdndEnter;
+ xev.xclient.format := 32;
+
+ xev.xclient.data.l[0] := FSource.WinHandle;
+
+ n := FMimeData.Count;
+
+ if n > 3 then
+ i := 1
+ else
+ i := 0;
+ xev.xclient.data.l[1] := i or (FUseVersion shl 24);
+
+ if n <= 3 then
+ begin
+ for i := 0 to 2 do
+ begin
+ if i < n then
+ xev.xclient.data.l[2+i] := FMimeTypesArray[i]
+ else
+ xev.xclient.data.l[2+i] := x.None;
+ end;
+ end
+ else
+ begin
+ { available types are in the XdndTypeList property instead }
+ xev.xclient.data.l[2] := x.None;
+ xev.xclient.data.l[3] := x.None;
+ xev.xclient.data.l[4] := x.None;
+ end;
+
+ XSendEvent(xapplication.Display, ATarget, False, NoEventMask, @xev);
+end;
+
+procedure TfpgX11Drag.SendDNDPosition(ATarget: TWindow; x_root: cint;
+ y_root: cint; AAction: TAtom; ATime: X.TTime);
+var
+ xev: TXEvent;
+begin
+ xev.xany._type := X.ClientMessage;
+ xev.xany.display := xapplication.Display;
+ xev.xclient.window := ATarget;
+ xev.xclient.message_type := xapplication.XdndPosition;
+ xev.xclient.format := 32;
+
+ xev.xclient.data.l[0] := FSource.WinHandle;
+ xev.xclient.data.l[1] := 0;
+
+ xev.xclient.data.l[2] := (x_root shl 16) or y_root; // root coordinates
+ xev.xclient.data.l[3] := ATime; // timestamp for retrieving data
+ xev.xclient.data.l[4] := AAction; // requested action
+
+ XSendEvent(xapplication.Display, ATarget, False, NoEventMask, @xev);
+end;
+
+procedure TfpgX11Drag.SendDNDDrop;
+var
+ xev: TXEvent;
+begin
+ if FDropAccepted then
+ begin
+ xev.xany._type := X.ClientMessage;
+ xev.xany.display := xapplication.Display;
+ xev.xclient.window := FLastTarget;
+ xev.xclient.message_type := xapplication.XdndDrop;
+ xev.xclient.format := 32;
+
+ xev.xclient.data.l[0] := FSource.WinHandle; // from;
+ xev.xclient.data.l[1] := 0; // reserved
+ xev.xclient.data.l[2] := CurrentTime; // timestamp
+ xev.xclient.data.l[3] := 0;
+ xev.xclient.data.l[4] := 0;
+
+ XSendEvent(xapplication.Display, FLastTarget, False, NoEventMask, @xev);
+ end
+ else
+ SendDNDLeave(FLastTarget);
+ FSource.MouseCursor := mcDefault;
+end;
+
+procedure TfpgX11Drag.HandleDNDStatus(ATarget: TWindow; AAccept: integer;
+ ARect: TfpgRect; AAction: TAtom);
+begin
+ if ATarget = FLastTarget then
+ begin
+ FStatusPending := False;
+ if AAccept = 1 then
+ begin
+ FDropAccepted := True;
+ FAcceptedAction := AAction;
+ FSource.MouseCursor := mcDrag;
+ end
+ else
+ begin
+ FDropAccepted := False;
+ FAcceptedAction := X.None; { AAction should equal None, but lets just make sure }
+ FSource.MouseCursor := mcNoDrop;
+ end;
+ end;
+ { TODO: If we waited to long, we have a timeout }
+end;
+
+procedure TfpgX11Drag.HandleSelectionRequest(ev: TXEvent);
+var
+ e: TXSelectionEvent;
+ s: string;
+ v: variant;
+begin
+ e._type := SelectionNotify;
+ e.requestor := ev.xselectionrequest.requestor;
+ e.selection := ev.xselectionrequest.selection;
+ e.target := ev.xselectionrequest.target;
+ e.time := ev.xselectionrequest.time;
+ e._property := ev.xselectionrequest._property;
+
+ s := XGetAtomName(xapplication.Display, e.target);
+ if FMimeData.HasFormat(s) then
+ begin
+ if s = 'text/plain' then
+ XChangeProperty(xapplication.Display, e.requestor, e._property, e.target,
+ 8, PropModeReplace, PByte(@FMimeData.Text[1]), Length(FMimeData.Text))
+ else if s = 'text/html' then
+ begin
+ XChangeProperty(xapplication.Display, e.requestor, e._property, e.target,
+ 8, PropModeReplace, PByte(@FMimeData.HTML[1]), Length(FMimeData.HTML))
+ end
+ else
+ begin
+ { transfering as raw bytes of data }
+ v := FMimeData.GetData(s);
+ s := v;
+ XChangeProperty(xapplication.Display, e.requestor, e._property, e.target,
+ 8, PropModeReplace, PByte(@s[1]), Length(s));
+ end;
+
+ end;
+
+ XSendEvent(xapplication.Display, e.requestor, false, NoEventMask, @e );
+end;
+
+function TfpgX11Drag.GetSource: TfpgX11Window;
+begin
+ Result := FSource;
+end;
+
+destructor TfpgX11Drag.Destroy;
+begin
+ {$IFDEF DNDDEBUG}
+ writeln('TfpgX11Drag.Destroy ');
+ {$ENDIF}
+ FSource.MouseCursor := mcDefault;
+ XDeleteProperty(xapplication.Display, FSource.WinHandle, xapplication.XdndAware);
+ XDeleteProperty(xapplication.Display, FSource.WinHandle, xapplication.XdndTypeList);
+ SetLength(FMimeTypesArray, 0);
+ inherited Destroy;
+end;
+
+function TfpgX11Drag.Execute(const ADropActions: TfpgDropActions; const ADefaultAction: TfpgDropAction): TfpgDropAction;
+var
+ win: TWindow;
+begin
+ if FDragging then
+ Result := daIgnore
+ else
+ begin
+ FDragging := True;
+ xia_plain_text := XInternAtom(xapplication.Display, 'text/plain', TBool(False));
+ FProposedAction := xapplication.GetAtomFromDropAction(ADefaultAction);
+ xapplication.Drag := self;
+
+ XSetSelectionOwner(xapplication.Display, xapplication.XdndSelection, FSource.WinHandle, CurrentTime);
+ win := XGetSelectionOwner(xapplication.Display, xapplication.XdndSelection);
+ if win <> FSource.WinHandle then
+ raise Exception.Create('fpGUI/X11: Application failed to aquire selection owner status');
+
+ InitializeMimeTypesToAtoms;
+ if FMimeData.Count > 3 then
+ SetTypeListProperty;
+ end;
+end;
+
initialization
xapplication := nil;
diff --git a/src/fpmake.pas b/src/fpmake.pp
index 5afc82ea..a99975a0 100644
--- a/src/fpmake.pas
+++ b/src/fpmake.pp
@@ -42,13 +42,16 @@ program fpmake;
uses sysutils, fpmkunit;
+const
+ {$I VERSION_FILE.inc}
+
var
T: TTarget;
P: TPackage;
begin
with Installer do begin
P := AddPackage('fpgui');
- P.Version := '0.6.3';
+ P.Version := FPGUI_VERSION;
P.Author := 'Graeme Geldenhuys';
P.Email := 'graemeg@gmail.com';
P.License := 'Modified LGPL';
@@ -62,7 +65,7 @@ begin
if we set the package name to fpgui as above. This base install dir
can be overridden by passing -B to fpmake. The line below will cause
the units to be output in ../lib/<cpu-os>/fpgui }
- Defaults.UnitInstallDir := Format('../lib/%s-%s/', [CurrentCPU, CurrentOS]);
+// Defaults.UnitInstallDir := Format('../lib/%s-%s/', [CurrentCPU, CurrentOS]);
{ If you installed FPC to a non-standard location, you need to specify
where fpmake can find the compiler and RTL units. You can pass that
@@ -72,9 +75,10 @@ begin
// else
// Defaults.GlobalUnitDir := Format('c:\fpc\2.2.3\units\%s-%s', [CurrentCPU, CurrentOS]);
- if Defaults.OS in AllUnixOSes
- then Defaults.Options := Defaults.Options + '-dX11'
- else Defaults.Options := Defaults.Options + '-dGDI';
+ if Defaults.OS in AllUnixOSes then
+ Defaults.Options.Add('-dX11')
+ else
+ Defaults.Options.Add('-dGDI');
P.SourcePath.Add('corelib');
P.SourcePath.Add('corelib/x11', AllUnixOSes);
@@ -88,64 +92,81 @@ begin
P.UnitPath.Add('gui');
P.UnitPath.Add('gui/db');
+ P.IncludePath.Add('.');
P.IncludePath.Add('corelib');
P.IncludePath.Add('corelib/x11', AllUnixOSes);
P.IncludePath.Add('corelib/gdi', AllWindowsOSes);
P.IncludePath.Add('gui');
{ todo: add unit and include dependency for all }
+{
P.Sources.AddSrcFiles('corelib/*.pas');
P.Sources.AddSrcFiles('gui/*.pas');
- if Defaults.OS in AllUnixOSes
- then P.Sources.AddSrcFiles('corelib/x11/*.pas')
- else P.Sources.AddSrcFiles('corelib/gdi/*.pas');
-
- { x11 and gdi common }
-// if Defaults.OS in AllUnixOSes
-// then
- P.Targets.AddUnit('corelib/x11/fpg_impl.pas', AllWindowsOSes);
-// else
- P.Targets.AddUnit('corelib/gdi/fpg_impl.pas', AllUnixOSes);
-// T := P.Targets.AddUnit('fpg_impl.pas');
-
- { corelib/x11 }
- T := P.Targets.AddUnit('fpg_keyconv_x11.pas', AllUnixOSes);
- T := P.Targets.AddUnit('fpg_netlayer_x11.pas', AllUnixOSes);
- T := P.Targets.AddUnit('fpg_x11.pas', AllUnixOSes);
-{ with T.Dependencies do begin
- AddUnit('fpg_xft_x11');
- AddUnit('fpg_netlayer_x11');
- AddUnit('fpg_base');
- AddUnit('fpg_impl');
- end; }
- T := P.Targets.AddUnit('fpg_xft_x11.pas', AllUnixOSes);
-
- { corelib/gdi }
- T := P.Targets.AddUnit('fpg_gdi.pas', AllWindowsOSes);
+ if Defaults.OS in AllUnixOSes then
+ P.Sources.AddSrcFiles('corelib/x11/*.pas')
+ else
+ P.Sources.AddSrcFiles('corelib/gdi/*.pas');
+}
{ corelib }
T := P.Targets.AddUnit('fpg_base.pas');
+ T.Dependencies.AddInclude('keys.inc');
+ T.Dependencies.AddInclude('predefinedcolors.inc');
T := P.Targets.AddUnit('fpg_imagelist.pas');
T := P.Targets.AddUnit('fpg_popupwindow.pas');
T := P.Targets.AddUnit('fpg_translations.pas');
T := P.Targets.AddUnit('fpg_cmdlineparams.pas');
T := P.Targets.AddUnit('fpg_imgfmt_bmp.pas');
+ T := P.Targets.AddUnit('fpg_imgfmt_jpg.pas');
T := P.Targets.AddUnit('fpg_stdimages.pas');
+ T.Dependencies.AddInclude('stdimages.inc');
T := P.Targets.AddUnit('fpg_utils.pas');
+ T.Dependencies.AddInclude('fpg_utils_impl.inc', AllUnixOSes);
+ T.Dependencies.AddInclude('fpg_utils_impl.inc', AllWindowsOSes);
+ T := P.Targets.AddUnit('fpg_imgutils.pas');
T := P.Targets.AddUnit('fpg_command_intf.pas');
T := P.Targets.AddUnit('fpg_main.pas');
+ T.Dependencies.AddInclude('VERSION_FILE.inc');
+ T.Dependencies.AddInclude('fpg_msgqueue.inc');
T := P.Targets.AddUnit('fpg_stringhashlist.pas');
T := P.Targets.AddUnit('fpg_widget.pas');
T := P.Targets.AddUnit('fpg_constants.pas');
+ T.Dependencies.AddInclude('lang_en.inc');
+ T.Dependencies.AddInclude('lang_af.inc');
+ T.Dependencies.AddInclude('lang_de.inc');
+ T.Dependencies.AddInclude('lang_es.inc');
+ T.Dependencies.AddInclude('lang_fr.inc');
+ T.Dependencies.AddInclude('lang_it.inc');
+ T.Dependencies.AddInclude('lang_pt.inc');
+ T.Dependencies.AddInclude('lang_ru.inc');
T.ResourceStrings := True;
- T := P.Targets.AddUnit('fpg_strings.pas');
+// T := P.Targets.AddUnit('fpg_strings.pas'); // this unit is not used in fpGUI
T := P.Targets.AddUnit('fpg_wuline.pas');
T := P.Targets.AddUnit('fpg_extinterpolation.pas');
T := P.Targets.AddUnit('fpg_pofiles.pas');
T := P.Targets.AddUnit('fpg_stringutils.pas');
+ T := P.Targets.AddUnit('fpg_extgraphics.pas');
+
+
+ { corelib/x11 }
+ T := P.Targets.AddUnit('fpg_keyconv_x11.pas', AllUnixOSes);
+ T := P.Targets.AddUnit('fpg_netlayer_x11.pas', AllUnixOSes);
+ T := P.Targets.AddUnit('fpg_xft_x11.pas', AllUnixOSes);
+ T := P.Targets.AddUnit('fpg_impl.pas', AllUnixOSes);
+ T := P.Targets.AddUnit('fpg_x11.pas', AllUnixOSes);
+ T.Dependencies.AddUnit('fpg_xft_x11');
+ T.Dependencies.AddUnit('fpg_netlayer_x11');
+ T.Dependencies.AddUnit('fpg_base');
+ T.Dependencies.AddUnit('fpg_impl');
+ T := P.Targets.AddUnit('fpg_interface.pas', AllUnixOSes);
+
+
+ { corelib/gdi }
+ T := P.Targets.AddUnit('fpg_impl.pas', AllWindowsOSes);
+ T := P.Targets.AddUnit('fpg_gdi.pas', AllWindowsOSes);
+ T.Dependencies.AddInclude('fpg_keys_gdi.inc', AllWindowsOSes);
+ T := P.Targets.AddUnit('fpg_interface.pas', AllWindowsOSes);
- { corelib include files }
-// T := P.Sources.AddSrc('keys.inc');
{ gui/db }
T := P.Targets.AddUnit('fpgui_db.pas');
@@ -169,6 +190,14 @@ begin
T := P.Targets.AddUnit('fpg_trackbar.pas');
T := P.Targets.AddUnit('fpg_button.pas');
T := P.Targets.AddUnit('fpg_dialogs.pas');
+ T.Dependencies.AddInclude('charmapdialog.inc');
+ T.Dependencies.AddInclude('colordialog.inc');
+ T.Dependencies.AddInclude('inputquerydialog.inc');
+ T.Dependencies.AddInclude('messagedialog.inc');
+ T.Dependencies.AddInclude('newdirdialog.inc');
+ T.Dependencies.AddInclude('promptuserdialog.inc');
+ T.Dependencies.AddInclude('selectdirdialog.inc');
+ T.Dependencies.AddInclude('logo.inc');
T := P.Targets.AddUnit('fpg_gauge.pas');
T := P.Targets.AddUnit('fpg_iniutils.pas');
T := P.Targets.AddUnit('fpg_memo.pas');
@@ -182,6 +211,10 @@ begin
T := P.Targets.AddUnit('fpg_menu.pas');
T := P.Targets.AddUnit('fpg_progressbar.pas');
T := P.Targets.AddUnit('fpg_style.pas');
+ T := P.Targets.AddUnit('fpg_spinedit.pas');
+ T := P.Targets.AddUnit('fpg_colorwheel.pas');
+ T := P.Targets.AddUnit('fpg_colormapping.pas');
+ T := P.Targets.AddUnit('fpg_editbtn.pas');
Run;
end;
diff --git a/src/gui/colordialog.inc b/src/gui/colordialog.inc
index 6914257e..93d8d731 100644
--- a/src/gui/colordialog.inc
+++ b/src/gui/colordialog.inc
@@ -25,10 +25,10 @@ type
TfpgColorSelectDialog = class(TfpgBaseDialog)
private
{@VFD_HEAD_BEGIN: ColorSelectDialog}
- PageControl1: TfpgPageControl;
- TabSheet1: TfpgTabSheet;
- TabSheet2: TfpgTabSheet;
- ComboBox1: TfpgComboBox;
+ pcColorSelect: TfpgPageControl;
+ tsColorWheel: TfpgTabSheet;
+ tsColorNames: TfpgTabSheet;
+ cbColorPalette: TfpgComboBox;
ColorListBox1: TfpgColorListBox;
Label1: TfpgLabel;
Label2: TfpgLabel;
@@ -43,11 +43,13 @@ type
pnlColorPreview: TfpgBevel;
{@VFD_HEAD_END: ColorSelectDialog}
FViaRGB: Boolean; // to prevent recursive changes
- function GetSelectedColor: TfpgColor;
- procedure SetSelectedColor(const AValue: TfpgColor);
- procedure ColorChanged(Sender: TObject);
- procedure RGBChanged(Sender: TObject);
- procedure UpdateRGBComponents;
+ function GetSelectedColor: TfpgColor;
+ procedure SetSelectedColor(const AValue: TfpgColor);
+ procedure ColorChanged(Sender: TObject);
+ procedure RGBChanged(Sender: TObject);
+ procedure UpdateRGBComponents;
+ procedure PopulatePaletteColorCombo;
+ procedure cbColorPaletteChange(Sender: TObject);
public
constructor Create(AOwner: TComponent); override;
procedure AfterCreate; override;
@@ -71,7 +73,7 @@ begin
try
frm.ColorWheel.SetSelectedColor(APresetColor);
if frm.ShowModal = mrOK then
- Result := frm.ValueBar.SelectedColor;
+ Result := frm.SelectedColor;
finally
frm.Free;
end;
@@ -81,12 +83,15 @@ end;
function TfpgColorSelectDialog.GetSelectedColor: TfpgColor;
begin
- //
+ if pcColorSelect.ActivePageIndex = 0 then
+ Result := ValueBar.SelectedColor
+ else
+ Result := ColorListBox1.Color;
end;
procedure TfpgColorSelectDialog.SetSelectedColor(const AValue: TfpgColor);
begin
- //
+ ColorWheel.SetSelectedColor(AValue);
end;
procedure TfpgColorSelectDialog.ColorChanged(Sender: TObject);
@@ -123,6 +128,27 @@ begin
edB.Value := rgb.Blue;
end;
+procedure TfpgColorSelectDialog.PopulatePaletteColorCombo;
+begin
+ cbColorPalette.Items.Clear;
+ cbColorPalette.Items.Add('cpStandardColors');
+ cbColorPalette.Items.Add('cpSystemColors');
+ cbColorPalette.Items.Add('cpWebColors');
+ cbColorPalette.FocusItem := 0;
+ cbColorPalette.OnChange := @cbColorPaletteChange;
+end;
+
+procedure TfpgColorSelectDialog.cbColorPaletteChange(Sender: TObject);
+begin
+ if cbColorPalette.Text = 'cpStandardColors' then
+ ColorListBox1.ColorPalette := cpStandardColors
+ else if cbColorPalette.Text = 'cpSystemColors' then
+ ColorListBox1.ColorPalette := cpSystemColors
+ else
+ ColorListBox1.ColorPalette := cpWebColors;
+ ColorListBox1.SetFocus;
+end;
+
constructor TfpgColorSelectDialog.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
@@ -135,15 +161,15 @@ begin
{%region 'Auto-generated GUI code' -fold}
{@VFD_BODY_BEGIN: ColorSelectDialog}
Name := 'ColorSelectDialog';
- SetPosition(316, 186, 328, 375);
+ SetPosition(340, 164, 328, 375);
WindowTitle := 'Color Select Dialog';
Hint := '';
WindowPosition := wpOneThirdDown;
- PageControl1 := TfpgPageControl.Create(self);
- with PageControl1 do
+ pcColorSelect := TfpgPageControl.Create(self);
+ with pcColorSelect do
begin
- Name := 'PageControl1';
+ Name := 'pcColorSelect';
SetPosition(4, 4, 320, 332);
Anchors := [anLeft,anRight,anTop,anBottom];
ActivePageIndex := 0;
@@ -151,26 +177,26 @@ begin
TabOrder := 1;
end;
- TabSheet1 := TfpgTabSheet.Create(PageControl1);
- with TabSheet1 do
+ tsColorWheel := TfpgTabSheet.Create(pcColorSelect);
+ with tsColorWheel do
begin
- Name := 'TabSheet1';
+ Name := 'tsColorWheel';
SetPosition(3, 24, 314, 305);
Text := 'Color Wheel';
end;
- TabSheet2 := TfpgTabSheet.Create(PageControl1);
- with TabSheet2 do
+ tsColorNames := TfpgTabSheet.Create(pcColorSelect);
+ with tsColorNames do
begin
- Name := 'TabSheet2';
+ Name := 'tsColorNames';
SetPosition(3, 24, 314, 305);
Text := 'Predefined';
end;
- ComboBox1 := TfpgComboBox.Create(TabSheet2);
- with ComboBox1 do
+ cbColorPalette := TfpgComboBox.Create(tsColorNames);
+ with cbColorPalette do
begin
- Name := 'ComboBox1';
+ Name := 'cbColorPalette';
SetPosition(8, 24, 299, 22);
Anchors := [anLeft,anRight,anTop];
FontDesc := '#List';
@@ -178,21 +204,19 @@ begin
TabOrder := 1;
end;
- ColorListBox1 := TfpgColorListBox.Create(TabSheet2);
+ ColorListBox1 := TfpgColorListBox.Create(tsColorNames);
with ColorListBox1 do
begin
Name := 'ColorListBox1';
SetPosition(8, 72, 299, 224);
Anchors := [anLeft,anRight,anTop,anBottom];
- ColorPalette := cpStandardColors;
+ Color := TfpgColor($00FFFF);
FontDesc := '#List';
Hint := '';
- HotTrack := False;
- PopupFrame := False;
TabOrder := 2;
end;
- Label1 := TfpgLabel.Create(TabSheet2);
+ Label1 := TfpgLabel.Create(tsColorNames);
with Label1 do
begin
Name := 'Label1';
@@ -202,7 +226,7 @@ begin
Text := 'Select a color palette';
end;
- Label2 := TfpgLabel.Create(TabSheet2);
+ Label2 := TfpgLabel.Create(tsColorNames);
with Label2 do
begin
Name := 'Label2';
@@ -212,22 +236,23 @@ begin
Text := 'Available colors:';
end;
- ColorWheel := TfpgColorWheel.Create(TabSheet1);
+ ColorWheel := TfpgColorWheel.Create(tsColorWheel);
with ColorWheel do
begin
Name := 'ColorWheel';
SetPosition(8, 8, 204, 204);
end;
- ValueBar := TfpgValueBar.Create(TabSheet1);
+ ValueBar := TfpgValueBar.Create(tsColorWheel);
with ValueBar do
begin
Name := 'ValueBar';
SetPosition(240, 8, 64, 204);
+ Value := 1;
OnChange := @ColorChanged;
end;
- edR := TfpgSpinEdit.Create(TabSheet1);
+ edR := TfpgSpinEdit.Create(tsColorWheel);
with edR do
begin
Name := 'edR';
@@ -237,7 +262,7 @@ begin
OnChange := @RGBChanged;
end;
- edG := TfpgSpinEdit.Create(TabSheet1);
+ edG := TfpgSpinEdit.Create(tsColorWheel);
with edG do
begin
Name := 'edG';
@@ -247,7 +272,7 @@ begin
OnChange := @RGBChanged;
end;
- edB := TfpgSpinEdit.Create(TabSheet1);
+ edB := TfpgSpinEdit.Create(tsColorWheel);
with edB do
begin
Name := 'edB';
@@ -257,7 +282,7 @@ begin
OnChange := @RGBChanged;
end;
- Label3 := TfpgLabel.Create(TabSheet1);
+ Label3 := TfpgLabel.Create(tsColorWheel);
with Label3 do
begin
Name := 'Label3';
@@ -268,7 +293,7 @@ begin
Text := 'Red';
end;
- Label4 := TfpgLabel.Create(TabSheet1);
+ Label4 := TfpgLabel.Create(tsColorWheel);
with Label4 do
begin
Name := 'Label4';
@@ -279,7 +304,7 @@ begin
Text := 'Green';
end;
- Label5 := TfpgLabel.Create(TabSheet1);
+ Label5 := TfpgLabel.Create(tsColorWheel);
with Label5 do
begin
Name := 'Label5';
@@ -290,7 +315,7 @@ begin
Text := 'Blue';
end;
- pnlColorPreview := TfpgBevel.Create(TabSheet1);
+ pnlColorPreview := TfpgBevel.Create(tsColorWheel);
with pnlColorPreview do
begin
Name := 'pnlColorPreview';
@@ -309,6 +334,8 @@ begin
btnCancel.Top := Height - btnCancel.Height - FSpacing;
btnOK.Left := btnCancel.Left - FDefaultButtonWidth - 6;
btnOK.Top := btnCancel.Top;
+
+ PopulatePaletteColorCombo;
end;
diff --git a/src/gui/fpg_animation.pas b/src/gui/fpg_animation.pas
index fedfa545..36972877 100644
--- a/src/gui/fpg_animation.pas
+++ b/src/gui/fpg_animation.pas
@@ -65,6 +65,7 @@ type
public
property Position;
published
+ property Align;
property Enabled;
property Interval;
property ImageFileName;
diff --git a/src/gui/fpg_basegrid.pas b/src/gui/fpg_basegrid.pas
index 9a29e004..ae6584b8 100644
--- a/src/gui/fpg_basegrid.pas
+++ b/src/gui/fpg_basegrid.pas
@@ -37,6 +37,8 @@ type
TfpgGridDrawState = set of (gdSelected, gdFocused, gdFixed);
+ TfpgGridHeaderStyle = (ghsButton, ghsThin, ghsFlat);
+
TfpgFocusChangeNotify = procedure(Sender: TObject; ARow, ACol: Integer) of object;
TfpgRowChangeNotify = procedure(Sender: TObject; ARow: Integer) of object;
TfpgCanSelectCellEvent = procedure(Sender: TObject; const ARow, ACol: Integer; var ACanSelect: boolean) of object;
@@ -52,6 +54,7 @@ type
private
FColResizing: boolean;
FDragPos: integer; // used for column resizing
+ FHeaderStyle: TfpgGridHeaderStyle;
FOnDrawCell: TfpgDrawCellEvent;
FResizedCol: integer; // used for column resizing
FDefaultColWidth: integer;
@@ -83,9 +86,11 @@ type
FAlternativeBGColor: TfpgColor;
function GetFontDesc: string;
function GetHeaderFontDesc: string;
+ function GetTotalColumnWidth: integer;
procedure HScrollBarMove(Sender: TObject; position: integer);
procedure SetFontDesc(const AValue: string);
procedure SetHeaderFontDesc(const AValue: string);
+ procedure SetHeaderStyle(const AValue: TfpgGridHeaderStyle);
procedure SetRowSelect(const AValue: boolean);
procedure SetScrollBarStyle(const AValue: TfpgScrollStyle);
procedure VScrollBarMove(Sender: TObject; position: integer);
@@ -139,6 +144,7 @@ type
property HeaderFontDesc: string read GetHeaderFontDesc write SetHeaderFontDesc;
property FocusCol: Integer read FFocusCol write SetFocusCol default -1;
property FocusRow: Integer read FFocusRow write SetFocusRow default -1;
+ property HeaderStyle: TfpgGridHeaderStyle read FHeaderStyle write SetHeaderStyle default ghsButton;
property RowSelect: boolean read FRowSelect write SetRowSelect;
property ColumnCount: Integer read GetColumnCount;
property PopupMenu: TfpgPopupMenu read FPopupMenu write FPopupMenu;
@@ -147,6 +153,7 @@ type
property ShowGrid: boolean read FShowGrid write SetShowGrid default True;
property ScrollBarStyle: TfpgScrollStyle read FScrollBarStyle write SetScrollBarStyle default ssAutoBoth;
property HeaderHeight: integer read FHeaderHeight;
+ property TotalColumnWidth: integer read GetTotalColumnWidth;
// property ColResizing: boolean read FColResizing write FColResizing;
property ColumnWidth[ACol: Integer]: integer read GetColumnWidth write SetColumnWidth;
property ColumnBackgroundColor[ACol: Integer]: TfpgColor read GetColumnBackgroundColor write SetColumnBackgroundColor;
@@ -207,6 +214,15 @@ begin
Result := FHeaderFont.FontDesc;
end;
+function TfpgBaseGrid.GetTotalColumnWidth: integer;
+var
+ i: integer;
+begin
+ Result := 0;
+ for i := 0 to ColumnCount-1 do
+ Result := Result + ColumnWidth[i];
+end;
+
procedure TfpgBaseGrid.SetFontDesc(const AValue: string);
begin
FFont.Free;
@@ -225,6 +241,14 @@ begin
RePaint;
end;
+procedure TfpgBaseGrid.SetHeaderStyle(const AValue: TfpgGridHeaderStyle);
+begin
+ if FHeaderStyle = AValue then
+ exit;
+ FHeaderStyle := AValue;
+ Repaint;
+end;
+
procedure TfpgBaseGrid.SetRowSelect(const AValue: boolean);
begin
if FRowSelect = AValue then
@@ -370,10 +394,27 @@ var
r: TfpgRect;
x: integer;
begin
- // Here we can implement a head style check
- Canvas.DrawButtonFace(ARect, [btfIsEmbedded]);
r := ARect;
- InflateRect(r, -2, -2);
+ // Here we can implement a head style check
+ case FHeaderStyle of
+ ghsButton:
+ begin
+ Canvas.DrawButtonFace(ARect, [btfIsEmbedded]);
+ InflateRect(r, -2, -2);
+ end;
+ ghsThin:
+ begin
+ Canvas.DrawBevel(ARect);
+ end;
+ ghsFlat:
+ begin
+ Canvas.Color:= clGridHeader;
+ Canvas.FillRectangle(r);
+ Canvas.Color:= clShadow2;
+ Canvas.DrawLine(r.Left, r.Bottom, r.Right, r.Bottom); { bottom line }
+ Canvas.DrawLine(r.Right, r.Bottom, r.Right, r.Top-1); { right line }
+ end;
+ end;
Canvas.AddClipRect(r); // text may not overshoot header border
(*
// drawing grid lines
@@ -579,16 +620,17 @@ begin
begin
Dec(VHeight, FHScrollBar.Height);
FHScrollBar.Min := 0;
- FHScrollBar.SliderSize := 0.2;
if go_SmoothScroll in FOptions then
begin
FHScrollBar.Max := cw - vw;
FHScrollBar.Position := FXOffset;
+ FHScrollBar.SliderSize := TotalColumnWidth / Width;
end
else
begin
FHScrollBar.Max := ColumnCount-1;
FHScrollBar.Position := FFirstCol;
+ FHScrollBar.SliderSize := 1 / ColumnCount;
end;
FHScrollBar.RepaintSlider;
end;
@@ -931,10 +973,10 @@ begin
lCol := FFirstCol;
if delta > 0 then // scroll down
- inc(FFirstRow, abs(delta))
+ inc(FFirstRow, abs(delta)*3)
else // scroll up
if FFirstRow > 0 then
- dec(FFirstRow, abs(delta));
+ dec(FFirstRow, abs(delta)*3);
// apply limits
if FFirstRow > RowCount - VisibleLines then
@@ -1231,6 +1273,7 @@ begin
FScrollBarStyle := ssAutoBoth;
FUpdateCount := 0;
FOptions := [];
+ FHeaderStyle := ghsButton;
FFont := fpgGetFont('#Grid');
FHeaderFont := fpgGetFont('#GridHeader');
diff --git a/src/gui/fpg_button.pas b/src/gui/fpg_button.pas
index 19b31049..52a17486 100644
--- a/src/gui/fpg_button.pas
+++ b/src/gui/fpg_button.pas
@@ -13,6 +13,9 @@
Description:
Defines a push button control.
+
+ TODO:
+ * multi-line button text. It must take into account image position as well.
}
unit fpg_button;
@@ -42,7 +45,7 @@ type
FImageName: string;
FClicked: Boolean;
FShowImage: Boolean;
- FClickOnPush: Boolean;
+ FClickOnPush: Boolean; { Used for group buttons where click happens on "down" state. Normal buttons, the click happens on "release" state }
FGroupIndex: integer;
FAllowAllUp: boolean;
FModalResult: TfpgModalResult;
@@ -62,6 +65,7 @@ type
procedure SetAllowAllUp(const Value: boolean);
procedure DoPush;
procedure DoRelease(x, y: integer);
+ procedure SetAllowMultiLineText(const AValue: boolean);
protected
FImageMargin: integer;
FImageSpacing: integer;
@@ -72,6 +76,7 @@ type
FFont: TfpgFont;
FDefault: boolean;
FState: integer; // 0 - normal // 1 - hover
+ FAllowMultiLineText: boolean;
procedure SetShowImage(AValue: Boolean);
procedure HandlePaint; override;
procedure HandleKeyPress(var keycode: word; var shiftstate: TShiftState; var consumed: boolean); override;
@@ -85,8 +90,9 @@ type
property AllowAllUp: boolean read FAllowAllUp write SetAllowAllUp default False;
{ Buttons behave like toggle buttons. This is an alias for GroupIndex > 0 }
property AllowDown: Boolean read GetAllowDown write SetAllowDown;
+ property AllowMultiLineText: boolean read FAllowMultiLineText write SetAllowMultiLineText default False;
property Default: boolean read FDefault write SetDefault default False;
- property Down: Boolean read FDown write SetDown;
+ property Down: Boolean read FDown write SetDown default False;
{ The button will not show focus. It might also have a different down state (look).
This is similar to Focusable = False, but the appearance of the down state might differ. }
property Embedded: Boolean read FEmbedded write SetEmbedded default False;
@@ -127,12 +133,15 @@ type
together. }
TfpgButton = class(TfpgBaseButton)
published
+ property Align;
property AllowAllUp;
property AllowDown;
+ property AllowMultiLineText;
property BackgroundColor default clButtonFace;
property Default;
property Down;
property Embedded;
+ property Enabled;
property Flat;
property FontDesc;
property GroupIndex;
@@ -157,6 +166,10 @@ type
property Top;
property Width;
property OnClick;
+ property OnDragEnter;
+ property OnDragLeave;
+ property OnDragDrop;
+ property OnDragStartDetected;
property OnMouseDown;
property OnMouseExit;
property OnMouseEnter;
@@ -302,6 +315,7 @@ begin
FDefault := False;
FAllowAllUp := False;
FState := 0;
+ FAllowMultiLineText := False;
end;
destructor TfpgBaseButton.Destroy;
@@ -509,6 +523,7 @@ var
lBtnFlags: TFButtonFlags;
clr: TfpgColor;
img: TfpgImage;
+ lTextFlags: TFTextFlags;
begin
// inherited HandlePaint;
Canvas.ClearClipRect;
@@ -532,6 +547,12 @@ begin
Include(lBtnFlags, btfHover)
else if FFlat then
Include(lBtnFlags, btfFlat);
+ end
+ else
+ begin
+ { while in the designer we want hover effect all the time }
+ if FFlat then
+ Include(lBtnFlags, btfHover);
end;
if not FFlat and FDefault then
@@ -577,8 +598,33 @@ begin
Canvas.DrawImage(ix + pofs, iy + pofs, img);
img.Free;
end;
+
end;
- fpgStyle.DrawString(Canvas, tx+pofs, ty+pofs, Text, Enabled);
+
+ { EXPERIMENTAL: multi-line button text
+ Only in this condition do we support multi-line text }
+ if AllowMultiLineText and (FImageLayout = ilImageLeft) then
+ begin
+ r.SetRect(0, 0, Width, Height);
+ InflateRect(r, -3, -3); { same as focus rectangle }
+ if FShowImage and Assigned(FImage) then
+ begin
+ ix := FImageMargin + FImage.Width;
+ if FImageSpacing > 0 then
+ ix += FImageSpacing;
+ OffsetRect(r, ix, 0);
+ r.Width -= ix;
+ end;
+ if FDown then
+ OffsetRect(r, pofs, pofs);
+
+ lTextFlags := [txtHCenter, txtVCenter{, txtWrap}];
+ if not Enabled then
+ lTextFlags += [txtDisabled];
+ Canvas.DrawText(r, Text, lTextFlags);
+ end
+ else
+ fpgStyle.DrawString(Canvas, tx+pofs, ty+pofs, Text, Enabled);
end;
procedure TfpgBaseButton.DoPush;
@@ -618,7 +664,7 @@ begin
FDown := False;
RePaint;
fpgApplication.ProcessMessages;
- if PtInRect(r, Point(x, y)) then
+ if PtInRect(r, Point(x, y)) and FOnClickPending then
Click;
end;
end
@@ -629,7 +675,7 @@ begin
FDown := False;
RePaint;
fpgApplication.ProcessMessages;
- if PtInRect(r, Point(x, y)) then
+ if PtInRect(r, Point(x, y)) and FOnClickPending then
Click;
end;
end;
@@ -638,10 +684,18 @@ begin
FClicked := False;
end;
+procedure TfpgBaseButton.SetAllowMultiLineText(const AValue: boolean);
+begin
+ if FAllowMultiLineText = AValue then exit;
+ FAllowMultiLineText := AValue;
+ Repaint;
+end;
+
procedure TfpgBaseButton.HandleKeyPress(var keycode: word; var shiftstate: TShiftState; var consumed: boolean);
begin
if (keycode = keyReturn) or (keycode = keySpace) or (keycode = keyPEnter) then
begin
+ FOnClickPending := True;
DoPush;
Consumed := True;
end
@@ -653,8 +707,9 @@ procedure TfpgBaseButton.HandleKeyRelease(var keycode: word; var shiftstate: TSh
begin
if (keycode = keyReturn) or (keycode = keySpace) or (keycode = keyPEnter) then
begin
- DoRelease(1, 1); // fake co-ordinates to it executes the Click
+ DoRelease(1, 1); // fake co-ordinates so it executes the Click
Consumed := True;
+ FOnClickPending := False;
end
else
inherited;
@@ -732,8 +787,11 @@ begin
if Assigned(FCommand) then // ICommand takes preference to OnClick
FCommand.Execute
- else if Assigned(OnClick) then
- OnClick(self);
+ else
+ begin
+ if Assigned(OnClick) then
+ OnClick(self);
+ end;
end;
function TfpgBaseButton.GetCommand: ICommand;
diff --git a/src/gui/fpg_checkbox.pas b/src/gui/fpg_checkbox.pas
index a075a4cd..e6d5c35b 100644
--- a/src/gui/fpg_checkbox.pas
+++ b/src/gui/fpg_checkbox.pas
@@ -65,9 +65,11 @@ type
TfpgCheckBox = class(TfpgBaseCheckBox)
published
+ property Align;
property BackgroundColor;
property BoxLayout;
property Checked;
+ property Enabled;
property FontDesc;
property Height;
property Hint;
diff --git a/src/gui/fpg_colorwheel.pas b/src/gui/fpg_colorwheel.pas
index 43ebb8a9..a6b3795b 100644
--- a/src/gui/fpg_colorwheel.pas
+++ b/src/gui/fpg_colorwheel.pas
@@ -62,7 +62,9 @@ type
property Saturation: double Read FSaturation;
procedure SetSelectedColor(const NewColor: TfpgColor);
published
+ property Align;
property BackgroundColor;
+ property Enabled;
property ValueBar: TfpgValueBar Read FValueBar Write SetValueBar;
property MarginWidth: longint Read FMarginWidth Write SetMarginWidth default 5;
property CursorSize: longint Read FCursorSize Write SetCursorSize default 5;
@@ -98,11 +100,13 @@ type
constructor Create(AOwner: TComponent); override;
procedure SetHS(Hue: longint; Sat: double);
published
+ property Align;
property BackgroundColor;
+ property Enabled;
property Value: double Read FValue Write SetValue;
property SelectedColor: TfpgColor Read GetSelectedColor;
- property MarginWidth: longint Read FMarginWidth Write SetMarginWidth;
- property CursorHeight: longint Read FCursorHeight Write SetCursorHeight;
+ property MarginWidth: longint Read FMarginWidth Write SetMarginWidth default 5;
+ property CursorHeight: longint Read FCursorHeight Write SetCursorHeight default 10;
property OnChange: TNotifyEvent Read FOnChange Write FOnChange;
end;
@@ -197,12 +201,16 @@ begin
// but draw an outline
Canvas.SetLineStyle(1, lsDash);
Canvas.DrawRectangle(GetClientRect);
+ Canvas.SetLineStyle(1, lsSolid);
+ Canvas.Color := clUIDesignerGreen;
+ Canvas.FillArc(FMarginWidth, FMarginWidth, DrawWidth, DrawHeight, 0, 360);
Canvas.Color := clHilite1;
- Canvas.DrawArc(Width div 2, Height div 2, DrawWidth div 2 + 1,
- DrawHeight div 2 + 1, 45, 180);
+ Canvas.DrawArc(FMarginWidth, FMarginWidth, DrawWidth, DrawHeight, 45, 180);
Canvas.Color := clShadow1;
- Canvas.DrawArc(Width div 2, Height div 2, DrawWidth div 2 + 1,
- DrawHeight div 2 + 1, 225, 180);
+ Canvas.DrawArc(FMarginWidth, FMarginWidth, DrawWidth, DrawHeight, 225, 180);
+ Canvas.TextColor := clShadow1;
+ Canvas.DrawText(5, 5, Name + ': ' + ClassName);
+ DrawCursor;
Exit; //==>
end;
@@ -427,13 +435,19 @@ begin
begin
// when designing just draw
// a rectangle to indicate
+ Canvas.Color := clBlack;
Canvas.SetLineStyle(1, lsDash);
Canvas.DrawRectangle(GetClientRect);
if (Width < MarginWidth * 2) or (Height < MarginWidth * 2) then
Exit; //==>
r := GetClientRect;
- InflateRect(r, FMarginWidth, FMarginWidth);
+ InflateRect(r, -FMarginWidth, -FMarginWidth);
+ Canvas.Color := clShadow1;
+ Canvas.SetLineStyle(1, lsSolid);
Canvas.DrawRectangle(r);
+ Canvas.TextColor := clShadow1;
+ Canvas.DrawText(5, 5, Width, Height, Name + ': ' + ClassName, TextFlagsDflt + [txtWrap]);
+ DrawCursor;
exit;
end;
@@ -494,7 +508,7 @@ begin
inherited Create(AOwner);
FMarginWidth := 5;
FValue := 1.0;
- Width := 100;
+ Width := 80;
Height := 100;
Name := 'ValueBar';
FCursorHeight := 10;
diff --git a/src/gui/fpg_combobox.pas b/src/gui/fpg_combobox.pas
index 632a4918..5afbf326 100644
--- a/src/gui/fpg_combobox.pas
+++ b/src/gui/fpg_combobox.pas
@@ -135,8 +135,11 @@ type
TfpgComboBox = class(TfpgBaseStaticCombo)
published
+ property AcceptDrops;
+ property Align;
property BackgroundColor default clBoxColor;
property DropDownCount;
+ property Enabled;
property ExtraHint;
property FocusItem;
property FontDesc;
@@ -153,6 +156,10 @@ type
property Width;
property OnChange;
property OnCloseUp;
+ property OnDragDrop;
+ property OnDragEnter;
+ property OnDragLeave;
+ property OnDragStartDetected;
property OnDropDown;
property OnEnter;
property OnExit;
diff --git a/src/gui/fpg_dialogs.pas b/src/gui/fpg_dialogs.pas
index 73c668c3..a190cf43 100644
--- a/src/gui/fpg_dialogs.pas
+++ b/src/gui/fpg_dialogs.pas
@@ -50,7 +50,10 @@ uses
fpg_tree,
fpg_ColorWheel,
fpg_spinedit,
- fpg_tab;
+ fpg_tab,
+ fpg_menu,
+ fpg_iniutils,
+ fpg_imagelist;
type
TfpgMsgDlgType = (mtAbout, mtWarning, mtError, mtInformation, mtConfirmation,
@@ -79,22 +82,27 @@ type
TfpgMessageBox = class(TfpgForm)
private
+ {@VFD_HEAD_BEGIN: MessageBox}
+ FButton: TfpgButton;
+ {@VFD_HEAD_END: MessageBox}
FLines: TStringList;
FFont: TfpgFont;
FTextY: integer;
FLineHeight: integer;
FMaxLineWidth: integer;
- FButton: TfpgButton;
FCentreText: Boolean;
- protected
- procedure HandleKeyPress(var keycode: word; var shiftstate: TShiftState; var consumed: boolean); override;
- procedure HandlePaint; override;
- procedure HandleShow; override;
+ procedure FormPaint(Sender: TObject);
+ procedure FormShow(Sender: TObject);
+ procedure FormKeyPressed(Sender: TObject; var KeyCode: word; var ShiftState: TShiftState; var Consumed: boolean);
+ function GetFontDesc: string;
+ procedure SetFontDesc(const AValue: string);
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
+ procedure AfterCreate; override;
procedure SetMessage(AMessage: string);
property CentreText: Boolean read FCentreText write FCentreText default False;
+ property FontDesc: string read GetFontDesc write SetFontDesc;
end;
@@ -153,6 +161,8 @@ type
btnUpDir: TfpgButton;
btnDirNew: TfpgButton;
btnShowHidden: TfpgButton;
+ btnGoHome: TfpgButton;
+ btnBookmark: TfpgButton;
pnlFileInfo: TfpgPanel;
edFilename: TfpgEdit;
chlFilter: TfpgComboBox;
@@ -162,6 +172,8 @@ type
FFilterList: TStringList;
FFilter: string;
FInitialDir: string;
+ FBookmarkMenu: TfpgPopupMenu;
+ FIni: TfpgIniFile;
procedure SetFilter(const Value: string);
function GetFontDesc: string;
function GetShowHidden: boolean;
@@ -177,9 +189,14 @@ type
procedure DirChange(Sender: TObject);
procedure UpDirClick(Sender: TObject);
procedure btnDirNewClicked(Sender: TObject);
+ procedure btnGoHomeClicked(Sender: TObject);
+ procedure btnBookmarkClicked(Sender: TObject);
procedure edFilenameChanged(Sender: TObject);
procedure UpdateButtonState;
function HighlightFile(const AFilename: string): boolean;
+ function CreatePopupMenu: TfpgPopupMenu;
+ procedure BookmarkItemClicked(Sender: TObject);
+ procedure ShowConfigureBookmarks;
protected
procedure HandleKeyPress(var keycode: word; var shiftstate: TShiftState; var consumed: boolean); override;
procedure btnOKClick(Sender: TObject); override;
@@ -195,7 +212,6 @@ type
property InitialDir: string read FInitialDir write SetInitialDir;
property ShowHidden: boolean read GetShowHidden write SetShowHidden;
end;
-
{ This lets us use a single include file for both the Interface and
Implementation sections. }
@@ -210,6 +226,7 @@ type
{$I charmapdialog.inc}
{$I colordialog.inc}
{$I inputquerydialog.inc}
+{$I managebookmarksdialog.inc}
@@ -403,21 +420,11 @@ end;
{ TfpgMessageBox }
-procedure TfpgMessageBox.HandleKeyPress(var keycode: word;
- var shiftstate: TShiftState; var consumed: boolean);
-begin
- inherited HandleKeyPress(keycode, shiftstate, consumed);
- if keycode = keyEscape then
- Close;
-end;
-
-procedure TfpgMessageBox.HandlePaint;
+procedure TfpgMessageBox.FormPaint(Sender: TObject);
var
n, y: integer;
tw: integer;
begin
- inherited HandlePaint;
-
Canvas.SetFont(FFont);
y := FTextY;
for n := 0 to FLines.Count-1 do
@@ -431,30 +438,42 @@ begin
end;
end;
-procedure TfpgMessageBox.HandleShow;
+procedure TfpgMessageBox.FormShow(Sender: TObject);
+begin
+ FButton.Text := cMsgDlgBtnText[mbOK]
+end;
+
+procedure TfpgMessageBox.FormKeyPressed(Sender: TObject; var KeyCode: word;
+ var ShiftState: TShiftState; var Consumed: boolean);
+begin
+ if KeyCode = keyEscape then
+ begin
+ Consumed := False;
+ Close;
+ end;
+end;
+
+function TfpgMessageBox.GetFontDesc: string;
+begin
+ Result := FFont.FontDesc;
+end;
+
+procedure TfpgMessageBox.SetFontDesc(const AValue: string);
begin
- inherited HandleShow;
- FButton.SetFocus;
+ FFont.Free;
+ FFont := fpgGetFont(AValue);
+ RePaint;
end;
constructor TfpgMessageBox.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
- WindowPosition := wpOneThirdDown;
- Sizeable := False;
-
FLines := TStringList.Create;
FFont := fpgGetFont('#Label1');
FTextY := 10;
FLineHeight := FFont.Height + 4;
- MinWidth := 200;
FMaxLineWidth := 500;
FCentreText := False;
-
- FButton := TfpgButton.Create(self);
- FButton.Text := cMsgDlgBtnText[mbOK];
- FButton.Width := 75;
- FButton.ModalResult := mrOK;
end;
destructor TfpgMessageBox.Destroy;
@@ -464,6 +483,38 @@ begin
inherited Destroy;
end;
+procedure TfpgMessageBox.AfterCreate;
+begin
+ inherited AfterCreate;
+ {@VFD_BODY_BEGIN: MessageBox}
+ Name := 'MessageBox';
+ SetPosition(330, 199, 419, 138);
+ WindowTitle := 'Message';
+ Hint := '';
+ WindowPosition := wpOneThirdDown;
+ MinWidth := 200;
+ Sizeable := False;
+ OnShow := @FormShow;
+ OnPaint := @FormPaint;
+ OnKeyPress := @FormKeyPressed;
+
+ FButton := TfpgButton.Create(self);
+ with FButton do
+ begin
+ Name := 'FButton';
+ SetPosition(8, 8, 75, 23);
+ Text := 'OK';
+ FontDesc := '#Label1';
+ Hint := '';
+ ImageName := '';
+ ModalResult := mrOK;
+ TabOrder := 1;
+ OnKeyPress := @FormKeyPressed;
+ end;
+
+ {@VFD_BODY_END: MessageBox}
+end;
+
procedure TfpgMessageBox.SetMessage(AMessage: string);
var
outw: integer;
@@ -698,6 +749,8 @@ var
end;
begin
+ if Desc = '' then
+ exit;
cp := 1;
c := Desc[1];
@@ -863,6 +916,7 @@ begin
Items.Add('48');
Items.Add('64');
Items.Add('72');
+ FocusItem := 4; // 10 point font
OnChange := @OnParamChange;
end;
@@ -1016,7 +1070,7 @@ begin
chlDir := TfpgComboBox.Create(self);
with chlDir do
begin
- SetPosition(8, 12, 526, 22);
+ SetPosition(8, 12, 484, 24);
Anchors := [anLeft, anRight, anTop];
FontDesc := '#List';
OnChange := @DirChange;
@@ -1027,6 +1081,7 @@ begin
begin
SetPosition(8, 44, 622, 200);
Anchors := [anLeft, anRight, anTop, anBottom];
+ Options := [go_AlternativeColor, go_SmoothScroll];
OnRowChange := @ListChanged;
OnDoubleClick := @GridDblClicked;
end;
@@ -1034,44 +1089,75 @@ begin
btnUpDir := TfpgButton.Create(self);
with btnUpDir do
begin
- SetPosition(540, 11, 26, 24);
+ SetPosition(500, 11, 24, 24);
Anchors := [anRight, anTop];
Text := '';
FontDesc := '#Label1';
ImageName := 'stdimg.folderup'; // Do NOT localize
- ModalResult := mrNone;
Focusable := False;
+ ImageSpacing := 0;
+ ImageMargin := -1;
OnClick := @UpDirClick;
end;
btnDirNew := TfpgButton.Create(self);
with btnDirNew do
begin
- SetPosition(572, 11, 26, 24);
+ SetPosition(526, 11, 24, 24);
Anchors := [anRight, anTop];
Text := '';
FontDesc := '#Label1';
ImageName := 'stdimg.foldernew'; // Do NOT localize
- ModalResult := mrNone;
Focusable := False;
+ ImageSpacing := 0;
+ ImageMargin := -1;
OnClick := @btnDirNewClicked;
end;
btnShowHidden := TfpgButton.Create(self);
with btnShowHidden do
begin
- SetPosition(604, 11, 26, 24);
+ SetPosition(552, 11, 24, 24);
Anchors := [anRight, anTop];
Text := '';
FontDesc := '#Label1';
ImageName := 'stdimg.hidden'; // Do NOT localize
- ModalResult := mrNone;
Focusable := False;
GroupIndex := 1;
AllowAllUp := True;
+ ImageSpacing := 0;
+ ImageMargin := -1;
OnClick := @DirChange;
end;
+ btnGoHome := TfpgButton.Create(self);
+ with btnGoHome do
+ begin
+ SetPosition(578, 11, 24, 24);
+ Anchors := [anRight, anTop];
+ Text := '';
+ FontDesc := '#Label1';
+ ImageName := 'stdimg.folderhome'; // Do NOT localize
+ Focusable := False;
+ ImageSpacing := 0;
+ ImageMargin := -1;
+ OnClick := @btnGoHomeClicked;
+ end;
+
+ btnBookmark := TfpgButton.Create(self);
+ with btnBookmark do
+ begin
+ SetPosition(604, 11, 24, 24);
+ Anchors := [anRight, anTop];
+ Text := '';
+ FontDesc := '#Label1';
+ ImageName := 'stdimg.bookmark'; // Do NOT localize
+ Focusable := False;
+ ImageSpacing := 0;
+ ImageMargin := -1;
+ OnClick := @btnBookmarkClicked;
+ end;
+
{ Create lower Panel details }
pnlFileInfo := TfpgPanel.Create(self);
@@ -1210,6 +1296,8 @@ end;
destructor TfpgFileDialog.Destroy;
begin
+ FIni.Free;
+ FBookmarkMenu.Free;
FFilterList.Free;
inherited Destroy;
end;
@@ -1252,6 +1340,19 @@ begin
end;
end;
+procedure TfpgFileDialog.btnGoHomeClicked(Sender: TObject);
+begin
+ SetCurrentDirectory(GetUserDir);
+end;
+
+procedure TfpgFileDialog.btnBookmarkClicked(Sender: TObject);
+begin
+ if Assigned(FBookmarkMenu) then
+ FBookmarkMenu.Free;
+ FBookmarkMenu := CreatePopupMenu;
+ FBookmarkMenu.ShowAt(self, btnBookmark.Left, btnBookmark.Bottom);
+end;
+
procedure TfpgFileDialog.edFilenameChanged(Sender: TObject);
begin
UpdateButtonState;
@@ -1299,6 +1400,9 @@ begin
grid.Update;
grid.SetFocus;
+
+ if FOpenMode then // when saving file, we want to keep file name
+ edFilename.Clear;
end;
function TfpgFileDialog.HighlightFile(const AFilename: string): boolean;
@@ -1317,6 +1421,75 @@ begin
Result := False;
end;
+function TfpgFileDialog.CreatePopupMenu: TfpgPopupMenu;
+var
+ i: integer;
+ s: TfpgString;
+ lst: TStringList;
+ mi: TfpgMenuItem;
+begin
+ Result := TfpgPopupMenu.Create(nil);
+ with Result do
+ begin
+ lst := TStringList.Create;
+ try
+ if not Assigned(FIni) then
+ FIni := TfpgINIFile.CreateExt(fpgGetToolkitConfigDir + FPG_BOOKMARKS_FILE);
+ FIni.ReadSection(FPG_BOOKMARK_SECTION, lst);
+ // add previous bookmarks to menu
+ for i := 0 to lst.Count-1 do
+ begin
+ mi := AddMenuItem(lst[i], '', @BookmarkItemClicked);
+ end;
+ // Now add static items
+ if lst.Count > 0 then
+ AddMenuItem('-', '', nil);
+ finally
+ lst.Free;
+ end;
+ mi := AddMenuItem(rsAddCurrentDirectory, '', @BookmarkItemClicked);
+ mi.Tag := 1;
+ mi := AddMenuItem(rsConfigureBookmarks + '...', '', @BookmarkItemClicked);
+ mi.Tag := 2;
+ end;
+end;
+
+procedure TfpgFileDialog.BookmarkItemClicked(Sender: TObject);
+var
+ mi: TfpgMenuItem;
+ s: TfpgString;
+begin
+ if Sender is TfpgMenuItem then
+ mi := TfpgMenuItem(Sender);
+ if mi = nil then
+ Exit;
+ if mi.Tag = 1 then // Add current directory
+ begin
+ FIni.WriteString(FPG_BOOKMARK_SECTION, grid.FileList.DirectoryName, grid.FileList.DirectoryName);
+ end
+ else if mi.Tag = 2 then // configure bookmarks
+ begin
+ ShowConfigureBookmarks;
+ end
+ else
+ begin // bookmark has been clicked
+ s := FIni.ReadString(FPG_BOOKMARK_SECTION, mi.Text, '.');
+ SetCurrentDirectory(s);
+ end;
+end;
+
+procedure TfpgFileDialog.ShowConfigureBookmarks;
+var
+ frm: TConfigureBookmarksForm;
+begin
+ frm := TConfigureBookmarksForm.Create(FIni);
+ try
+ frm.ShowModal;
+ finally
+ frm.Free;
+ end;
+end;
+
procedure TfpgFileDialog.ProcessFilterString;
var
p: integer;
@@ -1369,7 +1542,7 @@ begin
if (i >= 0) and (i < FFilterList.Count) then
Result := FFilterList[i]
else
- Result := '*';
+ Result := AllFilesMask;
end;
function TfpgFileDialog.RunOpenFile: boolean;
@@ -1378,12 +1551,12 @@ var
fname: string;
begin
FOpenMode := True;
- sdir := ExtractFileDir(FileName);
+ sdir := fpgExtractFileDir(FileName);
if sdir = '' then
sdir := '.';
SetCurrentDirectory(sdir);
- fname := ExtractFileName(FileName);
+ fname := fpgExtractFileName(FileName);
if not HighlightFile(fname) then
edFilename.Text := fname;
@@ -1436,6 +1609,7 @@ end;
{$I charmapdialog.inc}
{$I colordialog.inc}
{$I inputquerydialog.inc}
+{$I managebookmarksdialog.inc}
end.
diff --git a/src/gui/fpg_edit.pas b/src/gui/fpg_edit.pas
index 5dd25fb0..dd7958ab 100644
--- a/src/gui/fpg_edit.pas
+++ b/src/gui/fpg_edit.pas
@@ -159,10 +159,13 @@ type
public
property PopupMenu; // UI Designer doesn't fully support it yet
published
+ property AcceptDrops;
+ property Align;
property AutoSelect;
property AutoSize;
property BackgroundColor default clBoxColor;
property BorderStyle;
+ property Enabled;
property ExtraHint;
property FontDesc;
property HeightMargin;
@@ -179,6 +182,10 @@ type
property Text;
property TextColor;
property OnChange;
+ property OnDragEnter;
+ property OnDragLeave;
+ property OnDragDrop;
+ property OnDragStartDetected;
property OnEnter;
property OnExit;
property OnKeyPress;
@@ -220,20 +227,11 @@ type
Still to implement !!}
property CustomDecimalSeparator: TfpgChar read FDecimalseparator write SetDecimalSeparator;
property CustomThousandSeparator: TfpgChar read FThousandSeparator write SetThousandSeparator;
- property NegativeColor: TfpgColor read FNegativeColor write SetNegativeColor;
+ property NegativeColor: TfpgColor read FNegativeColor write SetNegativeColor default clRed;
property HideSelection;
// property MaxLength; { probably MaxValue and MinValue }
property TabOrder;
- property TextColor;
property ShowThousand: boolean read FShowThousand write FShowThousand default False;
- property OnChange;
- property OnEnter;
- property OnExit;
- property OnKeyPress;
- property OnMouseEnter;
- property OnMouseExit;
- property OnPaint;
- property OnShowHint;
public
constructor Create(AOwner: TComponent); override;
published
@@ -254,7 +252,9 @@ type
property OldColor;
property Text;
published
+ property Align;
property CustomThousandSeparator;
+ property Enabled;
property Hint;
property NegativeColor;
property ParentShowHint;
@@ -292,9 +292,11 @@ type
property OldColor;
property Text;
published
+ property Align;
property CustomDecimalSeparator;
property CustomThousandSeparator;
property Decimals: integer read FDecimals write SetDecimals default -1;
+ property Enabled;
property FixedDecimals: boolean read FFixedDecimals write SetFixedDecimals default False;
property Hint;
property NegativeColor;
@@ -331,9 +333,11 @@ type
property OldColor;
property Text;
published
+ property Align;
property CustomDecimalSeparator;
property CustomThousandSeparator;
property Decimals: integer read FDecimals write SetDecimals default 2;
+ property Enabled;
property Hint;
property NegativeColor;
property ParentShowHint;
@@ -341,6 +345,7 @@ type
property ShowHint;
property ShowThousand default True;
property TabOrder;
+ property TextColor;
property Value: Currency read GetValue write SetValue;
property OnChange;
property OnEnter;
@@ -1178,7 +1183,7 @@ procedure TfpgBaseEdit.DefaultPopupPaste(Sender: TObject);
begin
if ReadOnly then
Exit;
- PasteFromClipboard
+ PasteFromClipboard;
end;
procedure TfpgBaseEdit.DefaultPopupClearAll(Sender: TObject);
@@ -1643,6 +1648,7 @@ procedure TfpgBaseNumericEdit.SetNegativeColor(const AValue: TfpgColor);
begin
if FNegativeColor=AValue then exit;
FNegativeColor:=AValue;
+ FormatEdit;
end;
procedure TfpgBaseNumericEdit.SetThousandSeparator(const AValue: TfpgChar);
@@ -1799,8 +1805,8 @@ begin
FAlignment := taRightJustify;
FDecimalSeparator := DecimalSeparator;
FThousandSeparator := ThousandSeparator;
- NegativeColor := clRed;
- OldColor := TextColor;
+ FNegativeColor := clRed;
+ FOldColor := TextColor;
end;
{ TfpgEditInteger }
diff --git a/src/gui/fpg_editbtn.pas b/src/gui/fpg_editbtn.pas
index 70c6da00..0cba4f18 100644
--- a/src/gui/fpg_editbtn.pas
+++ b/src/gui/fpg_editbtn.pas
@@ -70,14 +70,16 @@ type
public
constructor Create(AOwner: TComponent); override;
published
- property ExtraHint;
- property FileName: TfpgString read GetFileName write SetFileName;
- property InitialDir: TfpgString read FInitialDir write FInitialDir;
- property Filter: TfpgString read FFilter write SetFilter;
- property ReadOnly;
- property TabOrder;
- property OnButtonClick;
- property OnShowHint;
+ property Align;
+ property Enabled;
+ property ExtraHint;
+ property FileName: TfpgString read GetFileName write SetFileName;
+ property InitialDir: TfpgString read FInitialDir write FInitialDir;
+ property Filter: TfpgString read FFilter write SetFilter;
+ property ReadOnly;
+ property TabOrder;
+ property OnButtonClick;
+ property OnShowHint;
end;
@@ -92,13 +94,15 @@ type
public
constructor Create(AOwner: TComponent); override;
published
- property Directory: TfpgString read GetDirectory write SetDirectory;
- property ExtraHint;
- property RootDirectory: TfpgString read FRootDirectory write FRootDirectory;
- property ReadOnly;
- property TabOrder;
- property OnButtonClick;
- property OnShowHint;
+ property Align;
+ property Directory: TfpgString read GetDirectory write SetDirectory;
+ property Enabled;
+ property ExtraHint;
+ property RootDirectory: TfpgString read FRootDirectory write FRootDirectory;
+ property ReadOnly;
+ property TabOrder;
+ property OnButtonClick;
+ property OnShowHint;
end;
@@ -111,11 +115,14 @@ type
public
constructor Create(AOwner: TComponent); override;
published
- property FontDesc: TfpgString read GetFontDesc write SetFontDesc;
- property ReadOnly;
- property TabOrder;
- property OnButtonClick;
- property OnShowHint;
+ property Align;
+ property Enabled;
+ property ExtraHint;
+ property FontDesc: TfpgString read GetFontDesc write SetFontDesc;
+ property ReadOnly;
+ property TabOrder;
+ property OnButtonClick;
+ property OnShowHint;
end;
diff --git a/src/gui/fpg_editcombo.pas b/src/gui/fpg_editcombo.pas
index 20b6ee8d..4dd011d0 100644
--- a/src/gui/fpg_editcombo.pas
+++ b/src/gui/fpg_editcombo.pas
@@ -58,6 +58,7 @@ uses
fpg_main,
fpg_widget,
fpg_popupwindow,
+ fpg_menu,
fpg_combobox;
type
@@ -72,10 +73,14 @@ type
FSelectedItem: integer;
FMaxLength: integer;
FNewItem: boolean;
+ FDefaultPopupMenu: TfpgPopupMenu;
procedure SetAllowNew(const AValue: TAllowNew);
procedure InternalBtnClick(Sender: TObject);
procedure InternalListBoxSelect(Sender: TObject);
procedure InternalListBoxKeyPress(Sender: TObject; var keycode: word; var shiftstate: TShiftState; var consumed: Boolean);
+ procedure DefaultPopupInsertFromCharmap(Sender: TObject);
+ procedure DoPaste(const AText: TfpgString);
+ procedure SetDefaultPopupMenuItemsState;
protected
FDropDown: TfpgPopupWindow;
FDrawOffset: integer;
@@ -86,11 +91,14 @@ type
function GetText: string; virtual;
function HasText: boolean; virtual;
procedure SetText(const AValue: string); virtual;
+ procedure ShowDefaultPopupMenu(const x, y: integer; const shiftstate: TShiftState); virtual;
procedure HandleResize(AWidth, AHeight: TfpgCoord); override;
procedure HandleKeyChar(var AText: TfpgChar; var shiftstate: TShiftState; var consumed: Boolean); override;
procedure HandleKeyPress(var keycode: word; var shiftstate: TShiftState; var consumed: Boolean); override;
procedure HandleLMouseDown(x, y: integer; shiftstate: TShiftState); override;
procedure HandleLMouseUp(x, y: integer; shiftstate: TShiftState); override;
+ procedure HandleRMouseDown(x, y: integer; shiftstate: TShiftState); override;
+ procedure HandleRMouseUp(x, y: integer; shiftstate: TShiftState); override;
procedure HandlePaint; override;
property AutoCompletion: Boolean read FAutocompletion write FAutoCompletion default False;
property AllowNew: TAllowNew read FAllowNew write SetAllowNew default anNo;
@@ -109,6 +117,7 @@ type
TfpgEditCombo = class(TfpgBaseEditCombo)
published
+ property Align;
property AllowNew;
property AutoCompletion;
property BackgroundColor;
@@ -145,6 +154,14 @@ uses
fpg_listbox,
fpg_dialogs;
+const
+ // internal popupmenu item names
+ //ipmCut = 'miDefaultCut';
+ //ipmCopy = 'miDefaultCopy';
+ //ipmPaste = 'miDefaultPaste';
+ //ipmClearAll = 'miDefaultClearAll';
+ ipmCharmap = 'miDefaultCharmap';
+
var
OriginalFocusRoot: TfpgWidget;
@@ -372,6 +389,74 @@ begin
Repaint;
end;
+procedure TfpgBaseEditCombo.DefaultPopupInsertFromCharmap(Sender: TObject);
+var
+ s: TfpgString;
+begin
+ if FAllowNew= anNo then
+ Exit;
+ s := fpgShowCharMap;
+ if s <> '' then
+ //SetText(s);
+ DoPaste(s);
+end;
+
+procedure TfpgBaseEditCombo.DoPaste(const AText: TfpgString);
+var
+ s: string;
+ prevval: TfpgString;
+ i: integer;
+begin
+ prevval := FText;
+ s := AText;
+ if (FMaxLength <= 0) or (UTF8Length(FText) < FMaxLength) then
+ begin
+ UTF8Insert(s, FText, FCursorPos + UTF8Length(s));
+ Inc(FCursorPos);
+ FSelStart := FCursorPos;
+ if Assigned(FDropDown) then
+ FDropDown.Close;
+ FSelectedItem := -1;
+ for i := 0 to FItems.Count-1 do
+ if SameText(UTF8Copy(FItems.Strings[i], 1, UTF8Length(FText)), FText) then
+ begin
+ FSelectedItem:= i;
+ DoDropDown;
+ Break;
+ end;
+ if FSelectedItem = -1 then
+ FNewItem:= True;
+ end;
+ Repaint;
+ if prevval <> Text then
+ DoOnChange;
+end;
+
+procedure TfpgBaseEditCombo.SetDefaultPopupMenuItemsState;
+var
+ i: integer;
+ itm: TfpgMenuItem;
+begin
+ //for i := 0 to FDefaultPopupMenu.ComponentCount-1 do
+ //begin
+ // if FDefaultPopupMenu.Components[i] is TfpgMenuItem then
+ // begin
+ // itm := TfpgMenuItem(FDefaultPopupMenu.Components[i]);
+ // // enabled/disable menu items
+ // if itm.Name = ipmCut then
+ // itm.Enabled := (not ReadOnly) and (FSelOffset <> 0)
+ // else if itm.Name = ipmCopy then
+ // itm.Enabled := FSelOffset <> 0
+ // else if itm.Name = ipmPaste then
+ // itm.Enabled := (not ReadOnly) and (fpgClipboard.Text <> '')
+ // else if itm.Name = ipmClearAll then
+ // itm.Enabled := (not ReadOnly) and (Text <> '')
+ // else if itm.Name = ipmCharmap then
+ // itm.Enabled := (not ReadOnly);
+ // end;
+ //end;
+end;
+
procedure TfpgBaseEditCombo.SetText(const AValue: string);
var
i: integer;
@@ -398,6 +483,32 @@ begin
end;
end;
+procedure TfpgBaseEditCombo.ShowDefaultPopupMenu(const x, y: integer;
+ const shiftstate: TShiftState);
+var
+ itm: TfpgMenuItem;
+begin
+ if not Assigned(FDefaultPopupMenu) then
+ begin
+ FDefaultPopupMenu := TfpgPopupMenu.Create(nil);
+ //itm := FDefaultPopupMenu.AddMenuItem(rsCut, '', @DefaultPopupCut);
+ //itm.Name := ipmCut;
+ //itm := FDefaultPopupMenu.AddMenuItem(rsCopy, '', @DefaultPopupCopy);
+ //itm.Name := ipmCopy;
+ //itm := FDefaultPopupMenu.AddMenuItem(rsPaste, '', @DefaultPopupPaste);
+ //itm.Name := ipmPaste;
+ //itm := FDefaultPopupMenu.AddMenuItem(rsDelete, '', @DefaultPopupClearAll);
+ //itm.Name := ipmClearAll;
+ //itm := FDefaultPopupMenu.AddMenuItem('-', '', nil);
+ //itm.Name := 'N1';
+ itm := FDefaultPopupMenu.AddMenuItem(rsInsertFromCharacterMap, '', @DefaultPopupInsertFromCharmap);
+ itm.Name := ipmCharmap;
+ end;
+
+ SetDefaultPopupMenuItemsState;
+ FDefaultPopupMenu.ShowAt(self, x, y);
+end;
+
procedure TfpgBaseEditCombo.HandleResize(AWidth, AHeight: TfpgCoord);
begin
inherited HandleResize(AWidth, AHeight);
@@ -595,6 +706,25 @@ begin
PaintInternalButton;
end;
+procedure TfpgBaseEditCombo.HandleRMouseDown(x, y: integer;
+ shiftstate: TShiftState);
+begin
+ // keyMenu was pressed
+ if shiftstate = [ssExtra1] then
+ HandleRMouseUp(x, y, [])
+ else
+ inherited HandleRMouseDown(x, y, shiftstate);
+end;
+
+procedure TfpgBaseEditCombo.HandleRMouseUp(x, y: integer; shiftstate: TShiftState);
+begin
+ inherited HandleRMouseUp(x, y, shiftstate);
+ //if Assigned(PopupMenu) then
+ // PopupMenu.ShowAt(self, x, y)
+ //else
+ ShowDefaultPopupMenu(x, y, ShiftState);
+end;
+
procedure TfpgBaseEditCombo.HandlePaint;
var
r: TfpgRect;
@@ -770,7 +900,8 @@ end;
destructor TfpgBaseEditCombo.Destroy;
begin
- FDropDown.Free;
+ if not Assigned(FDropDown) then
+ FDropDown.Free;
inherited Destroy;
end;
diff --git a/src/gui/fpg_form.pas b/src/gui/fpg_form.pas
index 57c156a6..2eb6e899 100644
--- a/src/gui/fpg_form.pas
+++ b/src/gui/fpg_form.pas
@@ -51,6 +51,8 @@ type
FOnHide: TNotifyEvent;
FOnShow: TNotifyEvent;
FOnHelp: TfpgHelpEvent;
+ FDNDEnabled: boolean;
+ procedure SetDNDEnabled(const AValue: boolean);
protected
FModalResult: TfpgModalResult;
FParentForm: TfpgBaseForm;
@@ -71,6 +73,7 @@ type
procedure DoOnClose(var CloseAction: TCloseAction); virtual;
function DoOnHelp(AHelpType: THelpType; AHelpContext: THelpContext; const AHelpKeyword: String; const AHelpFile: String; var AHandled: Boolean): Boolean; virtual;
// properties
+ property DNDEnabled: boolean read FDNDEnabled write SetDNDEnabled default False;
property Sizeable: boolean read FSizeable write FSizeable;
property ModalResult: TfpgModalResult read FModalResult write FModalResult;
property FullScreen: boolean read FFullScreen write FFullScreen default False;
@@ -106,6 +109,7 @@ type
TfpgForm = class(TfpgBaseForm)
published
property BackgroundColor;
+ property DNDEnabled;
property FullScreen;
property Height;
property Hint;
@@ -133,6 +137,7 @@ type
property OnEnter;
property OnExit;
property OnHide;
+ property OnKeyPress;
property OnMouseDown;
property OnMouseEnter;
property OnMouseExit;
@@ -153,7 +158,11 @@ implementation
uses
fpg_main,
fpg_popupwindow,
- fpg_menu;
+ fpg_menu
+ {$IFDEF DEBUG}
+ ,dbugintf
+ {$ENDIF}
+ ;
type
// to access protected methods
@@ -180,6 +189,13 @@ end;
{ TfpgBaseForm }
+procedure TfpgBaseForm.SetDNDEnabled(const AValue: boolean);
+begin
+ if FDNDEnabled = AValue then exit;
+ FDNDEnabled := AValue;
+ DoDNDEnabled(AValue);
+end;
+
procedure TfpgBaseForm.SetWindowTitle(const ATitle: string);
begin
FWindowTitle := ATitle;
@@ -188,9 +204,14 @@ end;
procedure TfpgBaseForm.MsgActivate(var msg: TfpgMessageRec);
begin
-// writeln('BaseForm - MsgActivate');
+ {$IFDEF DEBUG}
+ SendDebug(Classname + ' ' + Name + '.BaseForm - MsgActivate');
+ {$ENDIF}
if (fpgApplication.TopModalForm = nil) or (fpgApplication.TopModalForm = self) then
begin
+ {$IFDEF DEBUG}
+ SendDebug('Inside if block');
+ {$ENDIF}
FocusRootWidget := self;
if FFormDesigner <> nil then
@@ -275,6 +296,7 @@ begin
FModalResult := mrNone;
FFullScreen := False;
FIsContainer := True;
+ FDNDEnabled := False;
end;
destructor TfpgBaseForm.Destroy;
@@ -386,7 +408,9 @@ var
i: integer;
wg: TfpgWidget;
begin
-// writeln(Classname, '.Keypress');
+ {$IFDEF DEBUG}
+ SendDebug(Classname + '.Keypress');
+ {$ENDIF}
// find the TfpgMenuBar
if not consumed then
begin
diff --git a/src/gui/fpg_grid.pas b/src/gui/fpg_grid.pas
index 112a1f33..320c2408 100644
--- a/src/gui/fpg_grid.pas
+++ b/src/gui/fpg_grid.pas
@@ -56,6 +56,7 @@ type
property Font;
property HeaderFont;
published
+ property Align;
property ColumnCount;
property Columns;
property FocusRow;
@@ -125,6 +126,7 @@ type
public
property Font;
published
+ property Align;
property AlternateBGColor;
property BackgroundColor;
// property ColResizing;
@@ -133,11 +135,13 @@ type
property ColumnWidth;
property DefaultColWidth;
property DefaultRowHeight;
+ property Enabled;
property FocusCol;
property FocusRow;
property FontDesc;
property HeaderFontDesc;
property HeaderHeight;
+ property HeaderStyle;
property Hint;
property Options;
property ParentShowHint;
diff --git a/src/gui/fpg_hyperlink.pas b/src/gui/fpg_hyperlink.pas
index 2c850a97..5d84c718 100644
--- a/src/gui/fpg_hyperlink.pas
+++ b/src/gui/fpg_hyperlink.pas
@@ -50,6 +50,7 @@ type
constructor Create(AOwner: TComponent); override;
procedure GoHyperLink;
published
+ property Align;
property Alignment;
property Autosize;
property FontDesc;
diff --git a/src/gui/fpg_iniutils.pas b/src/gui/fpg_iniutils.pas
index 1c8fe45a..857ccf63 100644
--- a/src/gui/fpg_iniutils.pas
+++ b/src/gui/fpg_iniutils.pas
@@ -52,6 +52,7 @@ function gINI(const AFileName: string = ''): TfpgINIFile;
implementation
uses
+ fpg_base,
fpg_main,
fpg_constants,
fpg_utils;
@@ -71,12 +72,12 @@ end;
constructor TfpgINIFile.CreateExt(const AFileName: string; AReadOnly: Boolean);
var
- lDir: string;
- lFileName: string;
+ lDir: TfpgString;
+ lFileName: TfpgString;
begin
FReadOnly := AReadOnly;
- lDir := ExtractFileDir(AFileName);
- lFileName := ExtractFileName(AFileName);
+ lDir := fpgExtractFileDir(AFileName);
+ lFileName := fpgExtractFileName(AFileName);
if lDir = '' then
lDir := GetAppConfigDir(False);
@@ -84,7 +85,7 @@ begin
lDir := lDir + PathDelim;
{ We used a non-Global config dir, so should be able to create the dir }
- if not ForceDirectories(lDir) then
+ if not fpgForceDirectories(lDir) then
raise Exception.CreateFmt(rsErrFailedToCreateDir, [lDir]);
diff --git a/src/gui/fpg_label.pas b/src/gui/fpg_label.pas
index 409116b9..0f9c8b4b 100644
--- a/src/gui/fpg_label.pas
+++ b/src/gui/fpg_label.pas
@@ -68,9 +68,12 @@ type
TfpgLabel = class(TfpgCustomLabel)
published
+ property AcceptDrops;
+ property Align;
property Alignment;
property AutoSize;
property BackgroundColor;
+ property Enabled;
property FontDesc;
property Height;
property Hint;
@@ -90,6 +93,10 @@ type
property Width;
property WrapText;
property OnClick;
+ property OnDragEnter;
+ property OnDragLeave;
+ property OnDragDrop;
+ property OnDragStartDetected;
property OnDoubleClick;
property OnMouseDown;
property OnMouseEnter;
diff --git a/src/gui/fpg_listbox.pas b/src/gui/fpg_listbox.pas
index 4b6d162e..a0cb8e93 100644
--- a/src/gui/fpg_listbox.pas
+++ b/src/gui/fpg_listbox.pas
@@ -92,8 +92,8 @@ type
property AutoHeight: boolean read FAutoHeight write SetAutoHeight default False;
property FocusItem: integer read FFocusItem write SetFocusItem;
property FontDesc: string read GetFontDesc write SetFontDesc;
- property HotTrack: boolean read FHotTrack write FHotTrack;
- property PopupFrame: boolean read FPopupFrame write SetPopupFrame;
+ property HotTrack: boolean read FHotTrack write FHotTrack default False;
+ property PopupFrame: boolean read FPopupFrame write SetPopupFrame default False;
property DragToReorder: boolean read FDragToReorder write FDragToReorder default False;
public
constructor Create(AOwner: TComponent); override;
@@ -117,6 +117,8 @@ type
TfpgTextListBox = class(TfpgBaseListBox)
protected
FItems: TStringList;
+ function GetText: string; virtual;
+ procedure SetText(const AValue: string); virtual;
procedure DrawItem(num: integer; rect: TfpgRect; flags: integer); override;
procedure Exchange(Index1, Index2: Integer); override;
procedure HandleKeyChar(var AText: TfpgChar; var shiftstate: TShiftState; var consumed: boolean); override;
@@ -125,16 +127,19 @@ type
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
function ItemCount: integer; override;
- function Text: string;
+ property Text: string read GetText write SetText stored False;
end;
// The standard strings listbox we will actually use in a GUI.
TfpgListBox = class(TfpgTextListBox)
published
+ property AcceptDrops;
+ property Align;
property AutoHeight;
property BackgroundColor default clListBox;
property DragToReorder;
+ property Enabled;
property FocusItem;
property FontDesc;
property Hint;
@@ -144,8 +149,19 @@ type
property PopupFrame;
property ShowHint;
property TabOrder;
+ property Text;
property TextColor;
+ property OnChange;
property OnDoubleClick;
+ property OnDragDrop;
+ property OnDragEnter;
+ property OnDragLeave;
+ property OnDragStartDetected;
+ property OnEnter;
+ property OnExit;
+ property OnKeyPress;
+ property OnScroll;
+ property OnSelect;
property OnShowHint;
end;
@@ -181,7 +197,7 @@ type
// procedure HandleKeyChar(var AText: TfpgChar; var shiftstate: TShiftState; var consumed: boolean); override;
property Items: TList read FItems;
property Color: TfpgColor read GetColor write SetColor;
- property ColorPalette: TfpgColorPalette read FColorPalette write SetColorPalette;
+ property ColorPalette: TfpgColorPalette read FColorPalette write SetColorPalette default cpStandardColors;
property ShowColorNames: Boolean read FShowColorNames write SetShowColorNames default True;
public
constructor Create(AOwner: TComponent); override;
@@ -192,11 +208,14 @@ type
TfpgColorListBox = class(TfpgBaseColorListBox)
published
+ property AcceptDrops;
+ property Align;
property AutoHeight;
property BackgroundColor default clListBox;
property Color;
property ColorPalette;
property DragToReorder;
+ property Enabled;
property FocusItem;
property FontDesc;
property Hint;
@@ -208,6 +227,10 @@ type
property ShowHint;
property TabOrder;
property TextColor;
+ property OnDragEnter;
+ property OnDragLeave;
+ property OnDragDrop;
+ property OnDragStartDetected;
end;
@@ -855,6 +878,35 @@ end;
{ TfpgTextListBox }
+function TfpgTextListBox.GetText: string;
+begin
+ if (ItemCount > 0) and (FocusItem <> -1) then
+ result := FItems[FocusItem]
+ else
+ result := '';
+end;
+
+procedure TfpgTextListBox.SetText(const AValue: string);
+var
+ i: integer;
+begin
+ if AValue = '' then
+ SetFocusItem(-1) // nothing selected
+ else
+ begin
+ for i := 0 to FItems.Count-1 do
+ begin
+ if SameText(Items.Strings[i], AValue) then
+ begin
+ SetFocusItem(i);
+ Exit; //==>
+ end;
+ end;
+ // if we get here, we didn't find a match
+ SetFocusItem(-1);
+ end;
+end;
+
procedure TfpgTextListBox.DrawItem(num: integer; rect: TfpgRect; flags: integer);
begin
//if num < 0 then
@@ -905,14 +957,6 @@ begin
result := FItems.Count;
end;
-function TfpgTextListBox.Text: string;
-begin
- if (ItemCount > 0) and (FocusItem <> -1) then
- result := FItems[FocusItem]
- else
- result := '';
-end;
-
{ TColorItem }
constructor TColorItem.Create (const AColorName: string; const AColorValue: TfpgColor);
diff --git a/src/gui/fpg_listview.pas b/src/gui/fpg_listview.pas
index 12ed4364..cd9268f4 100644
--- a/src/gui/fpg_listview.pas
+++ b/src/gui/fpg_listview.pas
@@ -249,7 +249,9 @@ type
function AddItem: TfpgLVItem;
function NewItem: TfpgLVItem;
published
+ property Align;
property Columns: TfpgLVColumns read FColumns;
+ property Enabled;
property HScrollBar: TfpgScrollBar read FHScrollBar;
property ItemHeight: Integer read GetItemHeight;
property ItemIndex: Integer read FItemIndex write SetItemIndex;
diff --git a/src/gui/fpg_memo.pas b/src/gui/fpg_memo.pas
index 37f21a42..789da3c3 100644
--- a/src/gui/fpg_memo.pas
+++ b/src/gui/fpg_memo.pas
@@ -60,12 +60,15 @@ type
FWrapping: boolean;
FLongestLineWidth: TfpgCoord;
FPopupMenu: TfpgPopupMenu;
+ FDefaultPopupMenu: TfpgPopupMenu;
+ FReadOnly: Boolean;
+ FUpdateCount: integer;
function GetFontDesc: string;
procedure SetFontDesc(const AValue: string);
procedure RecalcLongestLine;
procedure DeleteSelection;
procedure DoCopy;
- procedure DoPaste;
+ procedure DoPaste(const AText: TfpgString);
procedure AdjustCursor;
function LineCount: integer;
function GetLineText(linenum: integer): string;
@@ -81,10 +84,21 @@ type
function GetText: TfpgString;
procedure SetCursorLine(aValue: integer);
procedure UpdateScrollBarCoords;
+ procedure DefaultPopupCut(Sender: TObject);
+ procedure DefaultPopupCopy(Sender: TObject);
+ procedure DefaultPopupPaste(Sender: TObject);
+ procedure DefaultPopupClearAll(Sender: TObject);
+ procedure DefaultPopupInsertFromCharmap(Sender: TObject);
+ procedure SetDefaultPopupMenuItemsState;
+ procedure ShowDefaultPopupMenu(const x, y: integer; const shiftstate: TShiftState); virtual;
+ procedure SetReadOnly(const AValue: Boolean);
+ procedure ResetSelectionVariables;
+ procedure SetCursorPos(const AValue: integer);
protected
procedure HandleKeyChar(var AText: TfpgChar; var shiftstate: TShiftState; var consumed: boolean); override;
procedure HandleKeyPress(var keycode: word; var shiftstate: TShiftState; var consumed: boolean); override;
procedure HandleLMouseDown(x, y: integer; shiftstate: TShiftState); override;
+ procedure HandleRMouseDown(x, y: integer; shiftstate: TShiftState); override;
procedure HandleRMouseUp(x, y: integer; shiftstate: TShiftState); override;
procedure HandleMouseMove(x, y: integer; btnstate: word; shiftstate: TShiftState); override;
procedure HandleResize(dwidth, dheight: integer); override;
@@ -94,11 +108,19 @@ type
procedure HandleMouseEnter; override;
procedure HandleMouseExit; override;
procedure HandleHide; override;
+ procedure RePaint; override;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
procedure UpdateScrollBars;
- function SelectionText: string;
+ function SelectionText: TfpgString;
+ procedure CopyToClipboard;
+ procedure CutToClipboard;
+ procedure PasteFromClipboard;
+ procedure Clear;
+ procedure BeginUpdate;
+ procedure EndUpdate;
+ property CursorPos: integer read FCursorPos write SetCursorPos;
property CursorLine: integer read FCursorLine write SetCursorLine;
property Font: TfpgFont read FFont;
property LineHeight: integer read FLineHeight;
@@ -108,11 +130,14 @@ type
property UseTabs: boolean read FUseTabs write FUseTabs default False;
property PopupMenu: TfpgPopupMenu read FPopupMenu write FPopupMenu;
published
+ property Align;
property BackgroundColor default clBoxColor;
+ property Enabled;
property FontDesc: string read GetFontDesc write SetFontDesc;
property Hint;
property Lines: TStringList read FLines;
property ParentShowHint;
+ property ReadOnly: Boolean read FReadOnly write SetReadOnly default False;
property ShowHint;
property TabOrder;
property TextColor;
@@ -130,14 +155,25 @@ function CreateMemo(AOwner: TComponent; x, y, w, h: TfpgCoord): TfpgMemo;
implementation
uses
- fpg_stringutils;
+ fpg_stringutils
+ ,fpg_constants
+ ,fpg_dialogs
+ ;
+
+const
+ // internal popupmenu item names
+ ipmCut = 'miDefaultCut';
+ ipmCopy = 'miDefaultCopy';
+ ipmPaste = 'miDefaultPaste';
+ ipmClearAll = 'miDefaultClearAll';
+ ipmCharmap = 'miDefaultCharmap';
+
type
// custom stringlist that will notify the memo of item changes
TfpgMemoStrings = class(TStringList)
protected
Memo: TfpgMemo;
- procedure RefreshMemo;
public
constructor Create(AMemo: TfpgMemo); reintroduce;
destructor Destroy; override;
@@ -149,15 +185,6 @@ type
{ TfpgMemoStrings }
-procedure TfpgMemoStrings.RefreshMemo;
-begin
- if Assigned(Memo) and (Memo.HasHandle) then
- begin
- Memo.Invalidate;
- Memo.UpdateScrollBars;
- end;
-end;
-
constructor TfpgMemoStrings.Create(AMemo: TfpgMemo);
begin
inherited Create;
@@ -172,28 +199,30 @@ end;
function TfpgMemoStrings.Add(const s: String): Integer;
begin
+ Memo.BeginUpdate;
Result := inherited Add(s);
- RefreshMemo;
+ Memo.EndUpdate;
end;
procedure TfpgMemoStrings.Delete(Index: Integer);
begin
-// writeln('Delete''s Index = ', Index);
+ Memo.BeginUpdate;
inherited Delete(Index);
- RefreshMemo;
+ Memo.EndUpdate;
end;
procedure TfpgMemoStrings.Insert(Index: Integer; const S: string);
begin
-// writeln('Insert''s Index = ', Index);
+ Memo.BeginUpdate;
inherited Insert(Index, S);
- RefreshMemo;
+ Memo.EndUpdate;
end;
procedure TfpgMemoStrings.Clear;
begin
+ Memo.BeginUpdate;
inherited Clear;
- RefreshMemo;
+ Memo.EndUpdate;
end;
@@ -217,13 +246,18 @@ var
MaxLine: integer;
yp: integer;
begin
- if (aValue < 0) or (aValue = FCursorLine) then
+ if (aValue < 0) or (aValue = FCursorLine) or (AValue > FLines.Count-1) then
Exit; // wrong value
+
if aValue < FFirstLine then
begin
FFirstLine := aValue; // moves the selected line to the top of the displayed rectangle
FCursorLine := aValue;
FCursorPos := 0;
+ FSelStartPos := FCursorPos;
+ FSelStartLine := FCursorLine;
+ FSelEndLine := -1;
+ AdjustCursor;
RePaint;
Exit;
end;
@@ -243,15 +277,21 @@ begin
FFirstLine := aValue;
FCursorLine := aValue;
FCursorPos := 0;
+ FSelStartPos := FCursorPos;
+ FSelStartLine := FCursorLine;
+ FSelEndLine := -1;
+ AdjustCursor;
RePaint;
- Exit;
end
else
begin
FCursorLine := aValue;
FCursorPos := 0;
+ FSelStartPos := FCursorPos;
+ FSelStartLine := FCursorLine;
+ FSelEndLine := -1;
+ AdjustCursor;
RePaint;
- Exit;
end;
end;
@@ -280,6 +320,144 @@ begin
FHScrollBar.UpdateWindowPosition;
end;
+procedure TfpgMemo.DefaultPopupCut(Sender: TObject);
+begin
+ if ReadOnly then
+ Exit;
+ CutToClipboard;
+end;
+
+procedure TfpgMemo.DefaultPopupCopy(Sender: TObject);
+begin
+ if ReadOnly then
+ Exit;
+ CopyToClipboard;
+end;
+
+procedure TfpgMemo.DefaultPopupPaste(Sender: TObject);
+begin
+ if ReadOnly then
+ Exit;
+ PasteFromClipboard;
+end;
+
+procedure TfpgMemo.DefaultPopupClearAll(Sender: TObject);
+begin
+ if ReadOnly then
+ Exit;
+ Clear;
+end;
+
+procedure TfpgMemo.DefaultPopupInsertFromCharmap(Sender: TObject);
+var
+ s: TfpgString;
+begin
+ if ReadOnly then
+ Exit;
+ s := fpgShowCharMap;
+ if s <> '' then
+ DoPaste(s);
+end;
+
+procedure TfpgMemo.SetDefaultPopupMenuItemsState;
+var
+ i: integer;
+ itm: TfpgMenuItem;
+ b: boolean;
+
+ function SomethingSelected: boolean;
+ begin
+ Result := SelectionText <> '';
+ end;
+
+begin
+ b := SomethingSelected;
+ for i := 0 to FDefaultPopupMenu.ComponentCount-1 do
+ begin
+ if FDefaultPopupMenu.Components[i] is TfpgMenuItem then
+ begin
+ itm := TfpgMenuItem(FDefaultPopupMenu.Components[i]);
+ // enabled/disable menu items
+ if itm.Name = ipmCut then
+ itm.Enabled := (not ReadOnly) and b
+ else if itm.Name = ipmCopy then
+ itm.Enabled := b
+ else if itm.Name = ipmPaste then
+ itm.Enabled := (not ReadOnly) and (fpgClipboard.Text <> '')
+ else if itm.Name = ipmClearAll then
+ itm.Enabled := (not ReadOnly) and (Text <> '')
+ else if itm.Name = ipmCharmap then
+ itm.Enabled := (not ReadOnly);
+ end;
+ end;
+end;
+
+procedure TfpgMemo.ShowDefaultPopupMenu(const x, y: integer;
+ const shiftstate: TShiftState);
+var
+ itm: TfpgMenuItem;
+begin
+ if not Assigned(FDefaultPopupMenu) then
+ begin
+ FDefaultPopupMenu := TfpgPopupMenu.Create(nil);
+ itm := FDefaultPopupMenu.AddMenuItem(rsCut, '', @DefaultPopupCut);
+ itm.Name := ipmCut;
+ itm := FDefaultPopupMenu.AddMenuItem(rsCopy, '', @DefaultPopupCopy);
+ itm.Name := ipmCopy;
+ itm := FDefaultPopupMenu.AddMenuItem(rsPaste, '', @DefaultPopupPaste);
+ itm.Name := ipmPaste;
+ itm := FDefaultPopupMenu.AddMenuItem(rsDelete, '', @DefaultPopupClearAll);
+ itm.Name := ipmClearAll;
+ itm := FDefaultPopupMenu.AddMenuItem('-', '', nil);
+ itm.Name := 'N1';
+ itm := FDefaultPopupMenu.AddMenuItem(rsInsertFromCharacterMap, '', @DefaultPopupInsertFromCharmap);
+ itm.Name := ipmCharmap;
+ end;
+
+ SetDefaultPopupMenuItemsState;
+ FDefaultPopupMenu.ShowAt(self, x, y);
+end;
+
+procedure TfpgMemo.SetReadOnly(const AValue: Boolean);
+begin
+ if FReadOnly = AValue then exit;
+ FReadOnly := AValue;
+ RePaint;
+end;
+
+procedure TfpgMemo.ResetSelectionVariables;
+begin
+ FSelecting := False;
+ FSelStartPos := FCursorPos;
+ FSelEndPos := FCursorPos;
+ FSelStartLine := FCursorLine;
+ FSelEndLine := FCursorLine;
+ FMouseDragging := False;
+end;
+
+procedure TfpgMemo.SetCursorPos(const AValue: integer);
+var
+ x: integer;
+begin
+ if FCursorPos = AValue then
+ exit;
+
+ if AValue = 0 then
+ FCursorPos := AValue
+ else
+ begin
+ x := UTF8Length(FLines[CursorLine]);
+ if AValue > x then { can't set Cursorpos greater than number of characters on that line }
+ FCursorPos := x
+ else
+ FCursorPos := AValue;
+ end;
+ FSelStartPos := FCursorPos;
+ FSelEndPos := FCursorPos;
+ AdjustCursor;
+ Repaint;
+end;
+
constructor TfpgMemo.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
@@ -288,7 +466,6 @@ begin
FHeight := FFont.Height * 3 + 4;
FWidth := 120;
FLineHeight := FFont.Height + 2;
- FSelecting := False;
FSideMargin := 3;
FMaxLength := 0;
FWrapping := False;
@@ -299,19 +476,18 @@ begin
FTabWidth := 4;
FMinWidth := 20;
FMinHeight := 30;
+ FPopupMenu := nil;
+ FDefaultPopupMenu := nil;
+ FReadOnly := False;
+ FUpdateCount := 0;
FLines := TfpgMemoStrings.Create(self);
FFirstLine := 0;
FCursorLine := 0;
- FCursorPos := 0;
- FSelStartPos := FCursorPos;
- FSelEndPos := 0;
- FSelStartLine := -1;
- FSelEndLine := -1;
+ ResetSelectionVariables;
FDrawOffset := 0;
- FMouseDragging := False;
FVScrollBar := TfpgScrollBar.Create(self);
FVScrollBar.Orientation := orVertical;
@@ -327,6 +503,8 @@ end;
destructor TfpgMemo.Destroy;
begin
+ if Assigned(FDefaultPopupMenu) then
+ FDefaultPopupMenu.Free;
TfpgMemoStrings(FLines).Free;
FFont.Free;
inherited Destroy;
@@ -362,6 +540,8 @@ var
len: integer;
st: integer;
begin
+ if ReadOnly then
+ Exit;
if FSelEndLine < 0 then
Exit;
@@ -410,84 +590,42 @@ begin
FCursorPos := selsp;
FCursorLine := selsl;
+ FSelStartPos := FCursorPos;
+ FSelEndPos := FCursorPos;
+ FSelStartLine := selsl;
FSelEndLine := -1;
end;
procedure TfpgMemo.DoCopy;
-var
- n: integer;
- selsl: integer;
- selsp: integer;
- selel: integer;
- selep: integer;
- ls: string;
- len: integer;
- st: integer;
- s: string;
begin
if FSelEndLine < 0 then
Exit;
- if (FSelStartLine shl 16) + FSelStartPos <= (FSelEndLine shl 16) + FSelEndPos then
- begin
- selsl := FSelStartLine;
- selsp := FSelStartPos;
- selel := FSelEndLine;
- selep := FSelEndPos;
- end
- else
- begin
- selel := FSelStartLine;
- selep := FSelStartPos;
- selsl := FSelEndLine;
- selsp := FSelEndPos;
- end;
-
- s := '';
-
- for n := selsl to selel do
- begin
- if n > selsl then
- s := s + #13#10;
-
- ls := GetLineText(n);
-
- if selsl < n then
- st := 0
- else
- st := selsp;
-
- if selel > n then
- len := UTF8Length(ls)
- else
- len := selep - st;
-
- s := s + UTF8Copy(ls, st + 1, len);
- end;
-
- //SetClipboardText(s);
+ fpgClipboard.Text := SelectionText;
end;
-procedure TfpgMemo.DoPaste;
-{
+procedure TfpgMemo.DoPaste(const AText: TfpgString);
var
- s: string;
- si: string;
- si8: string;
- lineend: string;
+ s: TfpgString;
+ si: TfpgString; { beginning of line to cursor }
+ si8: TfpgString;
+ lineend: TfpgString; { from cursor to end of line }
n: integer;
l: integer;
lcnt: integer;
-}
begin
- Exit;
- (*
+ if ReadOnly then
+ Exit;
DeleteSelection;
- s := GetClipboardText;
+ s := AText;
si := UTF8Copy(CurrentLine,1,FCursorPos);
lineend := UTF8Copy(CurrentLine,FCursorPos+1, UTF8Length(CurrentLine));
- l := FCursorLine;
+ if FCursorLine = -1 then { first time in, FLines has no data yet }
+ l := 0
+ else
+ l := FCursorLine;
+
n := 1;
lcnt := 0;
si8 := '';
@@ -495,8 +633,10 @@ begin
begin
if (s[n] = #13) or (s[n] = #10) then
begin
- if lcnt = 0 then SetLineText(l, si + si8)
- else FLines.Insert(l-1, si + si8);
+ if lcnt = 0 then
+ SetLineText(l, si + si8)
+ else
+ FLines.Insert(l, si + si8);
si := '';
si8 := '';
@@ -524,13 +664,13 @@ begin
end
else
begin
- FLines.Insert(l-1, si);
+ FLines.Insert(l, si);
FCursorLine := l;
end;
AdjustCursor;
+ ResetSelectionVariables;
Repaint;
-*)
end;
procedure TfpgMemo.AdjustCursor;
@@ -747,6 +887,12 @@ begin
inherited;
end;
+procedure TfpgMemo.RePaint;
+begin
+ if FUpdateCount <= 0 then
+ inherited RePaint;
+end;
+
procedure TfpgMemo.VScrollBarMove(Sender: TObject; position: integer);
begin
if FFirstLine <> position then
@@ -783,7 +929,7 @@ begin
InflateRect(r, -2, -2);
Canvas.SetClipRect(r);
- if Enabled then
+ if Enabled and not ReadOnly then
Canvas.SetColor(FBackgroundColor)
else
Canvas.SetColor(clWindowBackground);
@@ -895,31 +1041,35 @@ begin
prevval := Text;
s := AText;
- // Printable characters only
- // Note: This is now UTF-8 compliant!
- if (Ord(AText[1]) > 31) and (Ord(AText[1]) < 127) or (Length(AText) > 1) then
+ if (not consumed) and (not ReadOnly) then
begin
- if (FMaxLength <= 0) or (UTF8Length(FLines.Text) < FMaxLength) then
+ // Printable characters only
+ // Note: This is now UTF-8 compliant!
+ if (Ord(AText[1]) > 31) and (Ord(AText[1]) < 127) or (Length(AText) > 1) then
begin
- if FCursorLine < 0 then
- FCursorLine := 0;
- DeleteSelection;
- ls := GetLineText(FCursorLine);
- UTF8Insert(s, ls, FCursorPos + 1);
- SetLineText(FCursorLine, ls);
- Inc(FCursorPos);
- FSelStartPos := FCursorPos;
- FSelStartLine := FCursorLine;
- FSelEndLine := -1;
- AdjustCursor;
+ if (FMaxLength <= 0) or (UTF8Length(FLines.Text) < FMaxLength) then
+ begin
+ if FCursorLine < 0 then
+ FCursorLine := 0;
+ DeleteSelection;
+ ls := GetLineText(FCursorLine);
+ UTF8Insert(s, ls, FCursorPos + 1);
+ SetLineText(FCursorLine, ls);
+ Inc(FCursorPos);
+ FSelStartPos := FCursorPos;
+ FSelStartLine := FCursorLine;
+ FSelEndLine := -1;
+ AdjustCursor;
+ end;
+
+ consumed := True;
end;
- consumed := True;
+ if prevval <> Text then
+ if Assigned(FOnChange) then
+ FOnChange(self);
end;
- if prevval <> Text then
- if Assigned(FOnChange) then
- FOnChange(self);
if consumed then
RePaint;
@@ -932,15 +1082,8 @@ var
ls: string;
ls2: string;
hasChanged: boolean;
-
- procedure StopSelection;
- begin
- FSelStartLine := FCursorLine;
- FSelStartPos := FCursorPos;
- FSelEndLine := -1;
- end;
-
begin
+ fpgApplication.HideHint;
Consumed := True;
hasChanged := False;
case CheckClipBoardKey(keycode, shiftstate) of
@@ -950,14 +1093,19 @@ begin
end;
ckPaste:
begin
- DoPaste;
- hasChanged := True;
+ DoPaste(fpgClipboard.Text);
+ if not ReadOnly then
+ hasChanged := True;
end;
ckCut:
begin
DoCopy;
DeleteSelection;
- hasChanged := True;
+ if not ReadOnly then
+ begin
+ AdjustCursor;
+ hasChanged := True;
+ end;
end;
else
Consumed := False;
@@ -974,7 +1122,6 @@ begin
if FCursorPos > 0 then
begin
Dec(FCursorPos);
-
if (ssCtrl in shiftstate) then
// word search...
(*
@@ -984,14 +1131,12 @@ begin
while (FCursorPos > 0) and pgfIsAlphaNum(copy(CurrentLine,FCursorPos,1))
do Dec(FCursorPos);
*);
-
end;// left
keyRight:
if FCursorPos < UTF8Length(CurrentLine) then
begin
Inc(FCursorPos);
-
if (ssCtrl in shiftstate) then
// word search...
(*
@@ -1001,7 +1146,6 @@ begin
while (FCursorPos < length(CurrentLine)) and not pgfIsAlphaNum(copy(CurrentLine,FCursorPos+1,1))
do Inc(FCursorPos);
*);
-
end;// right
keyUp:
@@ -1074,11 +1218,11 @@ begin
FSelEndLine := FCursorLine;
end
else
- StopSelection;
+ ResetSelectionVariables;
end;
end;
- if not Consumed then
+ if (not Consumed) and (not ReadOnly) then
begin
consumed := True;
@@ -1118,7 +1262,7 @@ begin
keyDelete:
begin
ls := GetLineText(FCursorLine);
- if FSelEndLine > -1 then
+ if SelectionText <> '' then
DeleteSelection
else if FCursorPos < UTF8Length(ls) then
begin
@@ -1165,8 +1309,8 @@ begin
if Consumed then
begin
- StopSelection;
AdjustCursor;
+ ResetSelectionVariables;
end;
end;
@@ -1190,6 +1334,7 @@ var
ls: string;
begin
inherited HandleLMouseDown(x, y, shiftstate);
+ ResetSelectionVariables;
// searching the appropriate character position
lnum := FFirstLine + (y - FSideMargin) div LineHeight;
@@ -1219,9 +1364,11 @@ begin
begin
FSelEndLine := lnum;
FSelEndpos := cp;
+ FSelecting := True;
end
else
begin
+ FSelecting := False;
FSelStartLine := lnum;
FSelStartPos := cp;
FSelEndLine := -1;
@@ -1229,11 +1376,22 @@ begin
Repaint;
end;
+procedure TfpgMemo.HandleRMouseDown(x, y: integer; shiftstate: TShiftState);
+begin
+ // keyMenu was pressed
+ if shiftstate = [ssExtra1] then
+ HandleRMouseUp(x, y, [])
+ else
+ inherited HandleRMouseDown(x, y, shiftstate);
+end;
+
procedure TfpgMemo.HandleRMouseUp(x, y: integer; shiftstate: TShiftState);
begin
inherited HandleRMouseUp(x, y, shiftstate);
if Assigned(PopupMenu) then
- PopupMenu.ShowAt(self, x, y);
+ PopupMenu.ShowAt(self, x, y)
+ else
+ ShowDefaultPopupMenu(x, y, ShiftState);
end;
procedure TfpgMemo.HandleMouseMove(x, y: integer; btnstate: word; shiftstate: TShiftState);
@@ -1276,6 +1434,7 @@ begin
FSelEndLine := lnum;
FSelEndPos := cp;
FCursorPos := cp;
+ FSelecting := True;
Repaint;
end;
@@ -1396,23 +1555,105 @@ begin
end;
end;
-function TfpgMemo.SelectionText: string;
+function TfpgMemo.SelectionText: TfpgString;
+var
+ n: integer;
+ selsl: integer;
+ selsp: integer;
+ selel: integer;
+ selep: integer;
+ ls: string;
+ len: integer;
+ st: integer;
+ s: TfpgString;
begin
- {
- if FSelOffset <> 0 then
+ if (FSelStartLine shl 16) + FSelStartPos <= (FSelEndLine shl 16) + FSelEndPos then
begin
- if FSelOffset < 0 then
- begin
- Result := Copy(FText,1+FSelStart + FSelOffset,-FSelOffset);
- end
- else
- begin
- result := Copy(FText,1+FSelStart,FSelOffset);
- end;
+ selsl := FSelStartLine;
+ selsp := FSelStartPos;
+ selel := FSelEndLine;
+ selep := FSelEndPos;
end
else
-}
- Result := '';
+ begin
+ selel := FSelStartLine;
+ selep := FSelStartPos;
+ selsl := FSelEndLine;
+ selsp := FSelEndPos;
+ end;
+
+ s := '';
+ for n := selsl to selel do
+ begin
+ if n > selsl then
+ s := s + LineEnding;
+
+ ls := GetLineText(n);
+
+ if selsl < n then
+ st := 0
+ else
+ st := selsp;
+
+ if selel > n then
+ len := UTF8Length(ls)
+ else
+ len := selep - st;
+
+ s := s + UTF8Copy(ls, st + 1, len);
+ end;
+
+ Result := s;
+end;
+
+procedure TfpgMemo.CopyToClipboard;
+begin
+ DoCopy;
+end;
+
+procedure TfpgMemo.CutToClipboard;
+begin
+ DoCopy;
+ DeleteSelection;
+ AdjustCursor;
+ ResetSelectionVariables;
+ RePaint;
+end;
+
+procedure TfpgMemo.PasteFromClipboard;
+begin
+ DoPaste(fpgClipboard.Text);
+end;
+
+procedure TfpgMemo.Clear;
+begin
+ FLines.Clear;
+ { not sure if all of these are required }
+ FFirstLine := 0;
+ FCursorLine := 0;
+ FCursorPos := 0;
+ FSelStartPos := FCursorPos;
+ FSelEndPos := 0;
+ FSelStartLine := -1;
+ FSelEndLine := -1;
+ FDrawOffset := 0;
+
+ Repaint;
+end;
+
+procedure TfpgMemo.BeginUpdate;
+begin
+ Inc(FUpdateCount);
+end;
+
+procedure TfpgMemo.EndUpdate;
+begin
+ Dec(FUpdateCount);
+ if FUpdateCount <= 0 then
+ begin
+ Invalidate;
+ UpdateScrollBars;
+ end;
end;
function TfpgMemo.GetText: TfpgString;
diff --git a/src/gui/fpg_menu.pas b/src/gui/fpg_menu.pas
index 06e64b6f..dbe3a90a 100644
--- a/src/gui/fpg_menu.pas
+++ b/src/gui/fpg_menu.pas
@@ -123,7 +123,7 @@ type
procedure HandlePaint; override;
procedure HandleShow; override;
procedure HandleClose; override;
- procedure DrawItem(mi: TfpgMenuItem; rect: TfpgRect; const AItemFocused: boolean); virtual;
+ procedure DrawItem(mi: TfpgMenuItem; rect: TfpgRect; AFlags: TfpgMenuItemFlags); virtual;
procedure DrawRow(line: integer; const AItemFocused: boolean); virtual;
function ItemHeight(mi: TfpgMenuItem): integer; virtual;
procedure PrepareToShow;
@@ -150,10 +150,13 @@ type
FMenuOptions: TfpgMenuOptions;
FPrevFocusItem: integer;
FFocusItem: integer;
+ FClicked: Boolean;
+ FLastItemClicked: integer;
procedure SetFocusItem(const AValue: integer);
procedure DoSelect;
procedure CloseSubmenus;
function ItemWidth(mi: TfpgMenuItem): integer;
+ procedure InternalReset;
protected
FItems: TList; // stores visible items only
property FocusItem: integer read FFocusItem write SetFocusItem;
@@ -407,6 +410,8 @@ var
begin
inherited HandleMouseMove(x, y, btnstate, shiftstate);
+ newf := CalcMouseCol(x);
+
// process menu options
if mnuo_nofollowingmouse in FMenuOptions then
begin
@@ -415,17 +420,19 @@ begin
end
else if mnuo_autoopen in FMenuOptions then
begin
- if not Focused then
- ActivateMenu;
+// if not Focused then
+ FLastItemClicked := newf;
+ FClicked := True;
+ ActivateMenu;
end
else
begin
- if not Focused then
- Exit;
+ if not FClicked then
+ exit
+ else
+ FLastItemClicked := newf;
end;
-
- newf := CalcMouseCol(x);
if not VisibleItem(newf).Selectable then
Exit; //==>
@@ -452,17 +459,31 @@ begin
if ComponentCount = 0 then
Exit; // We have no menu items in MainMenu.
+
+ newf := CalcMouseCol(x);
+ if (FLastItemClicked <> -1) and (FLastItemClicked <> newf) then
+ begin
+ // do nothing
+ //FClicked := not FClicked
+ end
+ else
+ begin
+ if VisibleItem(newf).Selectable then
+ FClicked := not FClicked;
+ end;
- if not Focused then
+ if FClicked then
+ begin
ActivateMenu;
- //else
- //begin
- //CloseSubmenus;
- //DeActivateMenu;
- //Exit; //==>
- //end;
-
- newf := CalcMouseCol(x);
+ FLastItemClicked := newf;
+ end
+ else
+ begin
+ CloseSubmenus;
+ DeActivateMenu;
+ FLastItemClicked := -1;
+ exit; //==>
+ end;
if not VisibleItem(newf).Selectable then
Exit; //==>
@@ -531,7 +552,9 @@ begin
FBeforeShow := nil;
FFocusItem := -1;
FPrevFocusItem := -1;
+ FLastItemClicked := -1;
FFocusable := False;
+ FClicked := False;
FBackgroundColor := Parent.BackgroundColor;
FTextColor := Parent.TextColor;
// calculate the best height based on font
@@ -554,6 +577,12 @@ begin
Result := fpgStyle.MenuFont.TextWidth(mi.Text) + (2*6);
end;
+procedure TfpgMenuBar.InternalReset;
+begin
+ FClicked := False;
+ FLastItemClicked := -1;
+end;
+
procedure TfpgMenuBar.DrawColumn(col: integer; focus: boolean);
var
n: integer;
@@ -736,6 +765,7 @@ begin
Result:= TfpgMenuItem(Components[AMenuPos]);
end;
+
{ TfpgPopupMenu }
procedure TfpgPopupMenu.DoSelect;
@@ -765,7 +795,11 @@ begin
op.Close;
op := op.OpenerPopup;
end;
+ // notify menubar that we clicked a menu item
+ if Assigned(OpenerMenuBar) then
+ OpenerMenuBar.InternalReset;
VisibleItem(FFocusItem).Click;
+ FFocusItem := -1;
end; { if/else }
// if OpenerMenuBar <> nil then
@@ -1017,35 +1051,32 @@ begin
Result := TfpgMenuItem(FItems.Items[ind]);
end;
-procedure TfpgPopupMenu.DrawItem(mi: TfpgMenuItem; rect: TfpgRect; const AItemFocused: boolean);
+procedure TfpgPopupMenu.DrawItem(mi: TfpgMenuItem; rect: TfpgRect; AFlags: TfpgMenuItemFlags);
var
s: string;
x: integer;
img: TfpgImage;
+ lFlags: TfpgMenuItemFlags;
begin
+ lFlags := AFlags;
if mi.Separator then
begin
- Canvas.SetColor(clShadow1);
- Canvas.DrawLine(rect.Left+1, rect.Top+2, rect.Right, rect.Top+2);
- Canvas.SetColor(clHilite2);
- Canvas.DrawLine(rect.Left+1, rect.Top+3, rect.Right, rect.Top+3);
+ fpgStyle.DrawMenuItemSeparator(Canvas, rect);
end
else
begin
// process Check mark if needed
if mi.Checked then
begin
- img := fpgImages.GetImage('stdimg.check'); // Do NOT localize
- if AItemFocused then
- img.Invert;
- Canvas.DrawImage(rect.Left, rect.Top, img);
- if AItemFocused then
- img.Invert; // restore image to original state
+ lFlags := lFlags + [mifChecked];
+ fpgStyle.DrawMenuItemImage(Canvas, rect.Left, rect.Top, rect, lFlags);
+ lFlags := lFlags - [mifChecked];
end;
// process menu item Text
x := rect.Left + FSymbolWidth + FTextMargin;
mi.DrawText(Canvas, x+cImgWidth, rect.top, cImgWidth);
+ Canvas.SetColor(Canvas.TextColor); // reset text default color
// process menu item Hot Key text
if mi.HotKeyDef <> '' then
@@ -1057,10 +1088,9 @@ begin
// process menu item submenu arrow image
if mi.SubMenu <> nil then
begin
- Canvas.SetColor(Canvas.TextColor);
- x := (rect.height div 2) - 3;
- img := fpgImages.GetImage('sys.sb.right'); // Do NOT localize
- Canvas.DrawImage(rect.right-x-2, rect.Top + ((rect.Height-img.Height) div 2), img);
+ lFlags := lFlags + [mifSubMenu];
+ fpgStyle.DrawMenuItemImage(Canvas, rect.Left, rect.Top, rect, lFlags);
+ lFlags := lFlags - [mifSubMenu];
end;
end;
end;
@@ -1070,25 +1100,33 @@ var
n: integer;
r: TfpgRect;
mi: TfpgMenuItem;
+ lFlags: TfpgMenuItemFlags;
begin
- Canvas.BeginDraw;
r.SetRect(FMargin, FMargin, FWidth-(2*FMargin), FHeight-(2*FMargin));
for n := 0 to VisibleCount-1 do
begin
mi := VisibleItem(n);
-
+ lFlags := [];
r.height := ItemHeight(mi);
if line = n then
begin
+ if AItemFocused then
+ lFlags := [mifSelected]; // refering to menu item in active popup menu
+ if mi.Separator then
+ lFlags := lFlags + [mifSeparator];
if AItemFocused and (not mi.Separator) then
begin
- if MenuFocused then
+ if MenuFocused then // refering to popup menu window
begin
+ lFlags := lFlags + [mifHasFocus];
Canvas.SetColor(clSelection);
if mi.Selectable then
- Canvas.SetTextColor(clSelectionText)
+ begin
+ lFlags := lFlags + [mifEnabled];
+ Canvas.SetTextColor(clSelectionText);
+ end
else
Canvas.SetTextColor(clMenuDisabled);
end
@@ -1102,6 +1140,7 @@ begin
begin
if mi.Enabled then
begin
+ lFlags := lFlags + [mifEnabled];
Canvas.SetColor(BackgroundColor);
Canvas.SetTextColor(clMenuText);
end
@@ -1111,9 +1150,9 @@ begin
Canvas.SetTextColor(clMenuDisabled);
end;
end;
- Canvas.FillRectangle(r);
- DrawItem(mi, r, AItemFocused);
- Canvas.EndDraw(r.Left, r.Top, r.Width, r.Height);
+ fpgStyle.DrawMenuRow(Canvas, r, lFlags);
+ DrawItem(mi, r, lFlags);
+
Exit; //==>
end;
inc(r.Top, ItemHeight(mi) );
diff --git a/src/gui/fpg_panel.pas b/src/gui/fpg_panel.pas
index b58b516d..66ed5778 100644
--- a/src/gui/fpg_panel.pas
+++ b/src/gui/fpg_panel.pas
@@ -73,8 +73,11 @@ type
protected
procedure HandlePaint; override;
published
+ property AcceptDrops;
+ property Align;
property BackgroundColor;
property BorderStyle;
+ property Enabled;
property Height;
property Hint;
property Left;
@@ -91,6 +94,10 @@ type
property Width;
property OnClick;
property OnDoubleClick;
+ property OnDragDrop;
+ property OnDragEnter;
+ property OnDragLeave;
+ property OnDragStartDetected;
property OnMouseDown;
property OnMouseMove;
property OnMouseUp;
@@ -129,9 +136,12 @@ type
destructor Destroy; override;
property Font: TfpgFont read FFont;
published
+ property AcceptDrops;
+ property Align;
property Alignment: TAlignment read GetAlignment write SetAlignment default taCenter;
property BackgroundColor;
property BorderStyle;
+ property Enabled;
property FontDesc: string read GetFontDesc write SetFontDesc;
property Height;
property Hint;
@@ -154,6 +164,11 @@ type
property WrapText: boolean read GetWrapText write SetWrapText default False;
property OnClick;
property OnDoubleClick;
+ property OnDragDrop;
+ property OnDragEnter;
+ property OnDragLeave;
+ property OnDragStartDetected;
+ property OnPaint;
property OnShowHint;
end;
@@ -180,9 +195,12 @@ type
function GetClientRect: TfpgRect; override;
property Font: TfpgFont read FFont;
published
+ property AcceptDrops;
+ property Align;
property Alignment: TAlignment read GetAlignment write SetAlignment default taLeftJustify;
property BackgroundColor;
property BorderStyle;
+ property Enabled;
property FontDesc: string read GetFontDesc write SetFontDesc;
property Height;
property Hint;
@@ -201,6 +219,11 @@ type
property Width;
property OnClick;
property OnDoubleClick;
+ property OnDragDrop;
+ property OnDragEnter;
+ property OnDragLeave;
+ property OnDragStartDetected;
+ property OnPaint;
property OnShowHint;
end;
@@ -209,7 +232,7 @@ function CreateBevel(AOwner: TComponent; ALeft, ATop, AWidth, AHeight: TfpgCoord
AStyle: TPanelStyle): TfpgBevel;
function CreatePanel(AOwner: TComponent; ALeft, ATop, AWidth, AHeight: TfpgCoord; AText: string;
- AStyle: TPanelStyle; AALignment: TAlignment= taCenter; ALayout: TLayout= tlCenter;
+ AStyle: TPanelStyle = bsRaised; AALignment: TAlignment= taCenter; ALayout: TLayout= tlCenter;
AMargin: integer= 2; ALineSpace: integer= 2): TfpgPanel;
function CreateGroupBox(AOwner: TComponent; ALeft, ATop, AWidth, AHeight: TfpgCoord; AText: string;
@@ -333,21 +356,24 @@ begin
else
Canvas.SetLineStyle(2, lsSolid);
+ { top }
if FPanelBorder = bsSingle then
Canvas.DrawLine(0, 0, Width - 1, 0)
else
Canvas.DrawLine(0, 1, Width - 1, 1);
+ { left }
if FPanelBorder = bsSingle then
Canvas.DrawLine(0, 1, 0, Height - 1)
else
Canvas.DrawLine(1, 1, 1, Height - 1);
if Style = bsRaised then
- Canvas.SetColor(clShadow2)
+ Canvas.SetColor(clShadow1)
else
Canvas.SetColor(clHilite2);
+ { right, then bottom }
Canvas.DrawLine(Width - 1, 0, Width - 1, Height - 1);
Canvas.DrawLine(0, Height - 1, Width, Height - 1);
end;
@@ -597,7 +623,7 @@ begin
if Style = bsRaised then
Canvas.SetColor(clHilite2)
else
- Canvas.SetColor(clShadow2);
+ Canvas.SetColor(clShadow1);
if FPanelBorder = bsSingle then
begin
@@ -611,7 +637,7 @@ begin
end;
if Style = bsRaised then
- Canvas.SetColor(clShadow2)
+ Canvas.SetColor(clShadow1)
else
Canvas.SetColor(clHilite2);
diff --git a/src/gui/fpg_popupcalendar.pas b/src/gui/fpg_popupcalendar.pas
index af27568b..ea6eb617 100644
--- a/src/gui/fpg_popupcalendar.pas
+++ b/src/gui/fpg_popupcalendar.pas
@@ -221,12 +221,14 @@ type
public
constructor Create(AOwner: TComponent); override;
published
+ property Align;
property BackgroundColor;
{ Clicking on calendar Today button will close the popup calendar by default }
property CloseOnSelect: boolean read FCloseOnSelect write SetCloseOnSelect default True;
property DateFormat: string read FDateFormat write SetDateFormat;
property DateValue: TDateTime read FDate write SetDateValue;
property DayColor: TfpgColor read FDayColor write SetDayColor;
+ property Enabled;
property FontDesc;
property Hint;
property HolidayColor: TfpgColor read FHolidayColor write SetHolidayColor;
diff --git a/src/gui/fpg_progressbar.pas b/src/gui/fpg_progressbar.pas
index ee6b2405..e106577c 100644
--- a/src/gui/fpg_progressbar.pas
+++ b/src/gui/fpg_progressbar.pas
@@ -60,7 +60,9 @@ type
TfpgProgressBar = class(TfpgCustomProgressBar)
published
+ property Align;
property BackgroundColor default $c4c4c4;
+ property Enabled;
property Hint;
property ShowCaption;
property Max;
diff --git a/src/gui/fpg_radiobutton.pas b/src/gui/fpg_radiobutton.pas
index 9410a000..e04a2b2c 100644
--- a/src/gui/fpg_radiobutton.pas
+++ b/src/gui/fpg_radiobutton.pas
@@ -61,9 +61,11 @@ type
destructor Destroy; override;
property Font: TfpgFont read FFont;
published
+ property Align;
property AutoSize: boolean read FAutoSize write SetAutoSize default False;
property BackgroundColor;
property Checked: boolean read FChecked write SetChecked default False;
+ property Enabled;
property FontDesc: string read GetFontDesc write SetFontDesc;
property Hint;
property BoxLayout: TBoxLayout read GetBoxLayout write SetBoxLayout default tbLeftBox;
diff --git a/src/gui/fpg_scrollbar.pas b/src/gui/fpg_scrollbar.pas
index 55db9f59..dd0a4c7c 100644
--- a/src/gui/fpg_scrollbar.pas
+++ b/src/gui/fpg_scrollbar.pas
@@ -43,7 +43,6 @@ type
TfpgScrollBarPart = (sbpNone, sbpUpBack, sbpPageUpBack, sbpSlider, sbpDownForward, sbpPageDownForward);
- { TfpgScrollBar }
TfpgScrollBar = class(TfpgWidget)
private
@@ -72,7 +71,7 @@ type
FMousePosition: TPoint;
FOnScroll: TScrollNotifyEvent;
procedure ScrollTimer(Sender: TObject);
- procedure DrawButton(x, y, w, h: TfpgCoord; const imgname: string; Pressed: Boolean = False); virtual;
+ procedure DrawButton(x, y, w, h: TfpgCoord; const imgname: string; Pressed: Boolean = False; const ButtonEnabled: Boolean= True); virtual;
procedure DrawSlider(recalc: boolean); virtual;
procedure HandleLMouseDown(x, y: integer; shiftstate: TShiftState); override;
procedure HandleLMouseUp(x, y: integer; shiftstate: TShiftState); override;
@@ -98,6 +97,8 @@ type
property Min: integer read FMin write SetMin default 0;
property Max: integer read FMax write SetMax default 100;
property OnScroll: TScrollNotifyEvent read FOnScroll write FOnScroll;
+ published
+ property Align;
end;
@@ -139,13 +140,13 @@ begin
Canvas.BeginDraw; // Do not remove - Scrollbars do painting outside HandlePaint as well!
if Orientation = orVertical then
begin
- DrawButton(0, 0, Width, Width, 'sys.sb.up', FScrollbarDownPart = sbpUpBack);
- DrawButton(0, Height-Width, Width, Width, 'sys.sb.down', FScrollbarDownPart = sbpDownForward);
+ DrawButton(0, 0, Width, Width, 'sys.sb.up', (FScrollbarDownPart = sbpUpBack) and (FPosition <> FMin), (FPosition <> FMin) and (Parent.Enabled));
+ DrawButton(0, Height-Width, Width, Width, 'sys.sb.down', (FScrollbarDownPart = sbpDownForward) and (FPosition <> FMax), (FPosition <> FMax) and (Parent.Enabled));
end
else
begin
- DrawButton(0, 0, Height, Height, 'sys.sb.left', FScrollbarDownPart = sbpUpBack);
- DrawButton(Width-Height, 0, Height, Height, 'sys.sb.right', FScrollbarDownPart = sbpDownForward);
+ DrawButton(0, 0, Height, Height, 'sys.sb.left', (FScrollbarDownPart = sbpUpBack) and (FPosition <> FMin), (FPosition <> FMin) and (Parent.Enabled));
+ DrawButton(Width-Height, 0, Height, Height, 'sys.sb.right', (FScrollbarDownPart = sbpDownForward) and (FPosition <> FMax), (FPosition <> FMax) and (Parent.Enabled));
end;
DrawSlider(FRecalc);
@@ -323,9 +324,9 @@ begin
end;
// only called from inside HandlePaint so no need for BeginDraw..EndDraw calls
-procedure TfpgScrollBar.DrawButton(x, y, w, h: TfpgCoord; const imgname: string; Pressed: Boolean = False);
+procedure TfpgScrollBar.DrawButton(x, y, w, h: TfpgCoord; const imgname: string; Pressed: Boolean = False; const ButtonEnabled: Boolean= True);
var
- img: TfpgImage;
+ img, imgdisabled: TfpgImage;
dx: integer;
dy: integer;
begin
@@ -344,7 +345,16 @@ begin
Canvas.SetColor(clText1);
img := fpgImages.GetImage(imgname);
if img <> nil then
- Canvas.DrawImage(x + w div 2 - (img.Width div 2) + dx, y + h div 2 - (img.Height div 2) + dy, img);
+ begin
+ if ButtonEnabled then
+ Canvas.DrawImage(x + w div 2 - (img.Width div 2) + dx, y + h div 2 - (img.Height div 2) + dy, img)
+ else
+ begin
+ imgdisabled := img.CreateDisabledImage;
+ Canvas.DrawImage(x + w div 2 - (img.Width div 2) + dx, y + h div 2 - (img.Height div 2) + dy, imgdisabled);
+ imgdisabled.Free;
+ end;
+ end;
end;
// only called from inside HandlePaint so no need for BeginDraw..EndDraw calls
@@ -516,14 +526,13 @@ begin
if FScrollbarDownPart = sbpSlider then
begin
FSliderDragStart := FSliderPos;
- Invalidate; //DrawSlider(False);
+ Invalidate;
end
else if not (FScrollbarDownPart in [sbpNone, sbpSlider]) then
begin
FScrollTimer.Interval := 300;
FScrollTimer.Enabled := True;
-
- Invalidate; //HandlePaint;
+ Invalidate;
end;
end;
@@ -540,7 +549,7 @@ begin
FScrollbarDownPart := sbpNone;
if WasPressed then
- Invalidate; //HandlePaint;
+ Invalidate;
end;
procedure TfpgScrollBar.HandleMouseMove(x, y: integer; btnstate: word; shiftstate: TShiftState);
diff --git a/src/gui/fpg_spinedit.pas b/src/gui/fpg_spinedit.pas
index 21548f97..99c4e697 100644
--- a/src/gui/fpg_spinedit.pas
+++ b/src/gui/fpg_spinedit.pas
@@ -327,10 +327,7 @@ end;
procedure TfpgAbstractSpinEdit.HandlePaint;
begin
- Canvas.Clear(BackgroundColor);
- if FButtonUp.HasHandle then
- fpgPostMessage(self, FButtonUp, FPGM_PAINT);
-// FButtonDown.Invalidate;
+ Canvas.Clear(BackgroundColor);
end;
procedure TfpgAbstractSpinEdit.HandleResize(AWidth, AHeight: TfpgCoord);
@@ -385,15 +382,11 @@ var
begin
r := AButton.GetClientRect;
- InflateRect(r, -1, -1); // button borders
+ InflateRect(r, -2, -2); // button borders
if AButton.Down then
OffsetRect(r, 1, 1);
- // TfpgRect to TRect
- Result.Left := r.Left;
- Result.Top := r.Top;
- Result.Right := r.Right;
- Result.Bottom := r.Bottom;
+ Result := fpgRectToRect(r);
end;
procedure TfpgAbstractSpinEdit.ButtonUpPaint(Sender: TObject);
@@ -707,6 +700,11 @@ begin
begin
FValue := FValue + FIncrement;
FEdit.Value := FValue;
+ end
+ else if not IsMaxLimitReached then
+ begin
+ FValue := FMaxValue;
+ FEdit.Value := FValue;
end;
if KeyCode = KeyDown then
@@ -714,6 +712,11 @@ begin
begin
FValue := FValue - FIncrement;
FEdit.Value := FValue;
+ end
+ else if not IsMinLimitReached then
+ begin
+ FValue := FMinValue;
+ FEdit.Value := FValue;
end;
if KeyCode = KeyPageUp then
@@ -1110,9 +1113,13 @@ begin
begin
FValue := 0;
FEdit.Value := FValue;
+ DoOnChange;
end
else if (StrToInt(FEdit.Text) <= FMaxValue) and (StrToInt(FEdit.Text) >= FMinValue) then
- FValue := FEdit.Value
+ begin
+ FValue := FEdit.Value;
+ DoOnChange;
+ end
else
FEdit.Value := FValue;
@@ -1121,6 +1128,13 @@ begin
begin
Inc(FValue, FIncrement);
FEdit.Value := FValue;
+ DoOnChange;
+ end
+ else if not IsMaxLimitReached then
+ begin
+ FValue := FMaxValue;
+ FEdit.Value := FValue;
+ DoOnChange;
end;
if KeyCode = KeyDown then
@@ -1128,18 +1142,27 @@ begin
begin
Dec(FValue, FIncrement);
FEdit.Value := FValue;
+ DoOnChange;
+ end
+ else if not IsMinLimitReached then
+ begin
+ FValue := FMinValue;
+ FEdit.Value := FValue;
+ DoOnChange;
end;
if KeyCode = KeyPageUp then
begin
FValue := FMaxValue;
FEdit.Value := FValue;
+ DoOnChange;
end;
if KeyCode = KeyPageDown then
begin
FValue := FMinValue;
FEdit.Value := FValue;
+ DoOnChange;
end;
EnableButtons;
diff --git a/src/gui/fpg_splitter.pas b/src/gui/fpg_splitter.pas
index 6094656b..8790b58e 100644
--- a/src/gui/fpg_splitter.pas
+++ b/src/gui/fpg_splitter.pas
@@ -28,14 +28,11 @@ uses
fpg_main,
fpg_widget;
-const
- clColorGrabBar = $839EFE; // Pale navy blue
- cSplitterWidth = 8;
type
-
NaturalNumber = 1..High(Integer);
+ TfpgSnapEvent = procedure(Sender: TObject; const AClosed: boolean) of object;
TfpgSplitter = class(TfpgWidget)
private
@@ -49,18 +46,21 @@ type
FOldSize: Integer;
FSplit: Integer;
FMouseOver: Boolean;
+ FOnSnap: TfpgSnapEvent;
procedure CalcSplitSize(X, Y: Integer; out NewSize, Split: Integer);
function FindControl: TfpgWidget;
procedure SetColorGrabBar(const AValue: TfpgColor);
procedure UpdateControlSize;
procedure UpdateSize(const X, Y: Integer);
protected
+ procedure DoOnSnap(const AClosed: Boolean);
function DoCanResize(var NewSize: Integer): Boolean; virtual;
procedure HandleLMouseDown(x, y: integer; shiftstate: TShiftState); override;
procedure HandleLMouseUp(x, y: integer; shiftstate: TShiftState); override;
procedure HandleMouseMove(x, y: integer; btnstate: word; shiftstate: TShiftState); override;
procedure HandleMouseEnter; override;
procedure HandleMouseExit; override;
+ procedure HandleDoubleClick(x, y: integer; button: word; shiftstate: TShiftState); override;
procedure HandlePaint; override;
procedure StopSizing; dynamic;
Procedure DrawGrabBar(ARect: TfpgRect); virtual;
@@ -68,7 +68,10 @@ type
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
published
- property ColorGrabBar: TfpgColor read FColorGrabBar write SetColorGrabBar default clColorGrabBar;
+ property Align;
+ property AutoSnap: boolean read FAutoSnap write FAutoSnap default True;
+ property ColorGrabBar: TfpgColor read FColorGrabBar write SetColorGrabBar default clSplitterGrabBar;
+ property OnSnap: TfpgSnapEvent read FOnSnap write FOnSnap;
end;
function CreateSplitter(AOwner: TComponent; ALeft, ATop, AWidth, AHeight: TfpgCoord;
@@ -76,6 +79,10 @@ function CreateSplitter(AOwner: TComponent; ALeft, ATop, AWidth, AHeight: TfpgCo
implementation
+const
+ cSplitterWidth = 8;
+
+
function CreateSplitter(AOwner: TComponent; ALeft, ATop, AWidth, AHeight: TfpgCoord;
AnAlign: TAlign): TfpgSplitter;
begin
@@ -127,12 +134,11 @@ var
r: TfpgRect;
begin
Result := nil;
- p := Point(Left, Top);
case Align of
- alLeft: Dec(p.X);
- alRight: Inc(p.X, Width);
- alTop: Dec(p.Y);
- alBottom: Inc(p.Y, Height);
+ alLeft: p := Point(Left-2, Top + (Height div 2));
+ alRight: p := Point(Right+2, Top + (Height div 2));
+ alTop: p := Point(Left + (Width div 2), Top-2);
+ alBottom: p := Point(Left + (Width div 2), Bottom+2);
else
Exit;
end;
@@ -174,16 +180,10 @@ begin
begin
case Align of
alLeft, alRight:
-// FControl.Width := FNewSize; // (1)
- FControl.SetPosition(FControl.Left, FControl.Top, FNewSize, FControl.Height); // (2)
+ FControl.SetPosition(FControl.Left, FControl.Top, FNewSize, FControl.Height);
alTop, alBottom:
-// FControl.Height := FNewSize; // (1)
- FControl.SetPosition(FControl.Left, FControl.Top, FControl.Width, FNewSize); // (2)
+ FControl.SetPosition(FControl.Left, FControl.Top, FControl.Width, FNewSize);
end;
-// FControl.UpdateWindowPosition; // (1)
- // vvzh:
- // Lines marked with (1) work wrong under Linux (e.g. folding/unfolding Memo1)
- // Lines marked with (2) work OK under both platforms. Why?
Parent.Realign;
// if Assigned(FOnMoved) then FOnMoved(Self);
FOldSize := FNewSize;
@@ -195,12 +195,21 @@ begin
CalcSplitSize(X, Y, FNewSize, FSplit);
end;
+procedure TfpgSplitter.DoOnSnap(const AClosed: Boolean);
+begin
+ if Assigned(FOnSnap) then
+ FOnSnap(self, AClosed);
+end;
+
function TfpgSplitter.DoCanResize(var NewSize: Integer): Boolean;
begin
// Result := CanResize(NewSize); // omit onCanResize call
Result := True;
if Result and (NewSize <= FMinSize) and FAutoSnap then
+ begin
NewSize := 0;
+ DoOnSnap(NewSize = 0);
+ end;
end;
procedure TfpgSplitter.HandleLMouseDown(x, y: integer; shiftstate: TShiftState);
@@ -238,7 +247,9 @@ begin
Inc(FMaxSize, FControl.Height);
end;
UpdateSize(X, Y);
+
CaptureMouse;
+
{AllocateLineDC;
with ValidParentForm(Self) do
if ActiveControl <> nil then
@@ -304,13 +315,40 @@ begin
Repaint;
end;
+procedure TfpgSplitter.HandleDoubleClick(x, y: integer; button: word;
+ shiftstate: TShiftState);
+begin
+ inherited HandleDoubleClick(x, y, button, shiftstate);
+ if FAutoSnap then
+ begin
+ if FNewSize = 0 then
+ begin
+ FNewSize := FMinSize+1;
+ DoCanResize(FNewSize);
+ end
+ else
+ begin
+ FNewSize := 0;
+ DoCanResize(FNewSize);
+ end;
+ end;
+end;
+
procedure TfpgSplitter.HandlePaint;
var
lRect: TfpgRect;
begin
Canvas.SetColor(clWindowBackground);
Canvas.FillRectangle(GetClientRect);
-
+
+ { just to make it's borders more visible in the designer }
+ if csDesigning in ComponentState then
+ begin
+ Canvas.SetColor(clInactiveWgFrame);
+ Canvas.SetLineStyle(1, lsDash);
+ Canvas.DrawRectangle(0, 0, Width, Height);
+ end;
+
case Align of
alRight,
alLeft:
@@ -459,7 +497,7 @@ begin
// FResizeStyle := rsPattern;
FOldSize := -1;
FMouseOver := False;
- FColorGrabBar := clColorGrabBar;
+ FColorGrabBar := clSplitterGrabBar;
end;
destructor TfpgSplitter.Destroy;
diff --git a/src/gui/fpg_tab.pas b/src/gui/fpg_tab.pas
index 9999fa83..66f73d2d 100644
--- a/src/gui/fpg_tab.pas
+++ b/src/gui/fpg_tab.pas
@@ -71,6 +71,8 @@ type
property PageControl: TfpgPageControl read FPageControl write SetPageControl;
property TabVisible: boolean read FTabVisible write FTabVisible;
published
+ property BackgroundColor;
+ property Enabled;
property Text: string read GetText write SetText;
property OnPaint;
end;
@@ -99,6 +101,7 @@ type
FTabPosition: TfpgTabPosition;
FPopupMenu: TfpgPopupMenu;
FTabOptions: TfpgTabOptions;
+ FLastRClickPos: TfpgPoint;
function GetActivePageIndex: integer;
function GetPage(AIndex: integer): TfpgTabSheet;
function GetPageCount: Integer;
@@ -135,6 +138,7 @@ type
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
+ function TabSheetAtPos(const x, y: integer): TfpgTabSheet;
function AppendTabSheet(ATitle: string): TfpgTabSheet;
procedure RemoveTabSheet(ATabSheet: TfpgTabSheet);
property PageCount: Integer read GetPageCount;
@@ -144,7 +148,9 @@ type
property OnClosingTabSheet: TTabSheetClosing read FOnClosingTabSheet write FOnClosingTabSheet;
published
property ActivePageIndex: integer read GetActivePageIndex write SetActivePageIndex;
+ property Align;
property BackgroundColor;
+ property Enabled;
property FixedTabWidth: integer read FFixedTabWidth write SetFixedTabWidth default 0;
property FixedTabHeight: integer read FFixedTabHeight write SetFixedTabHeight default 21;
property Hint;
@@ -636,9 +642,11 @@ procedure TfpgPageControl.pmCloseTab(Sender: TObject);
var
ts: TfpgTabSheet;
begin
- ts := ActivePage;
+ ts := TabSheetAtPos(FLastRClickPos.x, FLastRClickPos.y);
+ if not Assigned(ts) then
+ ts := ActivePage;
if ts = nil then
- Exit;
+ exit;
RemovePage(ts);
DoTabSheetClosing(ts);
ts.Free;
@@ -978,104 +986,48 @@ end;
procedure TfpgPageControl.HandleLMouseUp(x, y: integer; shiftstate: TShiftState);
var
- h: TfpgTabSheet;
- lp: integer; // left position
- bw: integer; // button width
- bh: integer; // button height
- p1, p2: integer; // tab boundaries for mouse click to take affect
+ ts: TfpgTabSheet;
begin
// debugln('>> TfpgPageControl.HandleLMouseUp');
- h := TfpgTabSheet(FPages.First);
- if h = nil then
- Exit; //==>
-
- lp := FMargin;
- if MaxButtonWidthSum > (Width-(FMargin*2)) then
- h := FFirstTabButton;
-
- case TabPosition of
- tpTop:
- begin
- p1 := FMargin;
- p2 := ButtonHeight;
- end;
-
- tpBottom:
- begin
- p1 := Height - FMargin - ButtonHeight;
- p2 := Height - FMargin;
- end;
-
- tpRight:
- begin
- p1 := Width - MaxButtonWidth;
- p2 := Width;
- end;
-
- tpLeft:
- begin
- p1 := FMargin;
- p2 := FMargin + MaxButtonWidth;
- end;
- end;
-
- if TabPosition in [tpTop, tpBottom] then
- begin
- if (y > p1) and (y < p2) then
- begin
- while h <> nil do
- begin
- bw := ButtonWidth(h.Text); // initialize button width
- if (x > lp) and (x < lp + bw) then
- begin
- if h <> ActivePage then
- ActivePage := h;
- exit;
- end; { if }
- lp := lp + bw;
- if h <> TfpgTabSheet(FPages.Last) then
- h := TfpgTabSheet(FPages[FPages.IndexOf(h)+1])
- else
- h := nil;
- end; { while }
- end; { if }
- end;
-
- if TabPosition in [tpLeft, tpRight] then
- begin
- if (x > p1) and (x < p2) then
- begin
- while h <> nil do
- begin
- bh := ButtonHeight; // initialize button height
- if (y > lp) and (y < lp + bh) then
- begin
- if h <> ActivePage then
- ActivePage := h;
- exit;
- end; { if }
- lp := lp + bh;
- if h <> TfpgTabSheet(FPages.Last) then
- h := TfpgTabSheet(FPages[FPages.IndexOf(h)+1])
- else
- h := nil;
- end; { while }
- end; { if }
- end;
+ ts := TfpgTabSheet(FPages.First);
+ if ts = nil then
+ exit; //==> { This means there are no tabs }
+
+ ts := TabSheetAtPos(x, y);
+
+ if Assigned(ts) then
+ ActivePage := ts;
inherited HandleLMouseUp(x, y, shiftstate);
end;
procedure TfpgPageControl.HandleRMouseUp(x, y: integer; shiftstate: TShiftState);
+var
+ ts: TfpgTabSheet;
+ s: TfpgString;
begin
inherited HandleRMouseUp(x, y, shiftstate);
-// ShowDefaultPopupMenu(x, y, ShiftState);
+
+ { store the position for later usage }
+ FLastRClickPos := fpgPoint(x,y);
+
if to_PMenuClose in FTabOptions then
begin
+ ts := TabSheetAtPos(x, y);
+ {$NOTE TODO: This text needs to become a resource string }
+ if Assigned(ts) then
+ s := Format('Close "%s" Tab', [ts.Text])
+ else
+ s := 'Close Tab';
+
if not Assigned(FPopupMenu) then
begin
FPopupMenu := TfpgPopupMenu.Create(self);
- FPopupMenu.AddMenuItem('Close Tab', '', @pmCloseTab);
+ FPopupMenu.AddMenuItem(s, '', @pmCloseTab);
+ end
+ else
+ begin
+ FPopupMenu.MenuItem(0).Text := s; { This is dangerous but works for now }
end;
FPopupMenu.ShowAt(self, x, y);
end;
@@ -1160,6 +1112,92 @@ begin
inherited Destroy;
end;
+function TfpgPageControl.TabSheetAtPos(const x, y: integer): TfpgTabSheet;
+var
+ h: TfpgTabSheet;
+ lp: integer; // left position
+ bw: integer; // button width
+ bh: integer; // button height
+ p1, p2: integer; // tab boundaries for mouse click to take affect
+begin
+ Result := nil;
+ h := TfpgTabSheet(FPages.First);
+
+ lp := FMargin;
+ if MaxButtonWidthSum > (Width-(FMargin*2)) then
+ h := FFirstTabButton;
+
+ case TabPosition of
+ tpTop:
+ begin
+ p1 := FMargin;
+ p2 := ButtonHeight;
+ end;
+
+ tpBottom:
+ begin
+ p1 := Height - FMargin - ButtonHeight;
+ p2 := Height - FMargin;
+ end;
+
+ tpRight:
+ begin
+ p1 := Width - MaxButtonWidth;
+ p2 := Width;
+ end;
+
+ tpLeft:
+ begin
+ p1 := FMargin;
+ p2 := FMargin + MaxButtonWidth;
+ end;
+ end;
+
+ if TabPosition in [tpTop, tpBottom] then
+ begin
+ if (y > p1) and (y < p2) then
+ begin
+ while h <> nil do
+ begin
+ bw := ButtonWidth(h.Text); // initialize button width
+ if (x > lp) and (x < lp + bw) then
+ begin
+ if h <> ActivePage then
+ Result := h;
+ exit;
+ end; { if }
+ lp := lp + bw;
+ if h <> TfpgTabSheet(FPages.Last) then
+ h := TfpgTabSheet(FPages[FPages.IndexOf(h)+1])
+ else
+ h := nil;
+ end; { while }
+ end; { if }
+ end;
+
+ if TabPosition in [tpLeft, tpRight] then
+ begin
+ if (x > p1) and (x < p2) then
+ begin
+ while h <> nil do
+ begin
+ bh := ButtonHeight; // initialize button height
+ if (y > lp) and (y < lp + bh) then
+ begin
+ if h <> ActivePage then
+ Result := h;
+ exit;
+ end; { if }
+ lp := lp + bh;
+ if h <> TfpgTabSheet(FPages.Last) then
+ h := TfpgTabSheet(FPages[FPages.IndexOf(h)+1])
+ else
+ h := nil;
+ end; { while }
+ end; { if }
+ end;
+end;
+
function TfpgPageControl.AppendTabSheet(ATitle: string): TfpgTabSheet;
begin
Result := TfpgTabSheet.Create(self);
diff --git a/src/gui/fpg_trackbar.pas b/src/gui/fpg_trackbar.pas
index 524a4c4c..9134a96d 100644
--- a/src/gui/fpg_trackbar.pas
+++ b/src/gui/fpg_trackbar.pas
@@ -68,6 +68,7 @@ type
public
constructor Create(AOwner: TComponent); override;
published
+ property Align;
property BackgroundColor;
property Hint;
property Min: integer read FMin write SetMin default 0;
@@ -115,7 +116,9 @@ type
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
published
+ property Align;
property BackgroundColor;
+ property Enabled;
property Position: integer read FPosition write SetTBPosition default 0;
property ScrollStep: integer read FScrollStep write FScrollStep default 1;
property Min: integer read FMin write SetMin default 0;
diff --git a/src/gui/fpg_tree.pas b/src/gui/fpg_tree.pas
index b61b0c29..570e1011 100644
--- a/src/gui/fpg_tree.pas
+++ b/src/gui/fpg_tree.pas
@@ -48,6 +48,8 @@ uses
type
+ TfpgNodeAttachMode = (naAdd, naAddFirst, naAddChild, naAddChildFirst, naInsert);
+
PfpgTreeColumnWidth = ^TfpgTreeColumnWidth;
TfpgTreeColumnWidth = record
next: PfpgTreeColumnWidth;
@@ -55,6 +57,7 @@ type
end;
// forward declaration
+ TfpgTreeView = class;
TfpgTreeNode = class;
TfpgTreeNodeFindMethod = procedure(ANode: TfpgTreeNode; var AFound: boolean) of object;
@@ -77,6 +80,7 @@ type
FText: TfpgString;
FTextColor: TfpgColor;
FHasChildren: Boolean;
+ FTree: TfpgTreeView;
procedure SetCollapsed(const AValue: boolean);
procedure SetInactSelColor(const AValue: TfpgColor);
procedure SetInactSelTextColor(const AValue: TfpgColor);
@@ -87,6 +91,7 @@ type
procedure SetTextColor(const AValue: TfpgColor);
procedure DoRePaint;
procedure SetHasChildren(const AValue: Boolean);
+ procedure DoTreeCheck(ANode: TfpgTreeNode);
public
constructor Create;
destructor Destroy; override;
@@ -99,11 +104,12 @@ type
function FindSubNode(AData: TObject; ARecursive: Boolean): TfpgTreeNode; overload;
function GetMaxDepth: integer;
function GetMaxVisibleDepth: integer;
- procedure Append(var aValue: TfpgTreeNode);
+ procedure Append(var ANode: TfpgTreeNode);
procedure Clear; // remove all nodes recursively
procedure Collapse;
procedure Expand;
procedure Remove(var aNode: TfpgTreeNode);
+ procedure MoveTo(Destination: TfpgTreeNode; Mode: TfpgNodeAttachMode);
procedure UnregisterSubNode(aNode: TfpgTreeNode);
// parent color settings
function ParentInactSelColor: TfpgColor;
@@ -203,12 +209,6 @@ type
procedure DrawHeader(ACol: integer; ARect: TfpgRect; AFlags: integer); virtual;
procedure DoChange; virtual;
procedure DoExpand(ANode: TfpgTreeNode); virtual;
- // only visual (visible) nodes
- function NextVisualNode(ANode: TfpgTreeNode): TfpgTreeNode;
- function PrevVisualNode(ANode: TfpgTreeNode): TfpgTreeNode;
- // any next node, even if node is collapsed
- function NextNode(ANode: TfpgTreeNode): TfpgTreeNode;
- function PrevNode(ANode: TfpgTreeNode): TfpgTreeNode;
// the nodes between the given node and the direct next node
function SpaceToVisibleNext(aNode: TfpgTreeNode): integer;
function StepToRoot(aNode: TfpgTreeNode): integer;
@@ -220,6 +220,14 @@ type
function GetColumnWidth(AIndex: word): word;
procedure GotoNextNodeUp;
procedure GotoNextNodeDown;
+ procedure FullCollapse;
+ procedure FullExpand;
+ // any next node, even if node is collapsed
+ function NextNode(ANode: TfpgTreeNode): TfpgTreeNode;
+ function PrevNode(ANode: TfpgTreeNode): TfpgTreeNode;
+ // only visual (visible) nodes
+ function NextVisualNode(ANode: TfpgTreeNode): TfpgTreeNode;
+ function PrevVisualNode(ANode: TfpgTreeNode): TfpgTreeNode;
property Font: TfpgFont read FFont;
// Invisible node that starts the tree
property RootNode: TfpgTreeNode read GetRootNode;
@@ -227,7 +235,9 @@ type
property ImageList: TfpgImageList read FImageList write FImageList;
property PopupMenu: TfpgPopupMenu read FPopupMenu write FPopupMenu;
published
+ property Align;
property DefaultColumnWidth: word read FDefaultColumnWidth write SetDefaultColumnWidth default 15;
+ property Enabled;
property FontDesc: string read GetFontDesc write SetFontDesc;
property IndentNodeWithNoImage: boolean read FIndentNodeWithNoImage write SetIndentNodeWithNoImage default True;
property NoImageIndent: integer read FNoImageIndent write FNoImageIndent default 16;
@@ -346,6 +356,12 @@ begin
end;
end;
+procedure TfpgTreeNode.DoTreeCheck(ANode: TfpgTreeNode);
+begin
+ if ANode.FTree <> FTree then
+ raise Exception.Create('Nodes must be of the same tree');
+end;
+
constructor TfpgTreeNode.Create;
begin
FData := nil;
@@ -404,20 +420,21 @@ begin
end;
end;
-procedure TfpgTreeNode.Append(var aValue: TfpgTreeNode);
+procedure TfpgTreeNode.Append(var ANode: TfpgTreeNode);
begin
- aValue.Parent := self;
- aValue.Next := nil;
+ DoTreeCheck(ANode);
+ ANode.Parent := self;
+ ANode.Next := nil;
if FFirstSubNode = nil then
- FFirstSubNode := aValue;
+ FFirstSubNode := ANode;
- aValue.prev := FLastSubNode;
+ ANode.Prev := FLastSubNode;
if FLastSubNode <> nil then
- FLastSubNode.Next := aValue;
+ FLastSubNode.Next := ANode;
- FLastSubNode := aValue;
+ FLastSubNode := ANode;
end;
function TfpgTreeNode.FindSubNode(AText: string; ARecursive: Boolean): TfpgTreeNode;
@@ -536,6 +553,7 @@ begin
writeln('TfpgTreeNode.AppendText');
{$ENDIF}
h := TfpgTreeNode.Create;
+ h.FTree := FTree;
h.Text := AText;
Append(h);
result := h;
@@ -659,6 +677,53 @@ begin
aNode.parent := nil;
end;
+procedure TfpgTreeNode.MoveTo(Destination: TfpgTreeNode; Mode: TfpgNodeAttachMode);
+begin
+ if Destination = nil then
+ Exit;
+ DoTreeCheck(Destination);
+
+ Parent.Remove(self);
+ case Mode of
+ naAdd:
+ begin
+ Destination.Parent.Append(self);
+ end;
+ naAddFirst:
+ begin
+ Next := Destination.Parent.FirstSubNode;
+ Next.Prev := self;
+ Destination.Parent.FFirstSubNode := self;
+ Parent := Destination.Parent;
+ end;
+ naAddChild:
+ begin
+ Destination.Append(self);
+ end;
+ naAddChildFirst:
+ begin
+ Next := Destination.FirstSubNode;
+ if Assigned(Destination.FirstSubNode) then
+ Destination.FirstSubNode.Prev := self;
+ Destination.FFirstSubNode := self;
+ Parent := Destination;
+ if Destination.LastSubNode = nil then
+ Destination.FLastSubNode := self;
+ end;
+ naInsert:
+ begin
+ Prev := Destination.Prev;
+ Next := Destination;
+ Parent := Destination.Parent;
+ Destination.Prev := self;
+ if Prev = nil then
+ Parent.FFirstSubNode := self
+ else
+ Prev.Next := self;
+ end;
+ end; { case }
+end;
+
procedure TfpgTreeNode.Clear;
var
n: TfpgTreeNode;
@@ -758,7 +823,10 @@ end;
function TfpgTreeview.GetRootNode: TfpgTreeNode;
begin
if FRootNode = nil then
+ begin
FRootNode := TfpgTreeNode.Create;
+ FRootNode.FTree := self;
+ end;
FRootNode.TextColor := clText1;
FRootnode.SelTextColor := clSelectionText;
FRootnode.SelColor := clSelection;
@@ -796,10 +864,14 @@ begin
n := AValue.Parent;
while n <> nil do
begin
- n.Expand;
- DoExpand(n);
+ if n.Collapsed then
+ begin
+ n.Expand;
+ DoExpand(n);
+ end;
n := n.parent;
end;
+ UpdateScrollbars;
end;
dy := GetAbsoluteNodeTop(FSelection);
@@ -809,7 +881,7 @@ begin
begin
if FVScrollBar.Max = 0 then // the first time and no expansion happened before.
FVScrollBar.Max := dy + Height;
- FVScrollbar.Position := dy + nh - vh;
+ FVScrollbar.Position := dy + nh - (vh div 2);
FYOffset := FVScrollbar.Position;
UpdateScrollBars;
if FHScrollbar.Visible then // HScrollbar appeared so we need to adjust position again
@@ -1082,10 +1154,45 @@ begin
end;
procedure TfpgTreeView.GotoNextNodeDown;
+var
+ lNode: TfpgTreeNode;
begin
- if Selection = RootNode.LastSubNode then
+ if (Selection = RootNode.LastSubNode) and (RootNode.LastSubNode.CountRecursive = 0) then
Exit;
- Selection := NextNode(Selection);
+
+ lNode := NextNode(Selection);
+ if lNode <> nil then
+ Selection := lNode;
+end;
+
+procedure TfpgTreeView.FullCollapse;
+var
+ n: TfpgTreeNode;
+begin
+ n := NextNode(RootNode);
+ repeat
+ if n <> nil then
+ begin
+ n.Collapse;
+ end;
+ n := NextNode(n);
+ until n = nil;
+ Repaint;
+end;
+
+procedure TfpgTreeView.FullExpand;
+var
+ n: TfpgTreeNode;
+begin
+ n := NextNode(RootNode);
+ repeat
+ if n <> nil then
+ begin
+ n.Expand;
+ end;
+ n := NextNode(n);
+ until n = nil;
+ Repaint;
end;
procedure TfpgTreeview.PreCalcColumnLeft;
@@ -1126,8 +1233,11 @@ begin
FVScrollbar.Visible := VisibleHeight < (GetNodeHeightSum * GetNodeHeight);
FVScrollbar.Min := 0;
FVScrollbar.Max := (GetNodeHeightSum * GetNodeHeight) - VisibleHeight + FHScrollbar.Height;
+ FVScrollbar.PageSize := (VisibleHeight div 4) * 3; // three quarters of the height
+ FVScrollbar.ScrollStep := GetNodeHeight; // up/down buttons move the height of the font
FHScrollbar.Min := 0;
FHScrollbar.Max := MaxNodeWidth - VisibleWidth + FVScrollbar.Width;
+ FHScrollbar.PageSize := (VisibleWidth div 4) * 3; // three quarters of the height
FHScrollbar.Visible := MaxNodeWidth > Width - 2;
if not FVScrollbar.Visible then
begin
@@ -1224,7 +1334,7 @@ begin
x := x + FXOffset;
cancel := False;
last := RootNode;
- while not (((i - 1) * GetNodeHeight - 2 <= y) and ((i) * GetNodeHeight + 2 >= y)) do
+ while not ((((i - 1) * GetNodeHeight) <= y) and ((i * GetNodeHeight) >= y)) do
begin
node := NextVisualNode(last);
if node = nil then
@@ -1430,25 +1540,26 @@ begin
Canvas.SetColor(h.ParentInactSelColor);
Canvas.SetTextColor(h.ParentInActSelTextColor);
end;
- Canvas.FillRectangle(w - FXOffset, YPos - FYOffset + col - GetNodeHeight + FFont.Ascent div 2 - 2, GetNodeWidth(h), GetNodeHeight);
+ // draw selection rectangle
+ Canvas.FillRectangle(w - FXOffset, ACenterPos - (GetNodeHeight div 2), GetNodeWidth(h), GetNodeHeight);
if (ImageList <> nil) and ShowImages then
begin
AImageItem := ImageList.Item[h.ImageIndex];
if AImageItem <> nil then
begin
- Canvas.DrawImagePart(w - FXOffset + 1, ACenterPos - 4, AImageItem.Image, 0, 0, 16, 16);
- Canvas.DrawString(w - FXOffset + 1 + AImageItem.Image.Width + 2, ACenterPos - FFont.Ascent div 2, h.text);
+ Canvas.DrawImagePart(w - FXOffset + 1, ACenterPos - 8, AImageItem.Image, 0, 0, 16, 16);
+ Canvas.DrawString(w - FXOffset + 1 + AImageItem.Image.Width + 2, ACenterPos - (GetNodeHeight div 2), h.text);
end
else
begin
if FIndentNodeWithNoImage then
- Canvas.DrawString(w - FXOffset + 1 + FNoImageIndent + 2 {spacer}, ACenterPos - FFont.Ascent div 2, h.text)
+ Canvas.DrawString(w - FXOffset + 1 + FNoImageIndent + 2 {spacer}, ACenterPos - (GetNodeHeight div 2), h.text)
else
- Canvas.DrawString(w - FXOffset + 1, ACenterPos - FFont.Ascent div 2, h.text);
+ Canvas.DrawString(w - FXOffset + 1, ACenterPos - (GetNodeHeight div 2), h.text);
end;
end
else
- Canvas.DrawString(w - FXOffset + 1, ACenterPos - FFont.Ascent div 2, h.text);
+ Canvas.DrawString(w - FXOffset + 1, ACenterPos - (GetNodeHeight div 2), h.text);
Canvas.SetTextColor(h.ParentTextColor);
end
else
@@ -1458,19 +1569,19 @@ begin
AImageItem := ImageList.Item[h.ImageIndex];
if AImageItem <> nil then
begin
- Canvas.DrawImagePart(w - FXOffset + 1, ACenterPos - 4, AImageItem.Image, 0, 0, 16, 16);
- Canvas.DrawString(w - FXOffset + 1 + AImageItem.Image.Width + 2, ACenterPos - FFont.Ascent div 2, h.text);
+ Canvas.DrawImagePart(w - FXOffset + 1, ACenterPos - 8, AImageItem.Image, 0, 0, 16, 16);
+ Canvas.DrawString(w - FXOffset + 1 + AImageItem.Image.Width + 2, ACenterPos - (GetNodeHeight div 2), h.text);
end
else
begin
if FIndentNodeWithNoImage then
- Canvas.DrawString(w - FXOffset + 1 + FNoImageIndent + 2 {spacer}, ACenterPos - FFont.Ascent div 2, h.text)
+ Canvas.DrawString(w - FXOffset + 1 + FNoImageIndent + 2 {spacer}, ACenterPos - (GetNodeHeight div 2), h.text)
else
- Canvas.DrawString(w - FXOffset + 1, ACenterPos - FFont.Ascent div 2, h.text);
+ Canvas.DrawString(w - FXOffset + 1, ACenterPos - (GetNodeHeight div 2), h.text);
end
end
else
- Canvas.DrawString(w - FXOffset + 1, ACenterPos - FFont.Ascent div 2, h.text);
+ Canvas.DrawString(w - FXOffset + 1, ACenterPos - (GetNodeHeight div 2), h.text);
end; { if/else }
Canvas.SetLineStyle(1, FTreeLineStyle);
@@ -1680,7 +1791,16 @@ begin
Selection := RootNode.FirstSubNode;
end;
end;
-
+
+ keyPageUp:
+ begin
+ FVScrollbar.PageUp;
+ end;
+
+ keyPageDown:
+ begin
+ FVScrollbar.PageDown;
+ end;
else
Consumed := False;
end;
@@ -1699,23 +1819,25 @@ procedure TfpgTreeview.HandleMouseScroll(x, y: integer;
shiftstate: TShiftState; delta: smallint);
var
i: integer;
+ dy: integer;
begin
inherited HandleMouseScroll(x, y, shiftstate, delta);
- if delta > 0 then
+ dy := (VisibleHeight div 3); // mouse scrolling is 1/3 of the height
+ if delta > 0 then // scrolling down
begin
- inc(FYOffset, FScrollWheelDelta);
+ inc(FYOffset, dy); //FScrollWheelDelta);
i := (GetNodeHeightSum * GetNodeHeight) - VisibleHeight + FHScrollbar.Height;
if FYOffset > i then
FYOffset := i;
- i := FVScrollbar.Position + FScrollWheelDelta;
+ i := FVScrollbar.Position + dy;
FVScrollbar.Position := i;
end
else
- begin
- dec(FYOffset, FScrollWheelDelta);
+ begin // scrolling up
+ dec(FYOffset, dy); //FScrollWheelDelta);
if FYOffset < 0 then
FYOffset := 0;
- i := FVScrollbar.Position - FScrollWheelDelta;
+ i := FVScrollbar.Position - dy;
FVScrollbar.Position := i;
end;
UpdateScrollbars;
@@ -1807,7 +1929,7 @@ function TfpgTreeView.NextNode(ANode: TfpgTreeNode): TfpgTreeNode;
begin
while ANode.Next = nil do
begin
- ANode := ANode.Parent;
+ ANode := ANode.Parent; // back out one level depth
if ANode = nil then
exit; //==>
end;
diff --git a/src/gui/inputquerydialog.inc b/src/gui/inputquerydialog.inc
index 5b063233..094a58e2 100644
--- a/src/gui/inputquerydialog.inc
+++ b/src/gui/inputquerydialog.inc
@@ -30,6 +30,7 @@ type
btnCancel: TfpgButton;
{@VFD_HEAD_END: fpgQueryDialog}
procedure SetupCaptions;
+ procedure edtTextKeyPressed(Sender: TObject; var KeyCode: word; var ShiftState: TShiftState; var Consumed: boolean);
public
procedure AfterCreate; override;
end;
@@ -47,8 +48,10 @@ begin
try
dlg.WindowTitle := ACaption;
dlg.lblText.Text := APrompt;
+ dlg.edtText.Text := Value;
Result := dlg.ShowModal = mrOK;
- Value := dlg.edtText.Text;
+ if Result then
+ Value := dlg.edtText.Text;
finally
dlg.Free;
end;
@@ -62,6 +65,12 @@ begin
btnCancel.Text := rsCancel;
end;
+procedure TfpgQueryDialog.edtTextKeyPressed(Sender: TObject; var KeyCode: word; var ShiftState: TShiftState; var Consumed: boolean);
+begin
+ if KeyCode = keyEnter then
+ btnOK.Click;
+end;
+
procedure TfpgQueryDialog.AfterCreate;
begin
{%region 'Auto-generated GUI code' -fold}
@@ -94,6 +103,7 @@ begin
TabOrder := 2;
Text := '';
FontDesc := '#Edit1';
+ OnKeyPress := @edtTextKeyPressed;
end;
btnOK := TfpgButton.Create(self);
diff --git a/src/gui/managebookmarksdialog.inc b/src/gui/managebookmarksdialog.inc
new file mode 100644
index 00000000..ceef4cba
--- /dev/null
+++ b/src/gui/managebookmarksdialog.inc
@@ -0,0 +1,227 @@
+{
+ fpGUI - Free Pascal GUI Toolkit
+
+ Copyright (C) 2006 - 2010 See the file AUTHORS.txt, included in this
+ distribution, for details of the copyright.
+
+ See the file COPYING.modifiedLGPL, included in this distribution,
+ for details about redistributing fpGUI.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+ Description:
+ This unit contains the dialog to manage bookmarks from the
+ File Open/Save dialog.
+}
+
+{%mainunit fpg_dialogs.pas}
+
+{$IFDEF read_interface}
+
+ TConfigureBookmarksForm = class(TfpgForm)
+ private
+ {@VFD_HEAD_BEGIN: ConfigureBookmarksForm}
+ grdBookmarks: TfpgStringGrid;
+ btnChangeTitle: TfpgButton;
+ btnDelete: TfpgButton;
+ btnClose: TfpgButton;
+ btnMoveUp: TfpgButton;
+ btnMoveDown: TfpgButton;
+ {@VFD_HEAD_END: ConfigureBookmarksForm}
+ FIni: TfpgIniFile;
+ procedure SetupCaptions;
+ procedure PopulateGrid;
+ procedure UpdateINIFile;
+ procedure btnChangeTitleClicked(Sender: TObject);
+ procedure btnDeleteClicked(Sender: TObject);
+ public
+ constructor Create(var AIniFile: TfpgIniFile); reintroduce;
+ destructor Destroy; override;
+ procedure AfterCreate; override;
+ end;
+
+
+{$ENDIF read_interface}
+
+{$IFDEF read_implementation}
+
+procedure TConfigureBookmarksForm.SetupCaptions;
+begin
+ WindowTitle := rsConfigureBookmarks;
+ btnClose.Text := rsClose;
+ btnMoveUp.Text := rsMoveUp;
+ btnMoveDown.Text := rsMoveDown;
+ btnChangeTitle.Text := rsChangeTitle;
+ btnDelete.Text := rsDelete;
+ grdBookmarks.ColumnTitle[0] := rsName;
+ grdBookmarks.ColumnTitle[1] := rsDirectory;
+end;
+
+procedure TConfigureBookmarksForm.PopulateGrid;
+var
+ i: integer;
+ lst: TStringList;
+begin
+ lst := TStringList.Create;
+ FIni.ReadSection(FPG_BOOKMARK_SECTION, lst);
+ grdBookmarks.RowCount := lst.Count;
+ grdBookmarks.BeginUpdate;
+ for i := 0 to lst.Count-1 do
+ begin
+ grdBookmarks.Cells[0, i] := lst[i];
+ grdBookmarks.Cells[1, i] := FIni.ReadString(FPG_BOOKMARK_SECTION, lst[i], '');
+ end;
+ grdBookmarks.EndUpdate;
+ lst.Free;
+end;
+
+procedure TConfigureBookmarksForm.UpdateINIFile;
+var
+ i: integer;
+begin
+ FIni.EraseSection(FPG_BOOKMARK_SECTION);
+ for i := 0 to grdBookmarks.RowCount-1 do
+ begin
+ FIni.WriteString(FPG_BOOKMARK_SECTION, grdBookmarks.Cells[0, i], grdBookmarks.Cells[1, i]);
+ end;
+end;
+
+procedure TConfigureBookmarksForm.btnChangeTitleClicked(Sender: TObject);
+var
+ s: TfpgString;
+begin
+ if (grdBookmarks.RowCount = 0) or (grdBookmarks.FocusRow = -1) then
+ Exit;
+ s := grdBookmarks.Cells[0, grdBookmarks.FocusRow];
+ if fpgInputQuery('Bookmark', 'Enter new bookmark name', s) then
+ begin
+ s := StringReplace(s, '=', '-', [rfReplaceAll]); // don't allow '=' sign in name (ini file requirement)
+ grdBookmarks.Cells[0, grdBookmarks.FocusRow] := s;
+ end;
+end;
+
+procedure TConfigureBookmarksForm.btnDeleteClicked(Sender: TObject);
+begin
+ if (grdBookmarks.RowCount = 0) or (grdBookmarks.FocusRow = -1) then
+ Exit;
+ grdBookmarks.DeleteRow(grdBookmarks.FocusRow);
+end;
+
+constructor TConfigureBookmarksForm.Create(var AIniFile: TfpgIniFile);
+begin
+ inherited Create(nil);
+ FIni := AIniFile;
+end;
+
+destructor TConfigureBookmarksForm.Destroy;
+begin
+ UpdateINIFile;
+ inherited Destroy;
+end;
+
+procedure TConfigureBookmarksForm.AfterCreate;
+begin
+ {%region 'Auto-generated GUI code' -fold}
+ {@VFD_BODY_BEGIN: ConfigureBookmarksForm}
+ Name := 'ConfigureBookmarksForm';
+ SetPosition(331, 184, 596, 237);
+ WindowTitle := 'Configure Bookmarks';
+ Hint := '';
+ ShowHint := True;
+ WindowPosition := wpOneThirdDown;
+
+ grdBookmarks := TfpgStringGrid.Create(self);
+ with grdBookmarks do
+ begin
+ Name := 'grdBookmarks';
+ SetPosition(8, 8, 473, 218);
+ Anchors := [anLeft,anRight,anTop,anBottom];
+ AddColumn('Title', 150, taLeftJustify);
+ AddColumn('Directory', 300, taLeftJustify);
+ FontDesc := '#Grid';
+ HeaderFontDesc := '#GridHeader';
+ Hint := '';
+ RowCount := 0;
+ RowSelect := True;
+ TabOrder := 1;
+ Options := [go_SmoothScroll, go_AlternativeColor]
+ end;
+
+ btnChangeTitle := TfpgButton.Create(self);
+ with btnChangeTitle do
+ begin
+ Name := 'btnChangeTitle';
+ SetPosition(489, 8, 100, 24);
+ Anchors := [anRight,anTop];
+ Text := 'btnChangeTitle';
+ FontDesc := '#Label1';
+ Hint := '';
+ ImageName := '';
+ TabOrder := 2;
+ OnClick := @btnChangeTitleClicked;
+ end;
+
+ btnDelete := TfpgButton.Create(self);
+ with btnDelete do
+ begin
+ Name := 'btnDelete';
+ SetPosition(489, 36, 100, 24);
+ Anchors := [anRight,anTop];
+ Text := 'btnDelete';
+ FontDesc := '#Label1';
+ Hint := '';
+ ImageName := '';
+ TabOrder := 3;
+ OnClick := @btnDeleteClicked;
+ end;
+
+ btnMoveUp := TfpgButton.Create(self);
+ with btnMoveUp do
+ begin
+ Name := 'btnMoveUp';
+ SetPosition(489, 80, 100, 24);
+ Anchors := [anRight,anTop];
+ Text := 'btnMoveUp';
+ FontDesc := '#Label1';
+ Hint := '';
+ ImageName := 'sys.sb.up';
+ TabOrder := 4;
+ end;
+
+ btnMoveDown := TfpgButton.Create(self);
+ with btnMoveDown do
+ begin
+ Name := 'btnMoveDown';
+ SetPosition(489, 108, 100, 24);
+ Anchors := [anRight,anTop];
+ Text := 'btnMoveDown';
+ FontDesc := '#Label1';
+ Hint := '';
+ ImageName := 'sys.sb.down';
+ TabOrder := 5;
+ end;
+
+ btnClose := TfpgButton.Create(self);
+ with btnClose do
+ begin
+ Name := 'btnClose';
+ SetPosition(489, 204, 100, 24);
+ Anchors := [anRight,anBottom];
+ Text := 'btnClose';
+ FontDesc := '#Label1';
+ Hint := '';
+ ImageName := 'stdimg.close';
+ ModalResult := mrOK;
+ TabOrder := 6;
+ end;
+
+ {@VFD_BODY_END: ConfigureBookmarksForm}
+ {%endregion}
+
+ SetupCaptions;
+ PopulateGrid;
+end;
+{$ENDIF read_implementation}
+
diff --git a/src/gui/selectdirdialog.inc b/src/gui/selectdirdialog.inc
index d09f11c8..6a96d046 100644
--- a/src/gui/selectdirdialog.inc
+++ b/src/gui/selectdirdialog.inc
@@ -7,6 +7,7 @@
tv: TfpgTreeView;
FRootDir: TfpgString;
FShowHidden: Boolean;
+ FImagelist: TfpgImageList;
function GetAbsolutePath(Node: TfpgTreeNode): TfpgString;
procedure InitializeTreeview;
procedure SetRootDir(const AValue: TfpgString);
@@ -19,6 +20,7 @@
{$ENDIF}
public
constructor Create(AOwner: TComponent); override;
+ destructor Destroy; override;
procedure AfterCreate; override;
{ return the selected directory or set initial selected dir }
property SelectedDir: TfpgString read GetSelectedDir write SetSelectedDir;
@@ -158,6 +160,7 @@ begin
for i := 0 to SortList.Count - 1 do
begin
NewNode := Node.AppendText(SortList[i]);
+ NewNode.ImageIndex := 0;
// NewNode := TV.Items.AddChild(Node, SortList[i]);
// if subdirectories then indicate so.
{ Todo: Fix this by adding HasChildren to Treeview }
@@ -245,9 +248,20 @@ end;
{$ENDIF}
constructor TfpgSelectDirDialog.Create(AOwner: TComponent);
+var
+ img: TfpgImage;
begin
inherited Create(AOwner);
FShowHidden := False;
+ FImagelist := TfpgImageList.Create;
+ img := fpgImages.GetImage('stdimg.folder').ImageFromSource;
+ FImageList.AddImage(img);
+end;
+
+destructor TfpgSelectDirDialog.Destroy;
+begin
+ FImagelist.Free;
+ inherited Destroy;
end;
procedure TfpgSelectDirDialog.AfterCreate;
@@ -263,7 +277,10 @@ begin
begin
Name := 'tv';
SetPosition(FSpacing, FSpacing, 288, 322);
- OnExpand :=@NodeExpanded;
+ Anchors := [anTop, anLeft, anRight, anBottom];
+ ImageList := FImageList;
+ ShowImages := True;
+ OnExpand := @NodeExpanded;
end;
// reposition buttons