mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-16 20:29:12 +02:00
added trayicon package from Felipe Monteiro de Carvalho
git-svn-id: trunk@8539 -
This commit is contained in:
parent
c4ab570ba7
commit
7d0a2cfe64
22
.gitattributes
vendored
22
.gitattributes
vendored
@ -448,6 +448,27 @@ components/tdbf/dbflaz.pas svneol=native#text/pascal
|
||||
components/tdbf/registerdbf.lrs svneol=native#text/pascal
|
||||
components/tdbf/registerdbf.pas svneol=native#text/pascal
|
||||
components/tdbf/tdbf.xpm -text svneol=native#image/x-xpixmap
|
||||
components/trayicon/examples/clean.bat svneol=native#text/plain
|
||||
components/trayicon/examples/clean.sh svneol=native#text/plain
|
||||
components/trayicon/examples/frmtest.dfm svneol=native#text/plain
|
||||
components/trayicon/examples/frmtest.lfm svneol=native#text/plain
|
||||
components/trayicon/examples/frmtest.lrs svneol=native#text/plain
|
||||
components/trayicon/examples/frmtest.pas svneol=native#text/plain
|
||||
components/trayicon/examples/icon.ico -text svneol=unset#image/ico
|
||||
components/trayicon/examples/icon.xpm svneol=native#text/plain
|
||||
components/trayicon/examples/magnifier.or -text
|
||||
components/trayicon/examples/magnifier.res -text
|
||||
components/trayicon/examples/wndtray.cfg svneol=native#text/plain
|
||||
components/trayicon/examples/wndtray.dof svneol=native#text/plain
|
||||
components/trayicon/examples/wndtray.dpr svneol=native#text/plain
|
||||
components/trayicon/examples/wndtray.lpi svneol=native#text/plain
|
||||
components/trayicon/trayicon.pas svneol=native#text/plain
|
||||
components/trayicon/trayiconlaz.lpk svneol=native#text/plain
|
||||
components/trayicon/trayiconlaz.pas svneol=native#text/plain
|
||||
components/trayicon/wsgtk2trayicon.pas svneol=native#text/plain
|
||||
components/trayicon/wsgtktrayicon.pas svneol=native#text/plain
|
||||
components/trayicon/wstrayicon.pas svneol=native#text/plain
|
||||
components/trayicon/wswin32trayicon.pas svneol=native#text/plain
|
||||
components/turbopower_ipro/ipanim.pas svneol=native#text/pascal
|
||||
components/turbopower_ipro/ipconst.pas svneol=native#text/pascal
|
||||
components/turbopower_ipro/ipdefct.inc svneol=native#text/pascal
|
||||
@ -2141,6 +2162,7 @@ packager/globallinks/lazopenglcontext-0.lpl svneol=native#text/plain
|
||||
packager/globallinks/macosfiles-0.lpl svneol=native#text/plain
|
||||
packager/globallinks/prettyformat-0.lpl svneol=native#text/plain
|
||||
packager/globallinks/projtemplates-0.lpl svneol=native#text/plain
|
||||
packager/globallinks/trayiconlaz-0.lpl svneol=native#text/plain
|
||||
packager/installpkgsetdlg.lfm svneol=native#text/plain
|
||||
packager/installpkgsetdlg.lrs svneol=native#text/pascal
|
||||
packager/installpkgsetdlg.pas svneol=native#text/pascal
|
||||
|
9
components/trayicon/examples/clean.bat
Normal file
9
components/trayicon/examples/clean.bat
Normal file
@ -0,0 +1,9 @@
|
||||
del *.o
|
||||
del *.or
|
||||
del *.dcu
|
||||
del *.ppu
|
||||
del *.bak
|
||||
del *.~pas
|
||||
del *.~dpr
|
||||
del *.dpr~
|
||||
del *.dof
|
2
components/trayicon/examples/clean.sh
Executable file
2
components/trayicon/examples/clean.sh
Executable file
@ -0,0 +1,2 @@
|
||||
#!/bin/bash
|
||||
rm -f $1*.or
|
29
components/trayicon/examples/frmtest.dfm
Normal file
29
components/trayicon/examples/frmtest.dfm
Normal file
@ -0,0 +1,29 @@
|
||||
object Form1: TForm1
|
||||
Caption = 'Form1'
|
||||
ClientHeight = 300
|
||||
ClientWidth = 400
|
||||
OnCreate = FormCreate
|
||||
PixelsPerInch = 96
|
||||
Left = 290
|
||||
Height = 300
|
||||
Top = 175
|
||||
Width = 400
|
||||
object Button1: TButton
|
||||
Caption = 'Show'
|
||||
OnClick = Button1Click
|
||||
TabOrder = 0
|
||||
Left = 75
|
||||
Height = 25
|
||||
Top = 56
|
||||
Width = 75
|
||||
end
|
||||
object Button2: TButton
|
||||
Caption = 'Hide'
|
||||
OnClick = Button2Click
|
||||
TabOrder = 1
|
||||
Left = 75
|
||||
Height = 25
|
||||
Top = 95
|
||||
Width = 75
|
||||
end
|
||||
end
|
34
components/trayicon/examples/frmtest.lfm
Normal file
34
components/trayicon/examples/frmtest.lfm
Normal file
@ -0,0 +1,34 @@
|
||||
object Form1: TForm1
|
||||
ActiveControl = Button1
|
||||
Caption = 'Form1'
|
||||
ClientHeight = 300
|
||||
ClientWidth = 400
|
||||
OnCreate = FormCreate
|
||||
PixelsPerInch = 78
|
||||
HorzScrollBar.Page = 399
|
||||
VertScrollBar.Page = 299
|
||||
Left = 290
|
||||
Height = 300
|
||||
Top = 175
|
||||
Width = 400
|
||||
object Button1: TButton
|
||||
BorderSpacing.InnerBorder = 2
|
||||
Caption = 'Show'
|
||||
OnClick = Button1Click
|
||||
TabOrder = 0
|
||||
Left = 75
|
||||
Height = 25
|
||||
Top = 56
|
||||
Width = 75
|
||||
end
|
||||
object Button2: TButton
|
||||
BorderSpacing.InnerBorder = 2
|
||||
Caption = 'Hide'
|
||||
OnClick = Button2Click
|
||||
TabOrder = 1
|
||||
Left = 75
|
||||
Height = 25
|
||||
Top = 95
|
||||
Width = 75
|
||||
end
|
||||
end
|
13
components/trayicon/examples/frmtest.lrs
Normal file
13
components/trayicon/examples/frmtest.lrs
Normal file
@ -0,0 +1,13 @@
|
||||
{ This is an automatically generated lazarus resource file }
|
||||
|
||||
LazarusResources.Add('TForm1','FORMDATA',[
|
||||
'TPF0'#6'TForm1'#5'Form1'#13'ActiveControl'#7#7'Button1'#7'Caption'#6#5'Form1'
|
||||
+#12'ClientHeight'#3','#1#11'ClientWidth'#3#144#1#8'OnCreate'#7#10'FormCreate'
|
||||
+#13'PixelsPerInch'#2'N'#18'HorzScrollBar.Page'#3#143#1#18'VertScrollBar.Page'
|
||||
+#3'+'#1#4'Left'#3'"'#1#6'Height'#3','#1#3'Top'#3#175#0#5'Width'#3#144#1#0#7
|
||||
+'TButton'#7'Button1'#25'BorderSpacing.InnerBorder'#2#2#7'Caption'#6#4'Show'#7
|
||||
+'OnClick'#7#12'Button1Click'#8'TabOrder'#2#0#4'Left'#2'K'#6'Height'#2#25#3'T'
|
||||
+'op'#2'8'#5'Width'#2'K'#0#0#7'TButton'#7'Button2'#25'BorderSpacing.InnerBord'
|
||||
+'er'#2#2#7'Caption'#6#4'Hide'#7'OnClick'#7#12'Button2Click'#8'TabOrder'#2#1#4
|
||||
+'Left'#2'K'#6'Height'#2#25#3'Top'#2'_'#5'Width'#2'K'#0#0#0
|
||||
]);
|
101
components/trayicon/examples/frmtest.pas
Normal file
101
components/trayicon/examples/frmtest.pas
Normal file
@ -0,0 +1,101 @@
|
||||
unit frmtest;
|
||||
|
||||
{$ifdef fpc}
|
||||
{$mode delphi}{$H+}
|
||||
{$endif}
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
Classes, SysUtils,
|
||||
{$ifdef LCL}
|
||||
LResources,
|
||||
{$endif}
|
||||
Forms, Controls, Graphics, Dialogs, Buttons, StdCtrls;
|
||||
|
||||
type
|
||||
|
||||
{ TForm1 }
|
||||
|
||||
TForm1 = class(TForm)
|
||||
Button1: TButton;
|
||||
Button2: TButton;
|
||||
procedure Button1Click(Sender: TObject);
|
||||
procedure Button2Click(Sender: TObject);
|
||||
procedure FormCreate(Sender: TObject);
|
||||
procedure HandleClick(Sender: TObject);
|
||||
private
|
||||
{ private declarations }
|
||||
procedure DoPaint(Sender: TObject);
|
||||
public
|
||||
{ public declarations }
|
||||
end;
|
||||
|
||||
var
|
||||
Form1: TForm1;
|
||||
|
||||
{$ifndef LCL}
|
||||
{$R frmtest.dfm}
|
||||
{$endif}
|
||||
|
||||
implementation
|
||||
|
||||
uses
|
||||
{$ifdef win32}
|
||||
Windows,
|
||||
{$endif}
|
||||
TrayIcon;
|
||||
|
||||
{ TForm1 }
|
||||
|
||||
procedure TForm1.Button1Click(Sender: TObject);
|
||||
begin
|
||||
SystrayIcon.Show;
|
||||
end;
|
||||
|
||||
procedure TForm1.Button2Click(Sender: TObject);
|
||||
begin
|
||||
SystrayIcon.Hide;
|
||||
end;
|
||||
|
||||
procedure TForm1.FormCreate(Sender: TObject);
|
||||
const
|
||||
IDI_ICON1 = 101;
|
||||
IDI_ICON2 = 115;
|
||||
begin
|
||||
{$ifdef win32}
|
||||
SystrayIcon.Icon.Handle := LoadIcon(hInstance, MAKEINTRESOURCE(IDI_ICON1));
|
||||
{$else}
|
||||
SystrayIcon.Icon.LoadFromFile('icon.ico');
|
||||
{$endif}
|
||||
|
||||
SystrayIcon.ShowToolTip := True;
|
||||
SystrayIcon.ToolTip := 'my tool tip';
|
||||
|
||||
SystrayIcon.OnClick := HandleClick;
|
||||
SystrayIcon.OnPaint := DoPaint;
|
||||
end;
|
||||
|
||||
procedure TForm1.HandleClick(Sender: TObject);
|
||||
begin
|
||||
Application.MessageBox('Text', 'Caption', 0);
|
||||
end;
|
||||
|
||||
procedure TForm1.DoPaint(Sender: TObject);
|
||||
var
|
||||
MyImage: TPixmap;
|
||||
begin
|
||||
MyImage := TPixmap.Create;
|
||||
MyImage.LoadFromFile('icon.xpm');
|
||||
SystrayIcon.Canvas.Draw(0, 0, MyImage);
|
||||
MyImage.Free;
|
||||
WriteLn('Paint');
|
||||
end;
|
||||
|
||||
initialization
|
||||
{$ifdef LCL}
|
||||
{$I frmtest.lrs}
|
||||
{$endif}
|
||||
|
||||
end.
|
||||
|
BIN
components/trayicon/examples/icon.ico
Normal file
BIN
components/trayicon/examples/icon.ico
Normal file
Binary file not shown.
After Width: | Height: | Size: 478 B |
28
components/trayicon/examples/icon.xpm
Normal file
28
components/trayicon/examples/icon.xpm
Normal file
@ -0,0 +1,28 @@
|
||||
/* XPM */
|
||||
static char * icon_xpm[] = {
|
||||
"22 22 3 1",
|
||||
" c #000000",
|
||||
". c #D2C600",
|
||||
"+ c #A02FFF",
|
||||
" ................",
|
||||
" ................",
|
||||
" .................",
|
||||
" .................",
|
||||
" .................",
|
||||
" ..................",
|
||||
" .....++++++++....",
|
||||
" ..+++++++++++++++",
|
||||
" ..+++++++++++++++",
|
||||
" ..+++++++++++++++",
|
||||
" ..+++++++++++++++",
|
||||
" ....+++++++++++++++",
|
||||
" ....+++++++++++++++",
|
||||
" .....++++++++++++++",
|
||||
" .....++++++++++++++",
|
||||
" .....+++++++++++++",
|
||||
" .......++++++++++++",
|
||||
" .........+++++++++++",
|
||||
" .........+++++++++++",
|
||||
" .........+++++++++++",
|
||||
" .........+++++++++++",
|
||||
" .........+++++++++++"};
|
BIN
components/trayicon/examples/magnifier.or
Normal file
BIN
components/trayicon/examples/magnifier.or
Normal file
Binary file not shown.
BIN
components/trayicon/examples/magnifier.res
Normal file
BIN
components/trayicon/examples/magnifier.res
Normal file
Binary file not shown.
42
components/trayicon/examples/wndtray.cfg
Normal file
42
components/trayicon/examples/wndtray.cfg
Normal file
@ -0,0 +1,42 @@
|
||||
-$A8
|
||||
-$B-
|
||||
-$C+
|
||||
-$D+
|
||||
-$E-
|
||||
-$F-
|
||||
-$G+
|
||||
-$H+
|
||||
-$I+
|
||||
-$J-
|
||||
-$K-
|
||||
-$L+
|
||||
-$M-
|
||||
-$N+
|
||||
-$O+
|
||||
-$P+
|
||||
-$Q-
|
||||
-$R-
|
||||
-$S-
|
||||
-$T-
|
||||
-$U-
|
||||
-$V+
|
||||
-$W-
|
||||
-$X+
|
||||
-$YD
|
||||
-$Z1
|
||||
-cg
|
||||
-AWinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
|
||||
-H+
|
||||
-W+
|
||||
-M
|
||||
-$M16384,1048576
|
||||
-K$00400000
|
||||
-LE"c:\arquivos de programas\borland\delphi7\Projects\Bpl"
|
||||
-LN"c:\arquivos de programas\borland\delphi7\Projects\Bpl"
|
||||
-U"../"
|
||||
-O"../"
|
||||
-I"../"
|
||||
-R"../"
|
||||
-w-UNSAFE_TYPE
|
||||
-w-UNSAFE_CODE
|
||||
-w-UNSAFE_CAST
|
142
components/trayicon/examples/wndtray.dof
Normal file
142
components/trayicon/examples/wndtray.dof
Normal file
@ -0,0 +1,142 @@
|
||||
[FileVersion]
|
||||
Version=7.0
|
||||
[Compiler]
|
||||
A=8
|
||||
B=0
|
||||
C=1
|
||||
D=1
|
||||
E=0
|
||||
F=0
|
||||
G=1
|
||||
H=1
|
||||
I=1
|
||||
J=0
|
||||
K=0
|
||||
L=1
|
||||
M=0
|
||||
N=1
|
||||
O=1
|
||||
P=1
|
||||
Q=0
|
||||
R=0
|
||||
S=0
|
||||
T=0
|
||||
U=0
|
||||
V=1
|
||||
W=0
|
||||
X=1
|
||||
Y=1
|
||||
Z=1
|
||||
ShowHints=1
|
||||
ShowWarnings=1
|
||||
UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
|
||||
NamespacePrefix=
|
||||
SymbolDeprecated=1
|
||||
SymbolLibrary=1
|
||||
SymbolPlatform=1
|
||||
UnitLibrary=1
|
||||
UnitPlatform=1
|
||||
UnitDeprecated=1
|
||||
HResultCompat=1
|
||||
HidingMember=1
|
||||
HiddenVirtual=1
|
||||
Garbage=1
|
||||
BoundsError=1
|
||||
ZeroNilCompat=1
|
||||
StringConstTruncated=1
|
||||
ForLoopVarVarPar=1
|
||||
TypedConstVarPar=1
|
||||
AsgToTypedConst=1
|
||||
CaseLabelRange=1
|
||||
ForVariable=1
|
||||
ConstructingAbstract=1
|
||||
ComparisonFalse=1
|
||||
ComparisonTrue=1
|
||||
ComparingSignedUnsigned=1
|
||||
CombiningSignedUnsigned=1
|
||||
UnsupportedConstruct=1
|
||||
FileOpen=1
|
||||
FileOpenUnitSrc=1
|
||||
BadGlobalSymbol=1
|
||||
DuplicateConstructorDestructor=1
|
||||
InvalidDirective=1
|
||||
PackageNoLink=1
|
||||
PackageThreadVar=1
|
||||
ImplicitImport=1
|
||||
HPPEMITIgnored=1
|
||||
NoRetVal=1
|
||||
UseBeforeDef=1
|
||||
ForLoopVarUndef=1
|
||||
UnitNameMismatch=1
|
||||
NoCFGFileFound=1
|
||||
MessageDirective=1
|
||||
ImplicitVariants=1
|
||||
UnicodeToLocale=1
|
||||
LocaleToUnicode=1
|
||||
ImagebaseMultiple=1
|
||||
SuspiciousTypecast=1
|
||||
PrivatePropAccessor=1
|
||||
UnsafeType=0
|
||||
UnsafeCode=0
|
||||
UnsafeCast=0
|
||||
[Linker]
|
||||
MapFile=0
|
||||
OutputObjs=0
|
||||
ConsoleApp=1
|
||||
DebugInfo=0
|
||||
RemoteSymbols=0
|
||||
MinStackSize=16384
|
||||
MaxStackSize=1048576
|
||||
ImageBase=4194304
|
||||
ExeDescription=
|
||||
[Directories]
|
||||
OutputDir=
|
||||
UnitOutputDir=
|
||||
PackageDLLOutputDir=
|
||||
PackageDCPOutputDir=
|
||||
SearchPath=../
|
||||
Packages=vcl;rtl;vclx;indy;inet;xmlrtl;vclie;inetdbbde;inetdbxpress;dbrtl;dsnap;dsnapcon;vcldb;soaprtl;VclSmp;dbexpress;dbxcds;inetdb;bdertl;vcldbx;webdsnap;websnap;adortl;ibxpress;teeui;teedb;tee;dss;visualclx;visualdbclx;vclactnband;vclshlctrls;IntrawebDB_50_70;Intraweb_50_70;Rave50CLX;Rave50VCL;dclOfficeXP
|
||||
Conditionals=
|
||||
DebugSourceDirs=
|
||||
UsePackages=0
|
||||
[Parameters]
|
||||
RunParams=
|
||||
HostApplication=
|
||||
Launcher=
|
||||
UseLauncher=0
|
||||
DebugCWD=
|
||||
[Language]
|
||||
ActiveLang=
|
||||
ProjectLang=
|
||||
RootDir=
|
||||
[Version Info]
|
||||
IncludeVerInfo=0
|
||||
AutoIncBuild=0
|
||||
MajorVer=1
|
||||
MinorVer=0
|
||||
Release=0
|
||||
Build=0
|
||||
Debug=0
|
||||
PreRelease=0
|
||||
Special=0
|
||||
Private=0
|
||||
DLL=0
|
||||
Locale=1046
|
||||
CodePage=1252
|
||||
[Version Info Keys]
|
||||
CompanyName=
|
||||
FileDescription=
|
||||
FileVersion=1.0.0.0
|
||||
InternalName=
|
||||
LegalCopyright=
|
||||
LegalTrademarks=
|
||||
OriginalFilename=
|
||||
ProductName=
|
||||
ProductVersion=1.0.0.0
|
||||
Comments=
|
||||
[HistoryLists\hlUnitAliases]
|
||||
Count=1
|
||||
Item0=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
|
||||
[HistoryLists\hlSearchPath]
|
||||
Count=1
|
||||
Item0=../
|
22
components/trayicon/examples/wndtray.dpr
Normal file
22
components/trayicon/examples/wndtray.dpr
Normal file
@ -0,0 +1,22 @@
|
||||
program wndtray;
|
||||
|
||||
{$ifdef fpc}
|
||||
{$mode objfpc}{$H+}
|
||||
{$endif}
|
||||
|
||||
uses
|
||||
{$ifdef fpc}
|
||||
Interfaces,
|
||||
{$endif}
|
||||
Forms,
|
||||
frmtest in 'frmtest.pas', TrayIconLaz;
|
||||
|
||||
{ add your units here }
|
||||
|
||||
{$R magnifier.res}
|
||||
|
||||
begin
|
||||
Application.Initialize;
|
||||
Application.CreateForm(TForm1, Form1);
|
||||
Application.Run;
|
||||
end.
|
85
components/trayicon/examples/wndtray.lpi
Normal file
85
components/trayicon/examples/wndtray.lpi
Normal file
@ -0,0 +1,85 @@
|
||||
<?xml version="1.0"?>
|
||||
<CONFIG>
|
||||
<ProjectOptions>
|
||||
<PathDelim Value="/"/>
|
||||
<Version Value="5"/>
|
||||
<General>
|
||||
<Flags>
|
||||
<SaveClosedFiles Value="False"/>
|
||||
<SaveOnlyProjectUnits Value="True"/>
|
||||
</Flags>
|
||||
<MainUnit Value="0"/>
|
||||
<IconPath Value="./"/>
|
||||
<TargetFileExt Value=""/>
|
||||
<ActiveEditorIndexAtStart Value="1"/>
|
||||
</General>
|
||||
<LazDoc Paths=""/>
|
||||
<Units Count="2">
|
||||
<Unit0>
|
||||
<CursorPos X="40" Y="12"/>
|
||||
<EditorIndex Value="0"/>
|
||||
<Filename Value="wndtray.dpr"/>
|
||||
<IsPartOfProject Value="True"/>
|
||||
<Loaded Value="True"/>
|
||||
<TopLine Value="1"/>
|
||||
<UnitName Value="wndtray"/>
|
||||
<UsageCount Value="31"/>
|
||||
</Unit0>
|
||||
<Unit1>
|
||||
<CursorPos X="17" Y="19"/>
|
||||
<EditorIndex Value="1"/>
|
||||
<Filename Value="frmtest.pas"/>
|
||||
<ComponentName Value="Form1"/>
|
||||
<HasResources Value="True"/>
|
||||
<IsPartOfProject Value="True"/>
|
||||
<Loaded Value="True"/>
|
||||
<ResourceFilename Value="frmtest.lrs"/>
|
||||
<TopLine Value="1"/>
|
||||
<UnitName Value="frmtest"/>
|
||||
<UsageCount Value="31"/>
|
||||
</Unit1>
|
||||
</Units>
|
||||
<PublishOptions>
|
||||
<Version Value="2"/>
|
||||
<IgnoreBinaries Value="False"/>
|
||||
<IncludeFileFilter Value="*.(pas|pp|inc|lfm|lpr|lrs|lpi|lpk|sh|xml)"/>
|
||||
<ExcludeFileFilter Value="*.(bak|ppu|ppw|o|so);*~;backup"/>
|
||||
</PublishOptions>
|
||||
<RunParams>
|
||||
<local>
|
||||
<FormatVersion Value="1"/>
|
||||
<LaunchingApplication PathPlusParams="/usr/X11R6/bin/xterm -T 'Lazarus Run Output' -e $(LazarusDir)/tools/runwait.sh $(TargetCmdLine)"/>
|
||||
</local>
|
||||
</RunParams>
|
||||
<RequiredPackages Count="2">
|
||||
<Item1>
|
||||
<PackageName Value="TrayIconLaz"/>
|
||||
</Item1>
|
||||
<Item2>
|
||||
<PackageName Value="LCL"/>
|
||||
</Item2>
|
||||
</RequiredPackages>
|
||||
</ProjectOptions>
|
||||
<CompilerOptions>
|
||||
<Version Value="5"/>
|
||||
<SearchPaths>
|
||||
<SrcPath Value="$(LazarusDir)/lcl/;$(LazarusDir)/lcl/interfaces/$(LCLWidgetType)/;../"/>
|
||||
</SearchPaths>
|
||||
<CodeGeneration>
|
||||
<Generate Value="Faster"/>
|
||||
</CodeGeneration>
|
||||
<Other>
|
||||
<CompilerPath Value="$(CompPath)"/>
|
||||
</Other>
|
||||
</CompilerOptions>
|
||||
<Debugging>
|
||||
<Exceptions Count="2">
|
||||
<Item1>
|
||||
<Name Value="ECodetoolError"/>
|
||||
</Item1>
|
||||
<Item2>
|
||||
<Name Value="EFOpenError"/>
|
||||
</Item2>
|
||||
</Exceptions>
|
||||
</Debugging>
|
||||
</CONFIG>
|
186
components/trayicon/trayicon.pas
Normal file
186
components/trayicon/trayicon.pas
Normal file
@ -0,0 +1,186 @@
|
||||
{
|
||||
*****************************************************************************
|
||||
* *
|
||||
* See the file COPYING.modifiedLGPL, included in this distribution, *
|
||||
* for details about the copyright. *
|
||||
* *
|
||||
* 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. *
|
||||
* *
|
||||
*****************************************************************************
|
||||
}
|
||||
unit TrayIcon;
|
||||
|
||||
{$ifdef FPC}
|
||||
{$mode delphi}{$H+}
|
||||
{$endif}
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
Classes, SysUtils, WSTrayIcon, Menus, Graphics, Forms, Controls;
|
||||
|
||||
type
|
||||
{ TCustomTrayIcon }
|
||||
|
||||
TCustomTrayIcon = class(TComponent)
|
||||
private
|
||||
vPopUpMenu: TPopupMenu;
|
||||
vIcon: TIcon;
|
||||
vToolTip: string;
|
||||
vVisible, vShowToolTip: Boolean;
|
||||
vOnPaint, vOnClick, vOnDblClick: TNotifyEvent;
|
||||
vOnMouseDown, vOnMouseUp: TMouseEvent;
|
||||
vOnMouseMove: TMouseMoveEvent;
|
||||
function GetCanvas: TCanvas;
|
||||
procedure UpdateWS;
|
||||
procedure SetVisible(Value: Boolean);
|
||||
protected
|
||||
public
|
||||
constructor Create(AOwner: TComponent); override;
|
||||
destructor Destroy; override;
|
||||
function Hide: Boolean;
|
||||
function Show: Boolean;
|
||||
property Canvas: TCanvas read GetCanvas;
|
||||
property PopUpMenu: TPopupMenu read vPopUpMenu write vPopUpMenu;
|
||||
property Icon: TIcon read vIcon write vIcon;
|
||||
property ToolTip: string read vToolTip write vToolTip;
|
||||
property ShowToolTip: Boolean read vShowToolTip write vShowToolTip;
|
||||
property Visible: Boolean read vVisible write SetVisible;
|
||||
property OnClick: TNotifyEvent read vOnClick write vOnClick;
|
||||
property OnDblClick: TNotifyEvent read vOnDblClick write vOnDblClick;
|
||||
property OnMouseDown: TMouseEvent read vOnMouseDown write vOnMouseDown;
|
||||
property OnMouseUp: TMouseEvent read vOnMouseUp write vOnMouseUp;
|
||||
property OnMouseMove: TMouseMoveEvent read vOnMouseMove write vOnMouseMove;
|
||||
property OnPaint: TNotifyEvent read vOnPaint write vOnPaint;
|
||||
end;
|
||||
|
||||
{ TTrayIcon }
|
||||
|
||||
TTrayIcon = class(TCustomTrayIcon)
|
||||
published
|
||||
property PopUpMenu;
|
||||
property Icon;
|
||||
property ToolTip;
|
||||
property ShowToolTip;
|
||||
property Visible;
|
||||
property OnClick;
|
||||
property OnDblClick;
|
||||
property OnMouseDown;
|
||||
property OnMouseUp;
|
||||
property OnMouseMove;
|
||||
property OnPaint;
|
||||
end;
|
||||
|
||||
var
|
||||
SystrayIcon: TCustomTrayIcon;
|
||||
|
||||
procedure Register;
|
||||
|
||||
implementation
|
||||
|
||||
procedure Register;
|
||||
begin
|
||||
RegisterComponents('Misc',[TTrayIcon]);
|
||||
end;
|
||||
|
||||
{ TCustomTrayIcon }
|
||||
|
||||
{*******************************************************************
|
||||
* TCustomTrayIcon.Create ()
|
||||
*
|
||||
* DESCRIPTION: Creates a object from the TAplicativo class
|
||||
*
|
||||
* PARAMETERS: AOwner - The owner of the component (this may be nil)
|
||||
*
|
||||
* RETURNS: A pointer to the newly created object
|
||||
*
|
||||
*******************************************************************}
|
||||
constructor TCustomTrayIcon.Create(AOwner: TComponent);
|
||||
begin
|
||||
inherited Create(AOwner);
|
||||
|
||||
vIcon := TIcon.Create;
|
||||
end;
|
||||
|
||||
{*******************************************************************
|
||||
* TCustomTrayIcon.Destroy ()
|
||||
*
|
||||
* DESCRIPTION: Destroys a object derived from the TAplicativo class
|
||||
*
|
||||
* PARAMETERS: None
|
||||
*
|
||||
* RETURNS: Nothing
|
||||
*
|
||||
*******************************************************************}
|
||||
destructor TCustomTrayIcon.Destroy;
|
||||
begin
|
||||
vIcon.Free;
|
||||
|
||||
inherited Destroy;
|
||||
end;
|
||||
|
||||
{*******************************************************************
|
||||
* TGlass.Hide ()
|
||||
*
|
||||
* DESCRIPTION: Hides the Icon
|
||||
*
|
||||
* PARAMETERS: None
|
||||
*
|
||||
* RETURNS: Nothing
|
||||
*
|
||||
*******************************************************************}
|
||||
function TCustomTrayIcon.Hide: Boolean;
|
||||
begin
|
||||
UpdateWS;
|
||||
|
||||
Result := vwsTrayIcon.Hide;
|
||||
end;
|
||||
|
||||
function TCustomTrayIcon.Show: Boolean;
|
||||
begin
|
||||
UpdateWS;
|
||||
|
||||
Result := vwsTrayIcon.Show;
|
||||
end;
|
||||
|
||||
procedure TCustomTrayIcon.SetVisible(Value: Boolean);
|
||||
begin
|
||||
vVisible := Value;
|
||||
|
||||
if vVisible then Show
|
||||
else Hide;
|
||||
end;
|
||||
|
||||
procedure TCustomTrayIcon.UpdateWS;
|
||||
begin
|
||||
vwsTrayIcon.Icon.Assign(vIcon);
|
||||
vwsTrayIcon.PopUpMenu := vPopUpMenu;
|
||||
vwsTrayIcon.ShowToolTip := vShowToolTip;
|
||||
StrCopy(PChar(vwsTrayIcon.ToolTip), PChar(vToolTip));
|
||||
|
||||
// Update events
|
||||
vwsTrayIcon.OnClick := vOnClick;
|
||||
vwsTrayIcon.OnPaint := vOnPaint;
|
||||
vwsTrayIcon.OnDblClick := vOnDblClick;
|
||||
vwsTrayIcon.OnMouseDown := vOnMouseDown;
|
||||
vwsTrayIcon.OnMouseUp := vOnMouseUp;
|
||||
vwsTrayIcon.OnMouseMove := vOnMouseMove;
|
||||
end;
|
||||
|
||||
function TCustomTrayIcon.GetCanvas: TCanvas;
|
||||
begin
|
||||
Result := vwsTrayIcon.Canvas;
|
||||
end;
|
||||
|
||||
initialization
|
||||
|
||||
SystrayIcon := TTrayIcon.Create(nil);
|
||||
|
||||
finalization
|
||||
|
||||
SystrayIcon.Free;
|
||||
|
||||
end.
|
||||
|
62
components/trayicon/trayiconlaz.lpk
Normal file
62
components/trayicon/trayiconlaz.lpk
Normal file
@ -0,0 +1,62 @@
|
||||
<?xml version="1.0"?>
|
||||
<CONFIG>
|
||||
<Package Version="2">
|
||||
<Name Value="TrayIconLaz"/>
|
||||
<CompilerOptions>
|
||||
<Version Value="5"/>
|
||||
<SearchPaths>
|
||||
<UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)/"/>
|
||||
</SearchPaths>
|
||||
<CodeGeneration>
|
||||
<Generate Value="Faster"/>
|
||||
</CodeGeneration>
|
||||
<Other>
|
||||
<CompilerPath Value="$(CompPath)"/>
|
||||
</Other>
|
||||
</CompilerOptions>
|
||||
<Version Minor="2"/>
|
||||
<Files Count="5">
|
||||
<Item1>
|
||||
<Filename Value="wswin32trayicon.pas"/>
|
||||
<AddToUsesPkgSection Value="False"/>
|
||||
<UnitName Value="WSWin32TrayIcon"/>
|
||||
</Item1>
|
||||
<Item2>
|
||||
<Filename Value="trayicon.pas"/>
|
||||
<HasRegisterProc Value="True"/>
|
||||
<UnitName Value="TrayIcon"/>
|
||||
</Item2>
|
||||
<Item3>
|
||||
<Filename Value="wsgtk2trayicon.pas"/>
|
||||
<AddToUsesPkgSection Value="False"/>
|
||||
<UnitName Value="WSGtk2TrayIcon"/>
|
||||
</Item3>
|
||||
<Item4>
|
||||
<Filename Value="wsgtktrayicon.pas"/>
|
||||
<AddToUsesPkgSection Value="False"/>
|
||||
<UnitName Value="WSGtkTrayIcon"/>
|
||||
</Item4>
|
||||
<Item5>
|
||||
<Filename Value="wstrayicon.pas"/>
|
||||
<UnitName Value="WSTrayIcon"/>
|
||||
</Item5>
|
||||
</Files>
|
||||
<Type Value="RunAndDesignTime"/>
|
||||
<RequiredPkgs Count="2">
|
||||
<Item1>
|
||||
<PackageName Value="LCL"/>
|
||||
</Item1>
|
||||
<Item2>
|
||||
<PackageName Value="FCL"/>
|
||||
<MinVersion Major="1" Valid="True"/>
|
||||
</Item2>
|
||||
</RequiredPkgs>
|
||||
<UsageOptions>
|
||||
<UnitPath Value="$(PkgOutDir)/"/>
|
||||
</UsageOptions>
|
||||
<PublishOptions>
|
||||
<Version Value="2"/>
|
||||
<IgnoreBinaries Value="False"/>
|
||||
</PublishOptions>
|
||||
</Package>
|
||||
</CONFIG>
|
21
components/trayicon/trayiconlaz.pas
Normal file
21
components/trayicon/trayiconlaz.pas
Normal file
@ -0,0 +1,21 @@
|
||||
{ This file was automatically created by Lazarus. Do not edit!
|
||||
This source is only used to compile and install the package.
|
||||
}
|
||||
|
||||
unit TrayIconLaz;
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
TrayIcon, WSTrayIcon, LazarusPackageIntf;
|
||||
|
||||
implementation
|
||||
|
||||
procedure Register;
|
||||
begin
|
||||
RegisterUnit('TrayIcon', @TrayIcon.Register);
|
||||
end;
|
||||
|
||||
initialization
|
||||
RegisterPackage('TrayIconLaz', @Register);
|
||||
end.
|
38
components/trayicon/wsgtk2trayicon.pas
Normal file
38
components/trayicon/wsgtk2trayicon.pas
Normal file
@ -0,0 +1,38 @@
|
||||
{
|
||||
*****************************************************************************
|
||||
* *
|
||||
* See the file COPYING.modifiedLGPL, included in this distribution, *
|
||||
* for details about the copyright. *
|
||||
* *
|
||||
* 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. *
|
||||
* *
|
||||
*****************************************************************************
|
||||
}
|
||||
unit WSGtk2TrayIcon;
|
||||
|
||||
{$ifdef FPC}
|
||||
{$mode objfpc}{$H+}
|
||||
{$endif}
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
Classes, SysUtils;
|
||||
|
||||
type
|
||||
|
||||
{ TWidgetTrayIcon }
|
||||
|
||||
TWidgetTrayIcon = class(TObject)
|
||||
private
|
||||
protected
|
||||
public
|
||||
published
|
||||
end;
|
||||
|
||||
implementation
|
||||
|
||||
end.
|
||||
|
266
components/trayicon/wsgtktrayicon.pas
Normal file
266
components/trayicon/wsgtktrayicon.pas
Normal file
@ -0,0 +1,266 @@
|
||||
{
|
||||
*****************************************************************************
|
||||
* *
|
||||
* See the file COPYING.modifiedLGPL, included in this distribution, *
|
||||
* for details about the copyright. *
|
||||
* *
|
||||
* 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. *
|
||||
* *
|
||||
*****************************************************************************
|
||||
}
|
||||
unit WSGtkTrayIcon;
|
||||
|
||||
{$ifdef FPC}
|
||||
{$mode delphi}{$H+}
|
||||
{$endif}
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
Graphics, Classes, LCLProc, ExtCtrls, SysUtils, StdCtrls, Forms, Controls,
|
||||
Dialogs, Menus, x, xlib, xutil, gtk, gdk;
|
||||
|
||||
type
|
||||
|
||||
{ TWidgetTrayIcon }
|
||||
|
||||
TWidgetTrayIcon = class(TObject)
|
||||
private
|
||||
fDisplay: PDisplay;
|
||||
fWindow: TWindow;
|
||||
fScreen: PScreen;
|
||||
fScreenID: longint;
|
||||
fTrayParent: TWindow;
|
||||
fOwner: TComponent;
|
||||
GtkForm: TForm;
|
||||
fEmbedded: Boolean;
|
||||
fMsgCount: Integer;
|
||||
procedure SetEmbedded;
|
||||
function Send_Message(window: TWindow; msg: Integer;data1, data2,data3: Integer): boolean;
|
||||
procedure SetMinSize(AWidth, AHeight: Integer);
|
||||
procedure PaintForm(Sender: TObject);
|
||||
procedure CreateForm(id: Integer);
|
||||
procedure RemoveForm(id: Integer);
|
||||
function GetCanvas: TCanvas;
|
||||
protected
|
||||
public
|
||||
uID: Cardinal;
|
||||
Icon: TIcon;
|
||||
ShowIcon, ShowToolTip: Boolean;
|
||||
PopUpMenu: TPopUpMenu;
|
||||
ToolTip: string;
|
||||
OnPaint, OnClick, OnDblClick: TNotifyEvent;
|
||||
OnMouseDown, OnMouseUp: TMouseEvent;
|
||||
OnMouseMove: TMouseMoveEvent;
|
||||
constructor Create;
|
||||
destructor Destroy; override;
|
||||
function Hide: Boolean;
|
||||
function Show: Boolean;
|
||||
property Canvas: TCanvas read GetCanvas;
|
||||
published
|
||||
end;
|
||||
|
||||
const
|
||||
SYSTEM_TRAY_REQUEST_DOCK = 0;
|
||||
SYSTEM_TRAY_BEGIN_MESSAGE = 1;
|
||||
SYSTEM_TRAY_CANCEL_MESSAGE = 2;
|
||||
|
||||
implementation
|
||||
|
||||
// Temp ErrorHandler
|
||||
function TempX11ErrorHandler(Display:PDisplay; ErrorEv:PXErrorEvent):longint;cdecl;
|
||||
begin
|
||||
DebugLn('Error: ' + IntToStr(ErrorEv^.error_code));
|
||||
end;
|
||||
|
||||
|
||||
{ TWidgetTrayIcon }
|
||||
|
||||
{*******************************************************************
|
||||
* TWidgetTrayIcon.Create ()
|
||||
*
|
||||
* DESCRIPTION: Creates a object from the TWidgetTrayIcon class
|
||||
*
|
||||
* PARAMETERS: None
|
||||
*
|
||||
* RETURNS: A pointer to the newly created object
|
||||
*
|
||||
*******************************************************************}
|
||||
constructor TWidgetTrayIcon.Create;
|
||||
begin
|
||||
inherited Create;
|
||||
|
||||
Icon := TIcon.Create;
|
||||
|
||||
uID := 3;
|
||||
end;
|
||||
|
||||
{*******************************************************************
|
||||
* TWidgetTrayIcon.Destroy ()
|
||||
*
|
||||
* DESCRIPTION: Destroys a object derived from the TWidgetTrayIcon class
|
||||
*
|
||||
* PARAMETERS: None
|
||||
*
|
||||
* RETURNS: Nothing
|
||||
*
|
||||
*******************************************************************}
|
||||
destructor TWidgetTrayIcon.Destroy;
|
||||
begin
|
||||
Icon.Free;
|
||||
|
||||
inherited Destroy;
|
||||
end;
|
||||
|
||||
procedure TWidgetTrayIcon.SetEmbedded;
|
||||
var
|
||||
old_error: TXErrorHandler;
|
||||
buf: array [0..32] of char;
|
||||
selection_atom : TAtom;
|
||||
begin
|
||||
old_error := XSetErrorHandler(@TempX11ErrorHandler);
|
||||
Sleep(80);
|
||||
xsync(fdisplay,true);
|
||||
buf := PChar('_NET_SYSTEM_TRAY_S' + IntToStr(fScreenID));
|
||||
selection_atom := XInternAtom(fDisplay, buf, false);
|
||||
XGrabServer(fDisplay);
|
||||
fTrayParent := XGetSelectionOwner(fDisplay, selection_atom);
|
||||
if fTrayParent <> None then
|
||||
begin
|
||||
XSelectInput(fDisplay, fTrayParent, StructureNotifyMask);
|
||||
end;
|
||||
XUngrabServer(fDisplay);
|
||||
XFlush(fDisplay);
|
||||
|
||||
if fTrayParent <> None then
|
||||
Send_Message(fTrayParent, SYSTEM_TRAY_REQUEST_DOCK, fWindow, 0, 0);
|
||||
|
||||
XSetErrorHandler(old_error);
|
||||
end;
|
||||
|
||||
function TWidgetTrayIcon.Send_Message(window: TWindow; msg: Integer;data1, data2,data3: Integer): boolean;
|
||||
var
|
||||
Ev: TXEvent;
|
||||
fmt: Integer;
|
||||
begin
|
||||
ev.xclient._type := ClientMessage;
|
||||
ev.xclient.window := window;
|
||||
ev.xclient.message_type := XInternAtom (fDisplay, '_NET_SYSTEM_TRAY_OPCODE', False );
|
||||
ev.xclient.format := 32;
|
||||
ev.xclient.data.l[0] := CurrentTime;
|
||||
ev.xclient.data.l[1] := msg;
|
||||
ev.xclient.data.l[2] := data1;
|
||||
ev.xclient.data.l[3] := data2;
|
||||
ev.xclient.data.l[4] := data3;
|
||||
XSendEvent(fDisplay, fTrayParent, False, NoEventMask, @ev);
|
||||
XSync(fDisplay, False);
|
||||
Result := false;//(untrap_errors() = 0);
|
||||
end;
|
||||
|
||||
procedure TWidgetTrayIcon.CreateForm(id: Integer);
|
||||
begin
|
||||
GtkForm := TForm.Create(nil);
|
||||
fEmbedded := False;
|
||||
//fWindow := GDK_WINDOW_XWINDOW (Pointer(PGtkWidget(GtkForm.Handle)^.window));
|
||||
//SHowMessage(IntToStr(Integer(fWindow)));
|
||||
//GtkForm.Parent := TWinConTrol(fOwner);
|
||||
GtkForm.WindowState := wsMinimized;
|
||||
GtkForm.BorderStyle := bsNone; //without this gnome will make a 1 pixel wide window!
|
||||
//GtkForm.Canvas.AutoRedraw := True; //not working :(
|
||||
|
||||
// needed because some things aparently don't get fully initialized until
|
||||
// visible at least once! This is Gtk related NOT LCL related.
|
||||
GtkForm.Visible :=True;
|
||||
GtkForm.Width := 22;
|
||||
GtkForm.Height := 22;
|
||||
GtkForm.Visible := False;
|
||||
|
||||
Application.ProcessMessages;
|
||||
|
||||
fDisplay := GDK_WINDOW_XDISPLAY (Pointer(PGtkWidget(GtkForm.Handle)^.window));
|
||||
fWindow := GDK_WINDOW_XWINDOW (Pointer(PGtkWidget(GtkForm.Handle)^.window));
|
||||
fScreen := XDefaultScreenOfDisplay(fDisplay); // get the screen
|
||||
fScreenID := XScreenNumberOfScreen(fScreen); // and it's number
|
||||
end;
|
||||
|
||||
procedure TWidgetTrayIcon.RemoveForm(id: Integer);
|
||||
begin
|
||||
GtkForm.Free;
|
||||
end;
|
||||
|
||||
function TWidgetTrayIcon.GetCanvas: TCanvas;
|
||||
begin
|
||||
Result := GtkForm.Canvas;
|
||||
end;
|
||||
|
||||
{*******************************************************************
|
||||
* TWidgetTrayIcon.Hide ()
|
||||
*
|
||||
* DESCRIPTION: Hides the main tray icon of the program
|
||||
*
|
||||
* PARAMETERS: None
|
||||
*
|
||||
* RETURNS: True if sucessfull, otherwise False
|
||||
*
|
||||
*******************************************************************}
|
||||
function TWidgetTrayIcon.Hide: Boolean;
|
||||
begin
|
||||
RemoveForm(0);
|
||||
end;
|
||||
|
||||
{*******************************************************************
|
||||
* TWidgetTrayIcon.Show ()
|
||||
*
|
||||
* DESCRIPTION: Shows the main tray icon of the program
|
||||
*
|
||||
* PARAMETERS: None
|
||||
*
|
||||
* RETURNS: True if sucessfull, otherwise False
|
||||
*
|
||||
*******************************************************************}
|
||||
function TWidgetTrayIcon.Show: Boolean;
|
||||
begin
|
||||
CreateForm(0);
|
||||
|
||||
SetEmbedded;
|
||||
|
||||
GTK_WIDGET_SET_FLAGS(PGtkWidget(GtkForm.Handle),GTK_VISIBLE);
|
||||
GTK_WIDGET_SET_FLAGS(PGtkWidget(GtkForm.Handle),GTK_MAPPED);
|
||||
|
||||
GtkForm.Width := 22; //needed for gnome
|
||||
GtkForm.Height := 22;
|
||||
SetMinSize(Icon.Width, Icon.Height);
|
||||
|
||||
GtkForm.OnMouseDown := Self.OnMouseDown;
|
||||
GtkForm.OnMouseMove := Self.OnMouseMove;
|
||||
GtkForm.OnMouseUp := Self.OnMouseUp;
|
||||
GtkForm.OnClick := Self.OnClick;
|
||||
GtkForm.OnPaint := PaintForm;
|
||||
GtkForm.PopupMenu := Self.PopUpMenu;
|
||||
|
||||
fEmbedded := True;
|
||||
end;
|
||||
|
||||
procedure TWidgetTrayIcon.SetMinSize(AWidth, AHeight: Integer);
|
||||
var
|
||||
size_hints: TXSizeHints;
|
||||
begin
|
||||
size_hints.flags := PSize or PMinSize or PMaxSize;
|
||||
size_hints.min_width := AWidth;
|
||||
size_hints.max_width := 100;
|
||||
size_hints.min_height := AHeight;
|
||||
size_hints.max_height := 100;
|
||||
XSetStandardProperties(fDisplay, fWindow, nil, nil, None, nil, 0, @size_hints);
|
||||
end;
|
||||
|
||||
procedure TWidgetTrayIcon.PaintForm(Sender: TObject);
|
||||
begin
|
||||
if ShowIcon then GtkForm.Canvas.Draw(0, 0, Icon);
|
||||
|
||||
if Assigned(OnPaint) then OnPaint(Self);
|
||||
end;
|
||||
|
||||
end.
|
||||
|
72
components/trayicon/wstrayicon.pas
Normal file
72
components/trayicon/wstrayicon.pas
Normal file
@ -0,0 +1,72 @@
|
||||
{
|
||||
*****************************************************************************
|
||||
* *
|
||||
* See the file COPYING.modifiedLGPL, included in this distribution, *
|
||||
* for details about the copyright. *
|
||||
* *
|
||||
* 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. *
|
||||
* *
|
||||
*****************************************************************************
|
||||
}
|
||||
unit WSTrayIcon;
|
||||
|
||||
{$ifdef FPC}
|
||||
{$mode objfpc}{$H+}
|
||||
{$endif}
|
||||
|
||||
interface
|
||||
|
||||
{*******************************************************************
|
||||
* Compatibility code for Delphi for Windows.
|
||||
*******************************************************************}
|
||||
{$ifndef FPC}
|
||||
{$define Win32}
|
||||
{$endif}
|
||||
|
||||
|
||||
uses
|
||||
{$ifdef LCLWin32}
|
||||
wswin32trayicon,
|
||||
{$endif}
|
||||
{$ifdef LCLGtk}
|
||||
wsgtktrayicon,
|
||||
{$endif}
|
||||
{$ifdef LCLGtk2}
|
||||
wsgtk2trayicon,
|
||||
{$endif}
|
||||
{$ifdef LCLGnome}
|
||||
wsgtktrayicon,
|
||||
{$endif}
|
||||
Classes, SysUtils;
|
||||
|
||||
type
|
||||
|
||||
{ TWSTrayIcon }
|
||||
|
||||
TWSTrayIcon = class(TWidgetTrayIcon)
|
||||
private
|
||||
protected
|
||||
public
|
||||
published
|
||||
end;
|
||||
|
||||
var
|
||||
vwsTrayIcon: TWidgetTrayIcon;
|
||||
vwsTrayIconCreated: Boolean;
|
||||
|
||||
implementation
|
||||
|
||||
initialization
|
||||
|
||||
vwsTrayIconCreated := False;
|
||||
vwsTrayIcon := TWidgetTrayIcon.Create;
|
||||
vwsTrayIconCreated := True;
|
||||
|
||||
finalization
|
||||
|
||||
vwsTrayIcon.Free;
|
||||
|
||||
end.
|
||||
|
263
components/trayicon/wswin32trayicon.pas
Normal file
263
components/trayicon/wswin32trayicon.pas
Normal file
@ -0,0 +1,263 @@
|
||||
{
|
||||
*****************************************************************************
|
||||
* *
|
||||
* See the file COPYING.modifiedLGPL, included in this distribution, *
|
||||
* for details about the copyright. *
|
||||
* *
|
||||
* 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. *
|
||||
* *
|
||||
*****************************************************************************
|
||||
}
|
||||
unit WSWin32TrayIcon;
|
||||
|
||||
{$ifdef FPC}
|
||||
{$mode delphi}{$H+}
|
||||
{$endif}
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
Graphics, Classes, SysUtils, Menus, Forms, Controls;
|
||||
|
||||
type
|
||||
|
||||
{ TWidgetTrayIcon }
|
||||
|
||||
TWidgetTrayIcon = class(TObject)
|
||||
private
|
||||
WindowHandle: Cardinal;
|
||||
function GetCanvas: TCanvas;
|
||||
protected
|
||||
public
|
||||
uID: Cardinal;
|
||||
Icon: TIcon;
|
||||
ShowIcon, ShowToolTip: Boolean;
|
||||
PopUpMenu: TPopUpMenu;
|
||||
ToolTip: array [0..63] of AnsiChar;
|
||||
OnPaint, OnClick, OnDblClick: TNotifyEvent;
|
||||
OnMouseDown, OnMouseUp: TMouseEvent;
|
||||
OnMouseMove: TMouseMoveEvent;
|
||||
constructor Create;
|
||||
destructor Destroy; override;
|
||||
function Hide: Boolean;
|
||||
function Show: Boolean;
|
||||
property Canvas: TCanvas read GetCanvas;
|
||||
published
|
||||
end;
|
||||
|
||||
implementation
|
||||
|
||||
uses WSTrayIcon, Windows, ShellAPI, Messages;
|
||||
|
||||
const
|
||||
szClassName = 'TTrayIconClass';
|
||||
szAppTitle = 'apptytle';
|
||||
|
||||
{*******************************************************************
|
||||
* TrayWndProc ()
|
||||
*
|
||||
* DESCRIPTION: Window procedure that processes messages for the
|
||||
* systray icon
|
||||
*
|
||||
* PARAMETERS: Standard Mouse Messages have this parameters:
|
||||
*
|
||||
* fwKeys = wParam; // key flags
|
||||
* xPos = LOWORD(lParam); // horizontal position of cursor
|
||||
* yPos = HIWORD(lParam); // vertical position of cursor
|
||||
*
|
||||
* RETURNS: A pointer to the newly created object
|
||||
*
|
||||
*******************************************************************}
|
||||
function TrayWndProc(Handle: HWND; iMsg: UINT; WParam_: WPARAM; LParam_:LPARAM):LRESULT; stdcall;
|
||||
begin
|
||||
{*******************************************************************
|
||||
* The separate check on vwsTrayIconCreated is necessary because
|
||||
* vwsTrayIcon.uID may not have being initialized yet
|
||||
*******************************************************************}
|
||||
if vwsTrayIconCreated then
|
||||
if iMsg = WM_USER + vwsTrayIcon.uID then
|
||||
begin
|
||||
case LParam_ of
|
||||
WM_RBUTTONUP:
|
||||
begin
|
||||
if Assigned(vwsTrayIcon.OnMouseUp) then vwsTrayIcon.OnMouseUp(Application,
|
||||
mbRight, KeysToShiftState(WParam_), LOWORD(lParam_), HIWORD(lParam_));
|
||||
if Assigned(vwsTrayIcon.PopUpMenu) then
|
||||
vwsTrayIcon.PopUpMenu.Popup(LOWORD(lParam_), HIWORD(lParam_));
|
||||
end;
|
||||
WM_RBUTTONDOWN: if Assigned(vwsTrayIcon.OnMouseDown) then vwsTrayIcon.OnMouseDown(Application,
|
||||
mbRight, KeysToShiftState(WParam_), LOWORD(lParam_), HIWORD(lParam_));
|
||||
WM_RBUTTONDBLCLK: if Assigned(vwsTrayIcon.OnDblClick) then vwsTrayIcon.OnDblClick(Application);
|
||||
|
||||
WM_MBUTTONDOWN: if Assigned(vwsTrayIcon.OnMouseDown) then vwsTrayIcon.OnMouseDown(Application,
|
||||
mbMiddle, KeysToShiftState(WParam_), LOWORD(lParam_), HIWORD(lParam_));
|
||||
WM_MBUTTONUP: if Assigned(vwsTrayIcon.OnMouseUp) then vwsTrayIcon.OnMouseUp(Application,
|
||||
mbMiddle, KeysToShiftState(WParam_), LOWORD(lParam_), HIWORD(lParam_));
|
||||
|
||||
WM_LBUTTONUP:
|
||||
begin
|
||||
if Assigned(vwsTrayIcon.OnMouseUp) then vwsTrayIcon.OnMouseUp(Application,
|
||||
mbLeft, KeysToShiftState(WParam_), LOWORD(lParam_), HIWORD(lParam_));
|
||||
if Assigned(vwsTrayIcon.OnClick) then vwsTrayIcon.OnClick(Application);
|
||||
end;
|
||||
WM_LBUTTONDOWN: if Assigned(vwsTrayIcon.OnMouseDown) then vwsTrayIcon.OnMouseDown(Application,
|
||||
mbLeft, KeysToShiftState(WParam_), LOWORD(lParam_), HIWORD(lParam_));
|
||||
WM_LBUTTONDBLCLK: if Assigned(vwsTrayIcon.OnDblClick) then vwsTrayIcon.OnDblClick(Application);
|
||||
|
||||
WM_MOUSEMOVE: if Assigned(vwsTrayIcon.OnMouseMove) then
|
||||
vwsTrayIcon.OnMouseMove(Application, KeysToShiftState(WParam_), LOWORD(lParam_), HIWORD(lParam_));
|
||||
end;
|
||||
|
||||
Result := 1;
|
||||
Exit;
|
||||
end;
|
||||
|
||||
Result := DefWindowProc(Handle, iMsg, WParam_, LParam_);
|
||||
end;
|
||||
|
||||
{ TWidgetTrayIcon }
|
||||
|
||||
function TWidgetTrayIcon.GetCanvas: TCanvas;
|
||||
begin
|
||||
Result := Icon.Canvas;
|
||||
end;
|
||||
|
||||
{*******************************************************************
|
||||
* TWidgetTrayIcon.Create ()
|
||||
*
|
||||
* DESCRIPTION: Creates a object from the TWidgetTrayIcon class
|
||||
*
|
||||
* PARAMETERS: None
|
||||
*
|
||||
* RETURNS: A pointer to the newly created object
|
||||
*
|
||||
*******************************************************************}
|
||||
constructor TWidgetTrayIcon.Create;
|
||||
var
|
||||
Window: TWndClassEx;
|
||||
begin
|
||||
inherited Create;
|
||||
|
||||
Icon := TIcon.Create;
|
||||
|
||||
uID := 3;
|
||||
|
||||
ZeroMemory(@Window, SizeOf(TWndClassEx));
|
||||
Window.cbSize := SizeOf(TWndClassEx);
|
||||
Window.style := CS_OWNDC;
|
||||
Window.lpfnWndProc := @TrayWndProc;
|
||||
Window.cbClsExtra := 0;
|
||||
Window.cbWndExtra := 0;
|
||||
Window.hInstance := hInstance;
|
||||
// Window.hIcon := Icon.Picture.Icon.Handle;
|
||||
Window.hCursor := LoadCursor(0, IDC_ARROW);
|
||||
Window.hbrBackground := HBRUSH(GetStockObject(NULL_BRUSH));
|
||||
Window.lpszMenuName := nil;
|
||||
Window.lpszClassName := szClassName;
|
||||
// Window.hIconSm := hSmallIcon;
|
||||
|
||||
Windows.RegisterClassEx(Window);
|
||||
|
||||
WindowHandle := CreateWindowEx(
|
||||
0, //* Ensure that there will be no button in the bar */
|
||||
szClassName, //* Name of the registered class */
|
||||
szAppTitle, //* Title of the window */
|
||||
0, //* Style of the window */
|
||||
0, //* x-position (at beginning) */
|
||||
0, //* y-position (at beginning) */
|
||||
CW_USEDEFAULT, //* window width */
|
||||
CW_USEDEFAULT, //* window height */
|
||||
0, //* handle to parent or owner window */
|
||||
0, //* handle to menu */
|
||||
hInstance, //* handle to application instance */
|
||||
nil); //* pointer to window-creation data */
|
||||
end;
|
||||
|
||||
{*******************************************************************
|
||||
* TWidgetTrayIcon.Destroy ()
|
||||
*
|
||||
* DESCRIPTION: Destroys a object derived from the TWidgetTrayIcon class
|
||||
*
|
||||
* PARAMETERS: None
|
||||
*
|
||||
* RETURNS: Nothing
|
||||
*
|
||||
*******************************************************************}
|
||||
destructor TWidgetTrayIcon.Destroy;
|
||||
begin
|
||||
// Destroys the helper Windows
|
||||
Hide;
|
||||
PostMessage(WindowHandle, WM_CLOSE, 0, 0);
|
||||
PostMessage(WindowHandle, WM_DESTROY, 0, 0);
|
||||
|
||||
Application.ProcessMessages;
|
||||
|
||||
Icon.Free;
|
||||
|
||||
inherited Destroy;
|
||||
end;
|
||||
|
||||
{*******************************************************************
|
||||
* TWidgetTrayIcon.Hide ()
|
||||
*
|
||||
* DESCRIPTION: Hides the main tray icon of the program
|
||||
*
|
||||
* PARAMETERS: None
|
||||
*
|
||||
* RETURNS: True if sucessfull, otherwise False
|
||||
*
|
||||
*******************************************************************}
|
||||
function TWidgetTrayIcon.Hide: Boolean;
|
||||
var
|
||||
tnid: TNotifyIconData;
|
||||
begin
|
||||
// Fill TNotifyIconData
|
||||
tnid.cbSize := SizeOf(TNotifyIconData);
|
||||
{$IFNDEF FPC}
|
||||
tnid.Wnd := WindowHandle;
|
||||
{$ELSE}
|
||||
tnid.hWnd := WindowHandle;
|
||||
{$ENDIF}
|
||||
tnid.uID := uID;
|
||||
|
||||
// Remove the icon
|
||||
Result := Shell_NotifyIconA(NIM_DELETE, @tnid);
|
||||
end;
|
||||
|
||||
{*******************************************************************
|
||||
* TWidgetTrayIcon.Show ()
|
||||
*
|
||||
* DESCRIPTION: Shows the main tray icon of the program
|
||||
*
|
||||
* PARAMETERS: None
|
||||
*
|
||||
* RETURNS: True if sucessfull, otherwise False
|
||||
*
|
||||
*******************************************************************}
|
||||
function TWidgetTrayIcon.Show: Boolean;
|
||||
var
|
||||
tnid: TNotifyIconData;
|
||||
begin
|
||||
// Fill TNotifyIconData
|
||||
FillChar(tnid, SizeOf(tnid), 0);
|
||||
tnid.cbSize := SizeOf(TNotifyIconData);
|
||||
{$IFNDEF FPC}
|
||||
tnid.Wnd := WindowHandle;
|
||||
{$ELSE}
|
||||
tnid.hWnd := WindowHandle;
|
||||
{$ENDIF}
|
||||
tnid.uID := uID;
|
||||
tnid.uFlags := NIF_MESSAGE or NIF_ICON;
|
||||
if ShowToolTip then tnid.uFlags := tnid.uFlags or NIF_TIP;
|
||||
tnid.uCallbackMessage := WM_USER + uID;
|
||||
tnid.hIcon := Icon.Handle;
|
||||
Move(ToolTip, tnid.szTip, SizeOf(tnid.szTip));
|
||||
|
||||
// Create Taskbar icon
|
||||
Result := Shell_NotifyIconA(NIM_ADD, @tnid);
|
||||
end;
|
||||
|
||||
end.
|
||||
|
1
packager/globallinks/trayiconlaz-0.lpl
Normal file
1
packager/globallinks/trayiconlaz-0.lpl
Normal file
@ -0,0 +1 @@
|
||||
$(LazarusDir)/components/trayicon/trayiconlaz.lpk
|
Loading…
Reference in New Issue
Block a user