Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - Form nicht in Taskleiste anzeigen?


DiamondDog - So 25.05.08 12:08
Titel: Form nicht in Taskleiste anzeigen?
Hallo Leute,
also ich hab Folgendes Problem, ich bekomme es entweder nur hin das meine Form nicht mehr in der Taskleiste angezeigt wird oder das es keinen Rahmen mehr hat.
Ich würd es aber gerne so haben das es nicht in der Taskleiste angeziegt wird und der Rahmen auch weg ist. Das ganze ist für eine Popup die Form enthält ein Bild und nur das Bild soll angezeigt werden.

Ich hab es schon so probiert:

Delphi-Quelltext
1:
2:
3:
4:
procedure TForm2.FormShow(Sender: TObject);
begin
ShowWindow(Application.Handle, SW_HIDE);
end;
aber leider hat das nicht funktioniert.
Hab auch schon im Forum gesucht aber nichts gefunden was funktioniert hat.
Hoffe ihr könnt mir da weiter Helfen.

Mfg Dog


Moderiert von user profile iconNarses: Topic aus Sonstiges (Delphi) verschoben am So 25.05.2008 um 13:04


partybear23 - Mo 26.05.08 11:16

Try this:


Delphi-Quelltext
1:
2:
3:
4:
procedure TMainForm.FormShow(Sender: TObject);
begin
  showwindow(getwindow(self.handle, gw_owner), sw_hide);
end;



Gruß

Moderiert von user profile iconGausi: Code- durch Delphi-Tags ersetzt


DiamondDog - Mo 26.05.08 11:28

Das Funktioniert leider auch nicht.


partybear23 - Mo 26.05.08 11:44

Hm also wenn ich in meinem Hauptformular nen 2. Form mache und das dann z.b mit Showmodal anzeige gibts keinen Eintrag in der Taskleiste,
ist es das was du meinst?

Vllt kannste mal deinen Code schicken, bin irgendwie ein wenig schwer von Begriff ;)


Gruß


DiamondDog - Mo 26.05.08 11:56

Also es soll kein Eintrag in der Takleiste sein und auch der Rahmen von Form 2 soll weg so das nur das image zu sehn ist.


ZeitGeist87 - Mo 26.05.08 12:01

user profile iconDiamondDog hat folgendes geschrieben:
Also es soll kein Eintrag in der Takleiste sein und auch der Rahmen von Form 2 soll weg so das nur das image zu sehn ist.


Da hilft BorderStyle bsnone ;-)


DiamondDog - Mo 26.05.08 12:02

user profile iconZeitGeist87 hat folgendes geschrieben:
user profile iconDiamondDog hat folgendes geschrieben:
Also es soll kein Eintrag in der Takleiste sein und auch der Rahmen von Form 2 soll weg so das nur das image zu sehn ist.


Da hilft BorderStyle bsnone ;-)

Dann ist der Eintrag in der Taskleiste aber noch da.

Also die Form2 enthält ja ein Image und nur das soll zu sehn sein wenn Form 2 geladen wird.
Das heist kein Taskleisteneintrag und auch kein Rahmen von Form2.

Ps: Form2 = Popup


ZeitGeist87 - Mo 26.05.08 12:08

Nun ja..leider kann ich nicht compilieren, weil ich die Unit Nx<irgendwas> nicht habe ;-)


DiamondDog - Mo 26.05.08 12:11

Ach ja hatte ich vergessen das ist hier zu bekommen:
Zum Download [http://www.bergsoft.net/downloads.htm]
Zur Not posten was geändert werden muss dann Teste ich das schnell.


ZeitGeist87 - Mo 26.05.08 12:22

Zum Ausblenden in der Taskbar:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
procedure TForm1.FormCreate(Sender: TObject);
begin
  ShowWindow( Application.Handle, SW_HIDE );
  SetWindowLong( Application.Handle, GWL_EXSTYLE,
                 GetWindowLong(Application.Handle, GWL_EXSTYLE) or
                 WS_EX_TOOLWINDOW and not WS_EX_APPWINDOW);
  ShowWindow( Application.Handle, SW_SHOW );
end;



Zum nur Anzeigen des Bildes:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
procedure anzeigen;
begin;
 form.borderstyle:= bsnone;

 //Ich zentrier das Fenster jetzt
 form.left:= round( (screen.width/2) - (form.width/2) );
 form.top:= round( (screen.height/2) - (form.height/2) );
end;


LG
Stefan


DiamondDog - Mo 26.05.08 12:45

Ok hab das mal so gemacht:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
procedure TForm2.FormShow(Sender: TObject);
begin
Form2.Left:=Screen.WorkAreaWidth-Form2.Width+Screen.WorkAreaLeft;
Form2.Top:=Screen.WorkAreaHeight-Form2.Height+Screen.WorkAreaTop;

//keinen Rahmen
Form2.borderstyle:= bsnone;
end;

procedure TForm2.FormCreate(Sender: TObject);
begin
  ShowWindow( Application.Handle, SW_HIDE );
  SetWindowLong( Application.Handle, GWL_EXSTYLE,
                 GetWindowLong(Application.Handle, GWL_EXSTYLE) or
                 WS_EX_TOOLWINDOW and not WS_EX_APPWINDOW);
  ShowWindow( Application.Handle, SW_SHOW );
end;
Also wenn alles so ist dann ist der Rahmen zwar weg aber es ist immer noch in der Taskleiste.
Ps:
Geht ShowWindow( Application.Handle, SW_HIDE ); bei FormCreate überhaupt hab irgendwo gelesen das das nicht funktioniert.


partybear23 - Mo 26.05.08 12:48

Joa dann könnteste noch das hier probieren:


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
..
private
   { Private-Deklarationen }
   procedure CreateParams(var Params: TCreateParams); override; 
..

procedure TForm2.CreateParams(var params: TCreateParams);
begin
  inherited CreateParams(params);
  params.ExStyle := params.ExStyle or WS_EX_APPWINDOW;
  params.WndParent := GetDesktopwindow;
end;


DiamondDog - Mo 26.05.08 13:00

Ok hab die Procedure wieder entfernt:

Delphi-Quelltext
1:
procedure TForm2.FormCreate(Sender: TObject);                    

dafür die hier eingefügt:

Delphi-Quelltext
1:
procedure TForm2.CreateParams(var params: TCreateParams);                    

Das Hilft aber auch nicht der Rahmen ist weg aber es ist immer noch unten in der Taskleiste.
Hoffe das ihr noch ein Paar Tricks auf Lager habt.


ZeitGeist87 - Mo 26.05.08 13:46

Der Trick ist ganz einfach -.-

ist Form2 dein Hauptformular?
Nein, dann tu diesen Code einfach ins Hauptformular.


DiamondDog - Mo 26.05.08 14:14

Ok das hab ich Verstanden.
Habs so im Hauptformular eingefügt:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
procedure TfmBeeperOptions.FormCreate(Sender: TObject);
begin
[...]
begin
  ShowWindow( Application.Handle, SW_HIDE );
  SetWindowLong( Application.Handle, GWL_EXSTYLE,
                 GetWindowLong(Application.Handle, GWL_EXSTYLE) or
                 WS_EX_TOOLWINDOW and not WS_EX_APPWINDOW);
  ShowWindow( Application.Handle, SW_SHOW );
end;
end;
das funktioniert nicht nur ich bin mir auch nit sicher ob das so richtig ist weil ja nirgendwo was von Form2 steht.


ZeitGeist87 - Mo 26.05.08 14:15

welches betriebssystem?


DiamondDog - Mo 26.05.08 14:41

Win XP


DiamondDog - Di 27.05.08 21:58

Weiß den keiner mehr weiter, wie ich beides wegbekommen den Rahmen der Form und aus der Taskleiste?


ZeitGeist87 - Mi 28.05.08 09:48

bei mir funktioniert das problemlos -.-


DiamondDog - Mi 28.05.08 09:57

user profile iconZeitGeist87 hat folgendes geschrieben:
bei mir funktioniert das problemlos -.-

Ja wenn ich einfach mal zu testen ne Form1 erstelle gehts bei mir auch.
Nur wenn ich es in mein Programm einbaue dann geht das nicht :(
Die Hauptform ist ja die fmBeeperOptions da hab ich das bei FormCreate eingefügt nur tozdem sind beiden Formen noch in der Taskleiste zu sehn.


spaxxn - Mi 28.05.08 09:59

In der Projektdatei (.dpr)

Application.ShowMainForm := False // vorm Application.Run

Im FormActivate Ereignis kommt folgendes:

ShowWindow(Handle,SW_HIDE);


ZeitGeist87 - Mi 28.05.08 10:00

beide sind sichtbar??


DiamondDog - Mi 28.05.08 10:06

@ spaxxn
Wenn ich in dir (.dpr) das einfüge:
Application.ShowMainForm := False // vorm Application.Run
Dann kann ich es nicht erzeugen
Fehler:
[Fehler] beeper.dpr(27): Undefinierter Bezeichner: 'Application'
[Fehler] beeper.dpr(27): Operator oder Semikolon fehlt

@ ZeitGeist87
ja beide sind sichtbar.

Mal neben bei:
Ich hab ein Hauptprogramm wo drann ich nichts ändern kann oder so.
Das Prog von mir ist ein Plugin.
Form2 wird geladen wenn das Plugin vom auptprogramm geladen wird.
fmBeeperOptions wird erst geöffnet wenn ich im Hauptprogramm auf Einstellungen für das Plugin gehe.


spaxxn - Mi 28.05.08 10:08

ehm, bist du Dir sicher? Wenn du mit der VCL arbeitest, sollte Application vorhanden sein.


ZeitGeist87 - Mi 28.05.08 10:09

Dann liegt das mit dem Sichtbarsein im Hauptprogramm.

Man kann in das Programm einbauen, dass alle Fenster, die geöffnet werden in der Taskleiste angezeigt werden.
Wie man das jetzt unterdrückt, kann ich dir leider nicht sagen.

LG
Stefan


DiamondDog - Mi 28.05.08 10:17

@ spaxxn

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
library Beeper;

uses
  u_plugin_info,
  u_beeper in 'u_beeper.pas',
  u_plugin_msg in 'u_plugin_msg.pas',
  Options in 'Options.pas' {fmBeeperOptions},
  BeeperClasses in 'BeeperClasses.pas',
  melody in 'melody.pas',
  HotKey in 'HotKey.pas' {fmHotKey},
  NotifyImage in 'NotifyImage.pas',
  popup in 'popup.pas' {Form2};

{***********************************************************}
function CreateInfiumPLUGIN(PluginService: IQIPPluginService): IQIPPlugin; stdcall;
begin
  Result := TQipPlugin.Create(PluginService);
  Application.ShowMainForm := False // vorm Application.Run
end;

exports
  CreateInfiumPLUGIN name 'CreateInfiumPLUGIN';
end.


Delphi-Quelltext
1:
2:
3:
4:
procedure TForm2.FormActivate(Sender: TObject);
begin
ShowWindow(Handle,SW_HIDE);
end;
Fehler:
wie oben schon gespostet.

@Zeitgeist

Hab dir mal ne SDK angehängt die ist Extra von den Programierern des Hauptprogramms zum Testen und so vll Hilft das ja weiter.


ZeitGeist87 - Mi 28.05.08 10:19

user profile iconDiamondDog hat folgendes geschrieben:
@ spaxxn

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
library Beeper;

uses
  u_plugin_info,
  u_beeper in 'u_beeper.pas',
  u_plugin_msg in 'u_plugin_msg.pas',
  Options in 'Options.pas' {fmBeeperOptions},
  BeeperClasses in 'BeeperClasses.pas',
  melody in 'melody.pas',
  HotKey in 'HotKey.pas' {fmHotKey},
  NotifyImage in 'NotifyImage.pas',
  popup in 'popup.pas' {Form2};

{***********************************************************}
function CreateInfiumPLUGIN(PluginService: IQIPPluginService): IQIPPlugin; stdcall;
begin
  Result := TQipPlugin.Create(PluginService);
  Application.ShowMainForm := False // vorm Application.Run
end;

exports
  CreateInfiumPLUGIN name 'CreateInfiumPLUGIN';
end.


Delphi-Quelltext
1:
2:
3:
4:
procedure TForm2.FormActivate(Sender: TObject);
begin
ShowWindow(Handle,SW_HIDE);
end;
Fehler:
wie oben schon gespostet.

@Zeitgeist

Hab dir mal ne SDK angehängt die ist Extra von den Programierern des Hauptprogramms zum Testen und so vll Hilft das ja weiter.


1. Da es eine Library ist, gibt es keine Application ;-)
2. Wo? ^^


DiamondDog - Mi 28.05.08 10:21

2. Siehe oben :)


ZeitGeist87 - Mi 28.05.08 10:27

Die SDK bringt doch nix ;-)

Die ist für dich als Pluginentwickler gedacht.
Wenn die Programmierer des Hauptprogrammes es so wollten, dass die anderen Fenster in der Taskleiste angezeigt werden, musst dich dem beugen - egal, ob du es unterdrücken willst ;-)

Mir fällt keine Hilfestellung mehr diesbezüglich ein.
Tut mir leid.

LG
Stefan


DiamondDog - Mi 28.05.08 10:29

Hm.. ich weiß aufjedenfall das es bei andern Plugins
Funktioniert die haben auch eine Popup Funktion drin,
ich schau mal ob ich eine ohne Pw finde ansonsten wird das schwer.
Aber Trozdem schon mal Danke.


spaxxn - Mi 28.05.08 10:41

Entweder habe ich es überlesen oder ich weiss auch nicht, aber in einer Library funktioniert das so auch nicht.


DiamondDog - Mi 28.05.08 13:10

Hm.. Ok werd wohl damit leben und mal sehn was sich machen läst damit es gut aussieht. :)
Ich hätte da noch ne kleines problem:
Und zwar hab ich das Problem,
das wenn ich so meine Form2 aufrufe:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
procedure TQipPlugin.LoadPopup;
begin
Form2.Show;
Form2.Left:=popup_X;
Form2.Top:=popup_Y;
[...]
die Form von oben links anfängt.
Wie bekomme ich es hin das die Form von unten rechts anfängt?

Edit:
hab schon die Lösung gefunden:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
procedure TQipPlugin.LoadPopup;
begin
Form2.Show;
Form2.Left:=Screen.WorkAreaWidth-Form2.Width+Screen.WorkAreaLeft-popup_X;
Form2.Top:=Screen.WorkAreaHeight-Form2.Height+Screen.WorkAreaTop-popup_Y;
[..]