AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

eigenen tray-bereich programmieren

Ein Thema von eisblock · begonnen am 29. Aug 2007 · letzter Beitrag vom 1. Sep 2007
Antwort Antwort
Seite 1 von 2  1 2      
eisblock

Registriert seit: 11. Dez 2005
Ort: Linderbach
127 Beiträge
 
Turbo Delphi für Win32
 
#1

eigenen tray-bereich programmieren

  Alt 29. Aug 2007, 13:00
Hallo Leute,

wollte mal fragen, ob ihr zufällig wisst, wie man eine eigene tray area programmieren kann.
Meine Frage ist, wie ich die Icons vom TrayNotifyWnd-Fenster auf mein Programm umleiten kann.
Vielleicht wisst ihr auch, wie man das TrayNotifyWnd-Fenster aus dem Shell_TrayWnd-Fenster abkapseln kann (das würde die neuprogrammierung des Traybereichs ersparen)

Ähm ja ich gebe zu das klingt jetzt etwas kryptisch, deshalb anbei ein Screenshot meines Desktops
hoffe, ihr versteht mich

Grüße,
jr
Miniaturansicht angehängter Grafiken
desktop_ohnetray_195.jpg  
  Mit Zitat antworten Zitat
s-off
(Gast)

n/a Beiträge
 
#2

Re: eigenen tray-bereich programmieren

  Alt 29. Aug 2007, 13:21
Zitat von eisblock:
Vielleicht wisst ihr auch, wie man das TrayNotifyWnd-Fenster aus dem Shell_TrayWnd-Fenster abkapseln kann (das würde die neuprogrammierung des Traybereichs ersparen)
Klar

Delphi-Quellcode:
Unit Unit1;

Interface

Uses
   Windows,
   Messages,
   SysUtils,
   Variants,
   Classes,
   Graphics,
   Controls,
   Forms,
   Dialogs,
   StdCtrls;

Type
   TForm1 = Class(TForm)
      Button1: TButton;
      Button2: TButton;
      Procedure Button1Click(Sender: TObject);
      Procedure Button2Click(Sender: TObject);
   private
      { Private-Deklarationen }
      OriginParent: Hwnd;
   public
      { Public-Deklarationen }
   End;

Var
   Form1: TForm1;

Implementation

{$R *.dfm}

Procedure TForm1.Button1Click(Sender: TObject);
Begin
   OriginParent := Windows.GetParent(xxx);
   Windows.SetParent(xxx, Self.Handle);
End;

Procedure TForm1.Button2Click(Sender: TObject);
Begin
   Windows.SetParent(xxx, OriginParent);
End;

End.
Edit:
xxx = Handle Deiner TNA

Edit2:
Hab mir gerade erst Deinen Anhang angesehen. Wenn Du
Windows.SetParent(xxx, Self.Handle); ersetzt durch
Windows.SetParent(xxx, 0); landet Deine TNA übrigens auf dem Desktop.

Edit3:
Was mir gerade noch einfällt:
Solltest Du die TNA auf Deine eigene Form packen, dann denke daran, beim Beenden Deiner Anwendung das Ganze wieder rückgängig zu machen (Button2Click) - ansonsten stehst Du ohne TNA da
Obwohl man die auch irgendwie wieder herstellen kann; weiss allerdings aktuell nicht, wie.

Edit4: Rechtschreibfehler in Edit3 beseitigt
  Mit Zitat antworten Zitat
eisblock

Registriert seit: 11. Dez 2005
Ort: Linderbach
127 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: eigenen tray-bereich programmieren

  Alt 29. Aug 2007, 14:31
hey danke erstmal für den guten Ansatz! Das ganze funktioniert auch mit der gesamten Taskleiste und sieht echt putzig aus =) aber wenn ich es nur auf die TNA anwende, verschwindet sie im Nirvana =(
  Mit Zitat antworten Zitat
s-off
(Gast)

n/a Beiträge
 
#4

Re: eigenen tray-bereich programmieren

  Alt 29. Aug 2007, 14:41
Hmm,

bei mir gehts. Die TNA landet in der linken oberen Ecke des Desktops. Sicher, dass Du das korrekte handle hast, also das der Klasse 'ToolbarWindow32' mit dem Titel 'Infobereich'?
  Mit Zitat antworten Zitat
eisblock

Registriert seit: 11. Dez 2005
Ort: Linderbach
127 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: eigenen tray-bereich programmieren

  Alt 29. Aug 2007, 14:44
ich benutze das handle kind:

elter := FindWindow('Shell_TrayWnd', nil);
kind := FindWindowEx(elter, 0, 'TrayNotifyWnd', nil);
  Mit Zitat antworten Zitat
s-off
(Gast)

n/a Beiträge
 
#6

Re: eigenen tray-bereich programmieren

  Alt 29. Aug 2007, 14:49
Tipp: besorge Dir WinSpy und hol Dir darüber erstmal manuell das korrekte Handle, um zu sehen, ob es grundlegend funktioniert. Evtl. ist in Deiner Handle-Suche noch etwas nicht ganz korrekt.

Edit: Du bist noch nicht tief genug -> s. Screenshot
Miniaturansicht angehängter Grafiken
snap00736_623.png  
  Mit Zitat antworten Zitat
eisblock

Registriert seit: 11. Dez 2005
Ort: Linderbach
127 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: eigenen tray-bereich programmieren

  Alt 29. Aug 2007, 15:00
Ich habe jetzt folgenden Code

Delphi-Quellcode:
Procedure TForm1.Button1Click(Sender: TObject);
Begin
   OriginParent := Windows.GetParent(d);
   Windows.SetParent(d, 0);
End;


Procedure TForm1.Button2Click(Sender: TObject);
Begin
Windows.SetParent(d, OriginParent);

End;

procedure TForm1.FormCreate(Sender: TObject);
begin
a := FindWindow('Shell_TrayWnd', nil);
b := FindWindowEx(a, 0, 'TrayNotifyWnd', nil);
c:=FindWindowEx(b, 0, 'Syspager', nil);
d:=FindWindowEx(c, 0, 'ToolbarWindow32', 'Infobereich');

end;
und irgendwie klappt es immernoch nicht, obwohl er ein gültiges Handle liefert. Hm vielleicht sollte ich mich nochmal genauer mit Handles beschäftigen... was ist denn dein Handle-Suchcode?
  Mit Zitat antworten Zitat
s-off
(Gast)

n/a Beiträge
 
#8

Re: eigenen tray-bereich programmieren

  Alt 29. Aug 2007, 15:13
Ich hab mir das Handle wie gesagt über WinSpy geholt, da ich keine Lust hatte, mich da durch zu hangeln.
Aber das hast Du ja jetzt für mich gemacht

Habe also Deine Routine zur Ermittlung des Handles übernommen und es funktioniert bei mir -> die TNA wird beim Klick auf Button1 auf meine Form verfrachtet.

Beispielprojekt anbei.
Angehängte Dateien
Dateityp: zip tna2form_188.zip (7,4 KB, 43x aufgerufen)
  Mit Zitat antworten Zitat
eisblock

Registriert seit: 11. Dez 2005
Ort: Linderbach
127 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: eigenen tray-bereich programmieren

  Alt 29. Aug 2007, 15:20
aaah es hat die ganze Zeit geklappt! Das Problem war nur: bei mir ist die Taskleiste oben. und deshalb hat sie auch wunderschön den TNA-Bereich überdeckt ^^ vielen Dank für deine Hilfe! =)
  Mit Zitat antworten Zitat
thabaker

Registriert seit: 1. Jul 2007
50 Beiträge
 
Turbo Delphi für Win32
 
#10

Re: eigenen tray-bereich programmieren

  Alt 29. Aug 2007, 20:43
Das funktioniert ja "nur" wenn auch die Taskleiste da ist, sprich der Explorer als Shell läuft, oder? Wenn ich jetzt hergehen würde und eine andere Shell benutze, wie erstelle ich dann "per Hand" eine TNA?
Muss ich dann diese Windows-Struktur selbst erstellen?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:03 Uhr.
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