Minimer til systray

Tags:    delphi

User
Bruger #535 @ 10.06.02 20:48
Jeg har lide to spørgsmål. De gir 20 point hver.


1. Hvordan gør man sådan at når man trykker på en knap, så minimere den programmer til systrayen.

2. Hvordan gør man sådan at programmet starter op når windows starter?

Mvh
Jesper



4 svar postet i denne tråd vises herunder
1 indlæg har modtaget i alt 1 karma
Sorter efter stemmer Sorter efter dato
Jeg har lide to spørgsmål. De gir 20 point hver.


1. Hvordan gør man sådan at når man trykker på en knap, så minimere den programmer til systrayen.

2. Hvordan gør man sådan at programmet starter op når windows starter?

Mvh
Jesper


1. Med et systray komponent... søg på google.. og hvis du ikke kan finde noget, så kontakt mig (neuroman) på udviklerchatten

2. Den der med start menuen er ikke smart... noget lettere ville være at med følgende kode indsætte en streng i registrerings databasen:

-1. tilføj Registry til din uses liste

-2. Tilføj denne kode evt. til en knap:

var
Registry: TRegistry;
begin
Registry:=TRegistry.Create;
Registry.RootKey:= HKEY_CURRENT_USER;
If Registry.OpenKey('\\Software\\Microsoft\\Windows\\CurrentVersion\\Run',True) then
begin
Registry.WriteString('autostart', (ParamStr(0)));
Registry.Free;
end;




2. Hvordan gør man sådan at programmet starter op når windows starter?


Jeg kan svare på det ene spørgsmål. Du skal sørge for at installationsprogrammet, når den installerer programmet, pakker en fil ud i startmenuens startmappe.

På den måde, vil programmet automatisk blive åbnet, når Windows starter.

Andreas Andersen
www.friserverplads.dk/flitsbue/




User
Bruger #535 @ 11.06.02 13:08
Det skal gerne være sådan at man kan trykke på en knap inde i programmet, og så starter programmet næste gang windows startes, og så skal der være en knap til at fjerne det igen.



Jeg har lide to spørgsmål. De gir 20 point hver.


1. Hvordan gør man sådan at når man trykker på en knap, så minimere den programmer til systrayen.

2. Hvordan gør man sådan at programmet starter op når windows starter?

Mvh
Jesper


vedr. pkt 1:

A) tilføj ShellAPI i din uses klausul.


B) Opret en selv defineret windows message identifikation , altså eksempelvis:

const WM_TRAYMessage = WM_USER + 1;


C) Tilføj den tilhørende message handle procedure, altså eksempelvis:

procedure TrayMessage(var message: TMessage); message WM_TRAYMESSAGE;

D) Opret en variabel af typen TNotifyIconData, her eksempelvis tray: TNotifyIcondata som variabel i klassen.

E) i formens OnCreate procedure initialiseres den variabel som blev oprettet under pkt D:

with Tray do
begin
cbSize := SizeOf(Tray);
Wnd := Handle;
uID := 0;
uFlags := NIF_MESSAGE + NIF_ICON + NIF_TIP;
uCallbackMessage:= WM_TRAYMessage;
hIcon := Application.Icon.Handle;
szTip := 'hint message';
end;
Shell_NotifyIcon(NIM_ADD, @Tray);


I den tilhørende destroy metode skal tilføje følgende kald:

Shell_NotifyIcon(NIM_DELETE, @Tray);

F) proceduren fra punkt C kunne se således ud:

procedure TMain.TrayMessage(var message: TMessage);
var
p: TPoint;
begin
case Message.LParam of
WM_RBUTTONDOWN:
begin
SetForegroundWindow(Handle);
GetCursorPos(P);
PopupMenu1.Popup(P.X, P.y);
PostMessage(Handle, WM_NULL, 0,0);
end;
end;
end;

Popup menuen kunne indeholde to menupunkter Vis og skjul. I den tilførende vis metode kaldes Show(), hvilket selvsagt medfører at dit skærmbillede vises, mens omvendt Skjul kalder hide();.

G) i projektfilen skrives eksempelvis:

Application.Initialize;
Application.ShowMainForm := false;
Application.CreateForm(TMain, Main);
Application.Run;


Herefter compiles- og køres programmet. Klik på ikonet i systray (hvilket gerne skulle vises din popup menu) og vælge vis. Dit skærmbilledet skulle herefter gerne dukke frem.


m.v.h.

Jørgen



t