Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   TNA (https://www.delphipraxis.net/50975-tna.html)

Logh 3. Aug 2005 16:18


TNA
 
hi,

ich hab ein kleines Programm geschrieben, welches ir die id eines iButton bestimmt.
Das Ploblem ist, dass beim Autostart das Programm nicht richtig funktioniert bzw.
das Icon in der TNA nicht da ist.

Hier der Code:

-für die Regestry
Delphi-Quellcode:
 
Procedure TiButtonSecuritySystem.CreateAutorunEntry;
var
 Reg: TRegistry;
begin
 Reg := TRegistry.create;
 try
   Reg.RootKey := HKEY_LOCAL_MACHINE;
   Reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Run', True);
   Reg.WriteString(Application.Title,ParamStr(0));
 finally
   Reg.Free;
 end;
end;

-und die TNA
Delphi-Quellcode:
procedure TiButtonSecuritySystem.TaskBarAddIcon;
var
    tnid: TNotifyIconData;
    Owner: HWnd;
begin
  with tnid do
  begin
    cbSize := SizeOf(TNotifyIconData);
    Wnd := iButtonSecuritySystem.Handle;
    uID := 1;
    uFlags := NIF_MESSAGE or NIF_ICON or NIF_TIP;
    uCallbackMessage := WM_TASKBAREVENT;
    hIcon := Application.Icon.Handle;
  end;
  StrCopy(tnid.szTip, 'iSS');
  Shell_NotifyIcon(NIM_ADD, @tnid);
  Owner:=GetWindow(iButtonSecuritySystem.Handle,GW_OWNER);
  If Owner<>0 Then
    ShowWindow(Owner,SW_HIDE);
end;



procedure TiButtonSecuritySystem.TaskBarRemoveIcon;
var
    tnid: TNotifyIconData;
    Owner: HWnd;
begin
  tnid.cbSize := SizeOf(TNotifyIconData);
  tnid.Wnd := iButtonSecuritySystem.Handle;
  tnid.uID := 1;
  Shell_NotifyIcon(NIM_DELETE, @tnid);
  Owner:=GetWindow(iButtonSecuritySystem.Handle,GW_OWNER);
  If Owner<>0 Then Begin
    ShowWindow(Owner,SW_Show);
    ShowWindow(Owner,SW_Normal);
  End;
end;




procedure TiButtonSecuritySystem.WMTaskbarEvent(var Message: TMessage);
var
  Point: TPoint;
begin
  case Message.LParamLo of
     WM_LBUTTONDOWN: showmessage('ok');
     WM_RBUTTONDOWN: begin
                          SetForegroundWindow(Handle);
                          GetCursorPos(point);
                          popupmenu1.popup(point.x,point.y);
                     end;
  end;
end;


procedure TiButtonSecuritySystem.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
 TaskBarRemoveIcon;
end;
-und beim createn
Delphi-Quellcode:
 Icon.LoadFromFile('iss_normal.ICO');
 Application.Icon.LoadFromFile('iss_normal.ico');
Schonmal Danke

[edit=Admin]Codetags durch Delphitags ersetzt. Mfg, Daniel[/edit]

MathiasSimmack 3. Aug 2005 16:40

Re: TNA
 
:?

Zitat:

Zitat von Logh
-für die Regestry
Delphi-Quellcode:
Procedure TiButtonSecuritySystem.CreateAutorunEntry;
var
 Reg: TRegistry;
begin
 Reg := TRegistry.create;
 try
   Reg.RootKey := HKEY_LOCAL_MACHINE;
   Reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Run', True);
   Reg.WriteString(Application.Title,ParamStr(0));
 finally
   Reg.Free;
 end;
end;

Ist mir ein Rätsel, warum man Registry nicht richtig schreiben kann, wo es doch sogar der Klassenname von Borland korrekt vorgibt. TRegestry klappt ja nicht. Aber das ist nicht der Grund des Postings. Ich will eigentlich auf den Autostart in HKEY_LOCAL_MACHINE hinaus. Das mag unter Windows 95, 98 und ME funktionieren. Evtl. auch noch unter XP Home. Aber bei NT4, 2000 und XP Pro und anderen NT-basierten Systemen kollidierst du dabei u.U. sehr schnell mit den Benutzerrechten.

DP-Maintenance 4. Aug 2005 01:45

DP-Maintenance
 
Dieses Thema wurde von "alcaeus" von "Programmieren allgemein" nach "Windows API / MS.NET Framework API" verschoben.
Eindeutig eine Delphi-Frage, und damit schon in der falschen Sparte...

Olli 4. Aug 2005 10:20

Re: TNA
 
Is ja herzig. "Wenn ich Windows starte kommt bei mir kein Word." so ungefähr klingt deine "Fehlerbeschreibung" für mich.

a.) Hast du vielleicht mal dran gedacht Fehlerüberprüfungen einzubauen? Fehlercodes auszugeben?
b.) Was meinst du mit "Icon erscheint nicht"? Wird es nicht angezeigt? Wird nichtmal Platz auf der TNA für ein Icon geschaffen? Schlagen die Aufrufe fehl?

Also dein Code ist schön und gut, aber ich hoffe du denkst nicht, daß sich hier jeder potentielle Antworter deinen Code nimmt, ein eigenes Projekt aufmacht und dann austestet was denn nun genau der Fehler sei :-?

Logh 5. Aug 2005 09:51

Re: TNA
 
hi,

Zitat:

a.) Hast du vielleicht mal dran gedacht Fehlerüberprüfungen einzubauen? Fehlercodes auszugeben?
b.) Was meinst du mit "Icon erscheint nicht"? Wird es nicht angezeigt? Wird nichtmal Platz auf der TNA für ein Icon geschaffen? Schlagen die Aufrufe fehl?
a) Weis nicht wie?
b) Das Icon wird nicht angezeigt. Es wird auch kein platz daür gemacht.
Das Programm liest nicht die ID des iButtons - es tut nichts.
Wenn es ohne Autostart gestartet wird funzt es.

Ich habe niemandem gesagt er solle den Code kopieren und testen.


Das Problem ist wieschon erwähnt, dass das Programm nicht mit dem Autostart funzt.
Kann es sein das alle ico dateien irgendwo bestimt abgespeichert werden müssen?

x000x 5. Aug 2005 10:03

Re: TNA
 
Moin moin,
Zitat:

Zitat von Logh
Das Programm liest nicht die ID des iButtons - es tut nichts.
Wenn es ohne Autostart gestartet wird funzt es.

Ist es, nach einem Neustart des PCs, auch wirklich gestartet?

Olli 5. Aug 2005 12:14

Re: TNA
 
Zitat:

Zitat von Logh
Das Problem ist wieschon erwähnt, dass das Programm nicht mit dem Autostart funzt.
Kann es sein das alle ico dateien irgendwo bestimt abgespeichert werden müssen?

Welcher Autostart? Registry, Dateisystem oder wo sonst?

Wenn du die ICOs als Ressourcen in deine EXE eingebunden hast, sollte es wunderbar funktionieren.

Logh 5. Aug 2005 13:26

Re: TNA
 
hi,

folgende Fehlermeldung erscheint nach dem Starten des Rechners:

Can not open File blabla

Wie geht das it dem res an den Projekt anhängen?
Ich hab es mal ohne mein ico probiert - mit dem Delphi ico ging es!

Olli 5. Aug 2005 14:09

Re: TNA
 
Zitat:

Zitat von Logh
Wie geht das it dem res an den Projekt anhängen?
Ich hab es mal ohne mein ico probiert - mit dem Delphi ico ging es!

Aha :) ... jetzt sind wir dem Problem, scheint's, dicht auf der Spur.

Eine Ressourcendatei (.RC) erstellst du als Textdatei. Darin legst du für das Icon einen Identifier fest (das ist eine Zahl oder ein String). Außerdem gibst du an von welcher Datei es importiert werden soll (das Icon).

Hier die Syntax:
Code:
[color=red]MAINICON[/color]               ICON   [color=green]DISCARDABLE[/color]    [color=blue]"Assarbad.ico"[/color]
Rot: Der Identifier. Wie gesagt eine Zahl oder ein String
Grün: Attribut. Dieses ist optional.
Blau: Relativer oder absoluter Pfad zum Icon

Der niedrigste Identifier bestimmt das Icon der Anwendung im Explorer!

Das Script (*.RC) mit BRCC32.EXE deines Delphi oder RC.EXE aus dem PSDK kompilieren.

Danach das Resultat (*.RES) mit
Code:
{$R <Pfad zum Resultat>}
einbinden.

Logh 5. Aug 2005 21:25

Re: TNA
 
danke für die Hilfe.

Ich hab jetzt schon ne Lösung:

Ich hab einfach unter Projekt-Optionen das
gewünschte ico geladen.

trotzdem danke!


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:10 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz