Eli tos jonkun aikaa sitten olit vastannut
sellaiseen lähettämääni viestiin , jossa kyse oli
oman ikonin lisääminen windowsin työkalupalkkiin
delphissä. Niimpä en saanut koodiasi toimimaa
oikein kunnolla kohdassa:
// PUBLIC osaan laitat sitten näin..
procedure IconMessage( var Msg : TMessage );
message WM_USER
100;
Eli delphissä public osahan näyttää alussa tältä:
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
Eli siinähän se on, niin minä lisäsin koodisi
siihen seuraavalla tavalla :
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
------------------------------------------------
procedure IconMessage( var Msg : TMessage );
message WM_USER
100;
------------------------------------------------
{ Public declarations }
end;
eli vaikka tolleen, miten se pitäisi lisätä ?
kyllä lisäsin sen vielä muutmalla eri tavalla ,
mutta ei mahtanut lähteä toimimaan..?
Eli tarkoititko tota lisäystä seuraavalla
esimerkillä minkä annoin ?
sellaiseen lähettämääni viestiin , jossa kyse oli
oman ikonin lisääminen windowsin työkalupalkkiin
delphissä. Niimpä en saanut koodiasi toimimaa
oikein kunnolla kohdassa:
// PUBLIC osaan laitat sitten näin..
procedure IconMessage( var Msg : TMessage );
message WM_USER
100;
Eli delphissä public osahan näyttää alussa tältä:
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
Eli siinähän se on, niin minä lisäsin koodisi
siihen seuraavalla tavalla :
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
------------------------------------------------
procedure IconMessage( var Msg : TMessage );
message WM_USER
100;
------------------------------------------------
{ Public declarations }
end;
eli vaikka tolleen, miten se pitäisi lisätä ?
kyllä lisäsin sen vielä muutmalla eri tavalla ,
mutta ei mahtanut lähteä toimimaan..?
Eli tarkoititko tota lisäystä seuraavalla
esimerkillä minkä annoin ?
Vastaukset 4
Vanhimmat
Näytti olevan ihan OK. Toi IconMessage Proseduuri
on vaan esimerkki voit jättää sen kokonaan pois,
ja/tai kirjoittaa halutessa oman. Olen kääntänyt
koodin Delphi2, 3 ja 5:lla ja pelaa kun sarana,
tosin 5:s versiossa sitä ei tarvi laittaa Public
tai private osaan, voi laittaa sinne missä
muutkin on. Laitoin koodin kokonaisuudessaan
mukaan...Tsekkaa ja kokeile uudestaan. Mutta
suoraan ei pidä kopioida, vaan FormCreate ja
FormClose proseduurit on luotava
Object Inspectorin /events välilehden kautta, ja
sitten vasta koodi niihin .
Siis tämä ohjelma asentaa ikonin TaskBar:iin
sinne kellon viereen, ja hiiren korvilla ikkuna
voidaan pienentään ja suurentaa.
//*********************************************
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics,
Controls, Forms,Dialogs, Shellapi;
type
TForm1 = class(TForm)
procedure FormClose(Sender: TObject; var
Action: TCloseAction);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
procedure IconMessage( var Msg:TMessage );
message WM_USER 100;
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
//*******************************************
procedure TForm1.FormCreate(Sender: TObject);
var
nid : TNotifyIconData;
begin
with nid do
begin
cbSize := SizeOf( TNotifyIconData );
Wnd := Form1.Handle;
uID := 1;
uFlags := NIF_ICON or NIF_MESSAGE or
NIF_TIP;
uCallbackMessage := WM_USER 100;
hIcon := Application.Icon.Handle;
szTip := 'Klikkaa hiirellä!';
end;
Shell_NotifyIcon( NIM_ADD, @nid );
end;
//********************************************
procedure TForm1.FormClose(Sender: TObject; var
Action: TCloseAction);
var
nid : TNotifyIconData;
begin
with nid do
begin
cbSize := SizeOf( TNotifyIconData );
Wnd := Form1.Handle;
uID := 1;
end;
Shell_NotifyIcon( NIM_DELETE, @nid );
end;
//***********************************************
procedure TForm1.IconMessage( var Msg:TMessage );
begin
if Msg.lParam = WM_RBUTTONUP then begin
ShowWindow(handle,SW_MINIMIZE)
end else if Msg.lParam = WM_LBUTTONUP then
begin
ShowWindow(handle,SW_RESTORE);
end;
end;
end.
Joo itselläni on siis Delphi 3, eli äskeisessä
viestissä totesit rivin toimivuuden siinä, mutta
en saanut sitä silti toimimaan , niinpä jätin sen
kokonaan pois. Sen jälkeen ohjelma toimi muuten
ihan ok kuvake tuli ja muuta , mutta saisiko sitä
mitenkään muutettua siten , että se kuvake olisi
siellä siten ,että ei tarvitsisi pitää koko ajan
ohjelmaa auki tossa päätyökalupalkin kohdassa..?
Eli jos suljen ohjelman työpöydältä, niinpä
kuvake alalaidasta häviää..?
että se IconMessage proseduuri täytyy saada
toimimaan,koska hiirellähän tätä ohjelmaa
käsitellään.. muuten menee aika vaikeeksi.
Esimerkiksi voit tehdä vaikka näin..
laitat formille napin jossta ikkuna piilotetaan,
mutta ei suljeta ja laitat Windowsin StartUp
kansioon tämän ohjelmasi ja kun Windows
käynnistyy niin se avautuu automaattisesti mutta
siitä ei näy muuta kun se ikoni... Eli sun pitää
laittaa myös käsky Form.visible:=False;--
muistaakseni formin OnPaint proseduuriin. Ja jos
teet Crtl/alt/del käskyn ohjelmasi näkyy
listassa... Lisäksi siinä IconMessage
proseduurissa on kohta ShowWindow
(handle,SW_MINIMIZE) , sen tilalle ShowWindow
(handle,SW_HIDE), niin tämä hävittää ikkunan
kokonaan, paitsi sen ikonin.Lisäksi ikkunan
oikeassa yläkulmassa olevat kolme painiketta
pitäisi poistaa.
Mutta tällä koko ohjelmalla ei tee mitään jos
niitä hiirikäskyjä ei pystytä sieppaamaan. Jos
siintä IconMessage proseduurista otetaan sisältö
pois ja laitat sinne vain tämän käskyn..kokeeksi -
MESSAGEBEEP(0); kun hiiri osuu ikoniin pitäisi
kuulua merkkiääni, mutta jos ei kuulu mitään niin
silloin viestit ei mene perille..??
No koitan vaikka noin...