Avatar billede unva Nybegynder
16. maj 2006 - 22:49 Der er 34 kommentarer og
1 løsning

SysTray.pas

Jeg har fundet tilføjet SysTray.pas til min program
men problemet er jeg ikke kan få det til at virke
hvad skal jeg skrive for at få den til at lægge sit ned i system bakken?
Avatar billede unva Nybegynder
16. maj 2006 - 22:54 #1
okay
hvordan installere jeg den?
Avatar billede snowball Novice
16. maj 2006 - 23:05 #2
Avatar billede unva Nybegynder
16. maj 2006 - 23:07 #3
Har fået den tilføjet og det hele, men det er det at lave iconet og få den til at minimere sig der ned til jeg ikke kan!
Avatar billede snowball Novice
16. maj 2006 - 23:11 #4
Jeg kender ikke lige til det du har fundet, men du kan prøve med CoolTrayIcon komponentet - det er ret nemt at bruge.

http://subsimple.com/delphi.asp
Avatar billede unva Nybegynder
16. maj 2006 - 23:17 #5
Okay

Kan bare ikke lige få den installeret !
Avatar billede snowball Novice
16. maj 2006 - 23:30 #6
Hvad sker der når du prøver?
Avatar billede unva Nybegynder
16. maj 2006 - 23:34 #7
jamen skal jeg kopier de filer over i mit projekt, eller tilføje dem gennem programmet?
Avatar billede snowball Novice
16. maj 2006 - 23:38 #8
CoolTrayIcon er et komponent som du installerer i Delphi. Derefter tilføjer du bare CoolTrayIcon til dit program som enhvert andet komponent (Edit, Label osv.). Der er ikke noget der skal kopieres over i dit prjekt.

Prøv og læs install.txt filen der følger med.
Avatar billede unva Nybegynder
16. maj 2006 - 23:48 #9
jamen hvis jeg gør sådan får jeg denne fejl
"Cannot Find resource file: C:\Documents and Settings\nigo01\Dokumenter\Delphi\Componenter\CoolTrayIcon\CoolTrayIcon_D5.res. Recreated"
når jeg prøver at installere
Avatar billede hrc Mester
17. maj 2006 - 08:21 #10
Man bhøver kun sende RES-filen/filer med hvis man selv har data gemt deri (ikoner, lydfiler eller lignende) som skal med i ... er det BPL-filen?

Den advarsel (det er ikke en fejl) betyder ikke meget. Måske er det faktisk en bekræftelse på, at installationen er forløbet korrekt. Udviklere undlader tit at sende RES-filerne med og så laver Delphi dem efter behov. Det kunne tyde på at komponenten er installeret.

I D2006 følger der i øvrigt en TTrayIcon med.
Avatar billede unva Nybegynder
17. maj 2006 - 10:55 #11
ja, men jeg bruger Delphi 7

Kan man få D2006 gratis, eller er det kun betalings version?
Avatar billede hrc Mester
17. maj 2006 - 13:13 #12
Den er klart bedre end de tidligere versioner, D2006'eren, også selvom D7 sandsynligvis er mere stabil. Den er pakket med mange "sjove" funktioner. At den kan ASP.NET, C#, C++ og Delphi under et, er ret imponerende.

En fuldt funktionsbar studenterversion koster 1000 og de penge er godt givet ud. Man får programmet på en skive og man kan hente opdateringe fra Borland (hvorfra der tankevækkende nok allerede er 2). Det er sikkert muligt at man kan hente en tidsbegrænset trial.

Tilbage til dit spørgsmål. Er du sikker på, at komponenten ikke er blevet installeret i din D7'er? Hvis den er, så er der ikke grund til at overveje D2006 - andet end at det er en god version (modsat D2005).
Avatar billede unva Nybegynder
17. maj 2006 - 18:40 #13
den kommer med fejl når jeg tilføjer den under uses, så den er nok ikke installeret
17. maj 2006 - 20:03 #14
Hej unva
Prøv at tilføje det her til dit project.
--------------------------------------------

Elementer der skal med for at køre programmet i Systray.
------------------------------------------------------------

program Project1;

uses
  Forms,
  Unit1 in 'Unit1.pas' {Form1};

{$R *.res}

begin
  Application.Initialize;
  Application.ShowMainForm := False;  // programmet vises ikke.
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.

----------------------------------------------------------

unit Unit1;

interface

uses
  ShellAPI

const
  WM_ICONTRAY = WM_USER + 1;  // Systray Ikon.

type
  TForm1 = class(TForm)
    ...
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure FormShow(Sender: TObject);
  private
    { Private declarations }
    TrayIconData: TNotifyIconData;
  public
    { Public declarations }
    procedure TrayMessage(var Msg: TMessage); message WM_ICONTRAY;
  end;

implementation

procedure TForm1.FormCreate(Sender: TObject);
begin
  with TrayIconData do
  begin
    cbSize := SizeOf(TrayIconData);
    Wnd := Handle;
    uID := 0;
    uFlags := NIF_MESSAGE + NIF_ICON + NIF_TIP;
    uCallbackMessage := WM_ICONTRAY;
    hIcon := Application.Icon.Handle;
    StrPCopy(szTip, Application.Title);
  end;
  Shell_NotifyIcon(NIM_ADD, @TrayIconData);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  Shell_NotifyIcon(NIM_DELETE, @TrayIconData);
end;

procedure TForm1.FormShow(Sender: TObject);
begin
  // Fjern program ikon fra process linien.
  ShowWindow(Application.Handle, SW_Hide);
end;

procedure TForm1.TrayMessage(var Msg: TMessage);
// Denne rutine er optional.
// Venstre click skjuler programmet.
// Højre click viser pregrammet.
begin 
  case Msg.lParam of
    WM_LBUTTONDOWN : Form1.Hide;
    WM_RBUTTONDOWN : Form1.Show;
  end;
end;
Avatar billede unva Nybegynder
17. maj 2006 - 20:05 #15
hmm virker ikke
17. maj 2006 - 20:19 #16
Det var da pudsigt.
Du får lige det hele af det lille program hvor jeg bruger det.

Først hvordan Project1.dpr ser ud.
---------------------------------------------

program Project1;

uses
  Forms,
  Unit1 in 'Unit1.pas' {Form1};

{$R *.res}

begin
  Application.Initialize;
  Application.ShowMainForm := False;  // programmet vises ikke.
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.
17. maj 2006 - 20:19 #17
Dernæst hvordan Unit1 ser ud.
Så må du selv sortere det fra du ikke skal bruge.
----------------------------------------------------------
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls, DateUtils, ShellAPI, TlHelp32, IniFiles;

const
  WM_ICONTRAY = WM_USER + 1;  // Systray Ikon.

type
  TForm1 = class(TForm)
    Timer1: TTimer;
    Timer2: TTimer;
    C1: TImage;
    C2: TImage;
    C3: TImage;
    C4: TImage;
    C5: TImage;
    C6: TImage;
    C7: TImage;
    C8: TImage;
    I1x1: TImage;
    I1x2: TImage;
    I1x3: TImage;
    I1x4: TImage;
    I1x5: TImage;
    I2x1: TImage;
    I2x2: TImage;
    I2x3: TImage;
    I2x4: TImage;
    I2x5: TImage;
    I3x1: TImage;
    I3x2: TImage;
    I3x3: TImage;
    I3x4: TImage;
    I3x5: TImage;
    I4x1: TImage;
    I4x2: TImage;
    I4x3: TImage;
    I4x4: TImage;
    I4x5: TImage;
    I5x1: TImage;
    I5x2: TImage;
    I5x3: TImage;
    I5x4: TImage;
    I5x5: TImage;
    I6x1: TImage;
    I6x2: TImage;
    I6x3: TImage;
    I6x4: TImage;
    I6x5: TImage;
    I7x1: TImage;
    I7x2: TImage;
    I7x3: TImage;
    I7x4: TImage;
    I7x5: TImage;
    I8x1: TImage;
    I8x2: TImage;
    I8x3: TImage;
    I8x4: TImage;
    I8x5: TImage;
    I9x1: TImage;
    I9x2: TImage;
    I9x3: TImage;
    I9x4: TImage;
    I9x5: TImage;
    I0x1: TImage;
    I0x2: TImage;
    I0x3: TImage;
    I0x4: TImage;
    I0x5: TImage;
    Iax1: TImage;
    Iax2: TImage;
    Iax3: TImage;
    Iax4: TImage;
    Iax5: TImage;
    Ibx1: TImage;
    Ibx2: TImage;
    Ibx3: TImage;
    Ibx4: TImage;
    Ibx5: TImage;
    Icx1: TImage;
    Icx2: TImage;
    Icx3: TImage;
    Icx4: TImage;
    Icx5: TImage;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    procedure FormActivate(Sender: TObject);
    procedure Timer1Timer(Sender: TObject); // Morphing.
    procedure Timer2Timer(Sender: TObject); // Sekund tæller.
    procedure FormKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure FormPaint(Sender: TObject);
  private
    { Private declarations }
    TrayIconData: TNotifyIconData;
    function AntalInstanser: Integer;
    procedure SkrivIni;
  public
    { Public declarations }
    procedure TrayMessage(var Msg: TMessage); message WM_ICONTRAY;
  end;

var
  Form1: TForm1;
  Loop: Integer;
  Tal: Integer;
  Tid1, Tid2: String;

implementation

{$R *.dfm}

procedure TForm1.FormActivate(Sender: TObject);
var
  MyIni: TIniFile;
begin
  MyIni := TIniFile.Create(ExtractFilePath(Application.ExeName) + 'AtomUr.ini');
  Form1.Top :=  StrToInt(MyIni.ReadString('Main', 'YPos', '0'));
  Form1.Left := StrToInt(MyIni.ReadString('Main', 'XPos', '0'));
  Form1.AlphaBlendValue := StrToInt(MyIni.ReadString('Main', 'AlphaBlend', '128'));
  MyIni.Free;
  Loop := 1;
  Tid1 := 'aa:aa:aa';
end;

procedure TForm1.SkrivIni;
var
  MyIni: TIniFile;
begin
  MyIni := TIniFile.Create(ExtractFilePath(Application.ExeName) + 'AtomUr.ini');
  MyIni.WriteString('Main', 'YPos', IntToStr(Form1.Top));
  MyIni.WriteString('Main', 'XPos', IntToStr(Form1.Left));
  MyIni.WriteString('Main', 'AlphaBlend', IntToStr(Form1.AlphaBlendValue));
  MyIni.Free;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
var
  C: Integer;
begin  // Morph cifre.
  for C:= 1 to 8 do
  begin
    if Tid1[C] <> Tid2[C] then  // Tid1 er nytid.
    begin                      // Tid2 er gammel tid.
      case C of
        1: begin
            if (Tid1[C] = '0') and (Tid2[C] = '2') then  // Skift fra 23 -> 00.
            TImage(FindComponent('C' + IntToStr(C))).Picture :=
              TImage(FindComponent('Iax' + IntToStr(Loop))).Picture
            else
              TImage(FindComponent('C' + IntToStr(C))).Picture :=
                TImage(FindComponent('I' + Tid1[C] + 'x' + IntToStr(Loop))).Picture;
          end;
        2: begin
            if (Tid1[C] = '0') and (Tid2[C] = '3') then  // Skift fra 23 -> 00.
            TImage(FindComponent('C' + IntToStr(C))).Picture :=
              TImage(FindComponent('Ibx' + IntToStr(Loop))).Picture
            else
              TImage(FindComponent('C' + IntToStr(C))).Picture :=
                TImage(FindComponent('I' + Tid1[C] + 'x' + IntToStr(Loop))).Picture;
          end;
        3: ;  // Kolon.
        4: begin
            if (Tid1[C] = '0') and (Tid2[C] = '5') then  // Skift fra 59 -> 00.
            TImage(FindComponent('C' + IntToStr(C))).Picture :=
              TImage(FindComponent('Icx' + IntToStr(Loop))).Picture
            else
              TImage(FindComponent('C' + IntToStr(C))).Picture :=
                TImage(FindComponent('I' + Tid1[C] + 'x' + IntToStr(Loop))).Picture;
          end;
        5: begin
            TImage(FindComponent('C' + IntToStr(C))).Picture :=
              TImage(FindComponent('I' + Tid1[C] + 'x' + IntToStr(Loop))).Picture;
          end;
        6: ;  // Kolon.
        7: begin
            if (Tid1[C] = '0') and (Tid2[C] = '5') then  // Skift fra 59 -> 00.
            TImage(FindComponent('C' + IntToStr(C))).Picture :=
              TImage(FindComponent('Icx' + IntToStr(Loop))).Picture
            else
              TImage(FindComponent('C' + IntToStr(C))).Picture :=
                TImage(FindComponent('I' + Tid1[C] + 'x' + IntToStr(Loop))).Picture;
          end;
        8: begin
            TImage(FindComponent('C' + IntToStr(C))).Picture :=
              TImage(FindComponent('I' + Tid1[C] + 'x' + IntToStr(Loop))).Picture;
          end;
      end;
    end;
  end;
  Loop := Loop + 1;
  if Loop > 5 then
    Timer1.Enabled := False;
end;

procedure TForm1.Timer2Timer(Sender: TObject);
var
  Dag: TDateTime;
  Uge: Integer;
  Txt: String;
begin  // Start morphing.
  Dag := Date;
  Uge := WeekOfTheYear(Dag);
  case DayOfWeek(Dag) of
    1 : Txt := 'Søndag';
    2 : Txt := 'Mandag';
    3 : Txt := 'Tirsdag';
    4 : Txt := 'Onsdag';
    5 : Txt := 'Torsdag';
    6 : Txt := 'Fredag';
    7 : Txt := 'Lørdag';
  end;
  Label2.Caption := 'Uge ' + IntToStr(Uge) + ' ' + Txt;
  Label1.Caption := 'Den ' + DateToStr(Dag);
  Tid2 := Tid1;
  Tid1 := TimeToStr(Time);
  if Tid1 <> Tid2 then
  begin
    Timer1.Enabled := True;
    Loop := 1;
  end;
end;

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  case Key of
    VK_F1      : Form1.ClientHeight := 95;
    VK_ADD      : if Form1.AlphaBlendValue < 255 then
                    Form1.AlphaBlendValue := Form1.AlphaBlendValue +1;
    VK_SUBTRACT : if Form1.AlphaBlendValue > 0 then
                    Form1.AlphaBlendValue := Form1.AlphaBlendValue -1;
  else
    Form1.ClientHeight := 60;
  end;
  SkrivIni;
end;

function TForm1.AntalInstanser: Integer;
// Denne rutine behøver 'TlHelp32' medtaget i USES.
var
  exeName: string;
  proc:    PROCESSENTRY32;
  hSnap:  HWND;
  Looper:  BOOL;
  Antal:  Integer;
  exe:    String;
begin
  exe := LowerCase(ExtractFileName(Application.ExeName));
  Antal := 0;  // Antal gange dette program er startet.
  proc.dwSize := SizeOf(Proc);
  hSnap := CreateToolhelp32Snapshot(TH32CS_SNAPALL,0);
  Looper := Process32First(hSnap,proc);
  while Integer(Looper) <> 0 do
  begin
    exeName := LowerCase(ExtractFileName(proc.szExeFile));
    if (exeName = copy(exe, 1, length(exeName))) then
      Antal := Antal + 1;    // Bemærk at w2k klipper derfor dette
    Looper := Process32Next(hSnap,proc);
  end;
  CloseHandle(hSnap);
  AntalInstanser := Antal;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  if AntalInstanser > 1 then // Det er ikke tilladt at starte mere end 1
  begin                      // instans af programmet på den samme pc.
    Application.Terminate;
  end;
  with TrayIconData do
  begin
    cbSize := SizeOf(TrayIconData);
    Wnd := Handle;
    uID := 0;
    uFlags := NIF_MESSAGE + NIF_ICON + NIF_TIP;
    uCallbackMessage := WM_ICONTRAY;
    hIcon := Application.Icon.Handle;
    StrPCopy(szTip, Application.Title);
  end;
  Shell_NotifyIcon(NIM_ADD, @TrayIconData);
  Form1.Show;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  Shell_NotifyIcon(NIM_DELETE, @TrayIconData);
end;

procedure TForm1.TrayMessage(var Msg: TMessage);
begin
  case Msg.lParam of
    WM_LBUTTONDOWN : Form1.Show;
    WM_RBUTTONDOWN : Form1.Hide;
  end;
end;

procedure TForm1.FormShow(Sender: TObject);
begin
  // Fjern program ikon fra process linien.
  ShowWindow(Application.Handle, SW_Hide);
end;

procedure TForm1.FormPaint(Sender: TObject);
begin
  SkrivIni;
end;

end.
Avatar billede snowball Novice
17. maj 2006 - 20:31 #18
Det ville være lidt lettere at få CoolTrayIcon til at virke (prøv evt. at læse installationsvejledningen grundigt igen), for så det så let som nedenstående:

TrayIcon.HideTaskbarIcon / TrayIcon.ShowTaskbarIcon
TrayIcon.HideTrayIcon / TrayIcon.ShowTrayIcon
Avatar billede unva Nybegynder
17. maj 2006 - 21:31 #19
Jamen snowball, jeg gør som der står i install.txt og den kommer med den der fejl!

Fatter det slet ikke!
Avatar billede unva Nybegynder
17. maj 2006 - 22:58 #20
hmm snowball, kan ikke engang få deres eksempler til at virke!
Avatar billede snowball Novice
17. maj 2006 - 23:38 #21
Så længe komponentet ikke er installeret korrekt, så vil demoerne naturligvis heller ikke virke :)

Men du må da få en anden fejl en den med .res filen, for det er jo som sagt ikke nogen decideret fejl. I hvert fald ikke en der gør at komponentet ikke vil virke!
Avatar billede hrc Mester
18. maj 2006 - 08:14 #22
Nu har jeg installeret den (i delphi7) og det gik lige efter bogen:

Hentede filen og pakkede den ud i c:\programmer\borland\delphi7\CoolTray
Via project fandt jeg CoolTrayIcon_D6plus.dpk som også virker til D7
Trykkede ok til at oprette den manglende res-fil
Først compilerede jeg og dernæst trykkede jeg på install
Sidst gik jeg ind i "Tools/Environment options/Library" og indsatte ovenstående sti i "Library Path"

Oprettede nyt projekt og smækkede komponenten på. En af de mindst problematiske komponentinstallationer jeg har lavet (Prøv med en Quick Report opdatering så skal dit hår nok blive gråt!)

Jeg håber der er noget i min beskrivelse som du har overset - for der er næsten ikke anden forklaring.

Ligeud ad landevejen
Avatar billede unva Nybegynder
18. maj 2006 - 08:31 #23
Jeg åbner delphi7 og vælger åben
Her finder jeg så ind til filen 'CoolTrayIcon_D6plus.dpk' i 'C:\Programmer\Borland\Delphi7\CoolTray' når jeg så vælger åben kommer denne fejl
"Cannot find resource file: C:\Programmer\Borland\Delpgi7\CoolTray\CoolTray\CollTrayIcon_D6plus.res.", her trykker jeg så 'OK'

Jeg får så mulighed for at compile, og derefter trykker jeg på 'Install', og så kommer denne fejl "Cannot load package 'CoolTrayIcon_D6plus.' It contains unit 'RegisterTrayIcons,'which is also contained in package 'CoolTrayIcon_D5'"
Avatar billede hrc Mester
18. maj 2006 - 10:06 #24
Det forklarer jo en del. Du har taget den dpk-fil til Delphi 5. Nu skal den afinstalleres før du kan komme videre. I Delphi vælger du File/Close all. Dernæst Project/Options. Under packages finder du komponenten (hvis den er der - jeg vil ikke ødelægge min D7'er for at teste det :-)) og vælger remove. Så tror jeg den er væk.

Desuden: Luk D7 og søg efter CoolTrayIcon_D5plus.bpl og CoolTrayIcon_D5plus.dcp. Hos mig er stieen "C:\Programmer\Borland\Delphi7\Projects\Bpl". Slet dem og start Delphi igen. Nu prøver den (måske) at hente pakken, kan ikke finde den og spørger om den skal søge efter pakken for eftertiden. Svar nej.

Prøv nu at installere den &%!"#¤#&/ pakke.
Avatar billede unva Nybegynder
18. maj 2006 - 17:33 #25
Jamen er det da ikke CoolTrayIcon_D6plus.dpk der skal installeres?
Avatar billede unva Nybegynder
18. maj 2006 - 17:34 #26
under C:\Programmer\Borland\Delphi7\Projects\Bpl ligger der kun CoolTrayIcon_D6plus.bpl og CoolTrayIcon_D6plus.dcp
Avatar billede unva Nybegynder
18. maj 2006 - 21:57 #27
Fandt en menner måde selv
brugte bare en indbyggede funtion

fandt det her:
http://delphi.about.com/od/kbwinshell/l/aa121801a.htm
18. maj 2006 - 22:06 #28
Hej unva

Tillykke med din løsning.
Det ligner jo til forveksling det jeg gav dig.
Avatar billede unva Nybegynder
18. maj 2006 - 22:08 #29
Ja kan jeg faktisk godt se nu når jeg har fundet ud af hvordan det virker!

Smid lige et svar så skal du få pointne!
18. maj 2006 - 22:14 #30
Nej, behold du dine point, du fandt det jo selv, på samme sted som jeg fandt det.

Og godt jagt fremover :-)
Avatar billede unva Nybegynder
18. maj 2006 - 22:19 #31
Mange tak, men syntes nu stadig du skal havde dem!

Jo ikke din skyld jeg er en spade der ikke kunne se hvad din koder gjorde, og slet ikke med alt den forklaring du har med på dansk!

Men jo dit valg, men vil med glæde give dig de point
Avatar billede hrc Mester
18. maj 2006 - 23:26 #32
Unva: Det er D6'eren der skal installeres. I dit indlæg kl. 8.31.44 beskrev du en fejlmeddelelse der betyder, at du har installeret den forkerte version - og så virker det jo ikke.
Jeg savner ikke pointsene, men er nærmest lidt irriteret over, at du ikke retter fejlen men vælger en anden løsning, nu hvor du får det serveret.
Avatar billede unva Nybegynder
18. maj 2006 - 23:29 #33
jeg slettede hele min Delphi og installeret den igen for at installere D6'eren efter den måde du beskrev, og alligevel virkede det ikke

prøvede alt du skrev!
Avatar billede unva Nybegynder
19. maj 2006 - 00:41 #34
men i øvrigt er der så nogle der ved hvordan jeg så kan indsætte balloon til mit icon?
Avatar billede unva Nybegynder
05. oktober 2006 - 23:11 #35
Fik det aldrig til at virke!
lukket
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester



IT-JOB

Udviklings- og Forenklingsstyrelsen

Data engineer til cloud-baseret dataplatform

Udviklings- og Forenklingsstyrelsen

Underdirektør til gældsområdet

Udviklings- og Forenklingsstyrelsen

Engageret platformsejer med flair for it-drift