Eigenschaften der Taskleiste editieren
-
Hallo Leute,
ich habe hier ein Problem, dass ich trotz intensiver Recherche im Netz und hier im Forum nicht lösen konnte.
Ich möchte ein Vollbildfenster haben (NEIN, bitte nicht abwiegeln, ich habe sämtliche Vorgehensweisen, die in diesem Forum beschrieben wurden bereits alle in den letzten 2 Tagen ausprobiert!).
Bei allen hier aufgezeigten Lösungswegen habe ich das Problem, dass die Taskleiste sichtbar bleibt.
Es funktioniert aber, wenn ich die Eigenschaften der Taskleiste von "Immer im Vordergrund" deaktiviere. Nun kann man ja nicht von einem User verlangen, dass er jedesmal, wenn mein Prog laufen soll erstmal seine Eigenschaften ändert.Ergo möchte ich dies aus dem Programm heraus machen. Bei Programmstart, die Eigenschaft deaktivieren und bei Programmende wieder setzen.
Leider konnte ich aber nirgends finden, wo und wie diese Eigenschaften geändert werden können.Es wäre super, wenn jemand dazu ne Lösung hätte, oder aber eine andere Lösung, wie ich mein Fenster über die Taskleiste bekomme.
Gruß N8Wolf
-
Das sollte Dir helfen:
http://www.bytesandmore.de/rad/cpp/snipp/sc03015.php
Bei mir funktioniert das, ich habe eine Anzeigetafel bei der ich beim Programmstart die Taskleiste ausblende und beim beenden wieder einblende.
Gruß myerscola
-
Hallo, vielen Dank für deine Antwort!
Das habe ich auch schon probiert, aber leider funktioniert das bei mir auch nicht!
Wenn ich die Taskleiste ausblende, dann das Fenster auf Position 0,0 bringe und dann auf Größe bringe, dann ist dort wo die Taskleiste war immer noch das Hintergrundbild zu sehen und mein Fenster nimmt diesen Bereich leider nicht mit ein!Gruß N8Wolf
-
Hast Du Vollbild so aufgerufen?
Normal maximieren hat bei mir auch den Efekt, den Du beschrieben hast.Form1->Top=0; Form1->Left=0; Form1->Height=Screen->Height; Form1->Width=Screen->Width;
-
Also ich habe es unter anderem über die Settings des Formulars probiert.
Ergebnis = Geht nicht!Dann habe ich folgendes probiert:
nBreite = GetSystemMetrics( SM_CXSCREEN ); nHoehe = GetSystemMetrics( SM_CYSCREEN ); frmChild_OS->Top=0; frmChild_OS->Left=0; frmChild_OS->Height=nHoehe; frmChild_OS->Width=nBreite;Ergebnis = Geht nicht!
Daraufhin habe ich das hier probiert:
SetWindowPos(frmChild_OS->Handle, HWND_TOPMOST, 0, 0, 1280, 1024, SWP_SHOWWINDOW);Ergebnis = Geht auch nicht!
Nur um mal 3 Beispiele meiner Versuchsreihe hier aufzuzeigen
!
-
Letzte Idee von mir:
BorderStyle = bsNone; WindowState = wsMaximized; FormStyle = fsStayOnTop; BringToFront();funktioniert bei mir auf 2 Rechnern
-
Tja...
wie ich schon erwähnte (Also ich habe es unter anderem über die Settings des Formulars probiert.) funktionierte das ganze bei mir leider nicht!Ein letzter Gedanke dazu....
Wann schaltest du die Taskleiste weg und wann setzt du die Properties?Ich habe es bis jetzt im Constructor des Fensters und im OnAcivate-Ereignis probiert, vielleicht liegt da ja mein Fehler?
-
Bei mir funktioniert folgendes im Konstruktor:
__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { int x, y; x = Screen->Width; y = Screen->Height; Top = 0; Left = 0; Width = x; Height = y; FormStyle = fsStayOnTop; BorderIcons = BorderIcons >> biMaximize; }Der Haken an der Sache dürfte sein, dass nur ein Formular fsStayOnTop sein darf, damit das funktioniert.
Außerdem: Programme, die meine Vorgaben nicht berücksichtigen, werden von mir umgehend wieder deinstalliert. Und ich will die Taskleiste sehen, auch wenn ich Programme maximiere. Dein Programm würde meine Einstellungen ignorieren...
-
Hi Joe_M.,
deinen Vorschlag hatte ich bereits getestet und das funktionierte leider nicht bei mir!
Zu deiner Aussage mit deinen Vorgaben.... STIMMT!
Allerdings schreibe ich gerade eine Desktopoberfläche. Deren Zweck ist es unter anderem die Benutzer nur auf die Ebene dieser Desktopoberfläche zu lassen. Deswegen muß die Taskleiste weg! Ist halt ne spezielle Anwendung für einen speziellen Bereich und dort ist es halt so gewünscht.
Gruß
N8Wolf
-
Es gibt einen Bug beim BCB, den man sich zugute machen kann, einfach
Position = poScreenCenter;zusätzlich setzen.
Wenn das Fenster nachträglich in der Größe nicht mehr verändert werden soll, dann noch die Eigenschaften
BorderIcons == BorderIcons >> biMinimize >> biMaximize; // also weder Min noch Max BorderStyle = bsSingle; WindowState = wsMaximized;setzen.
-
versuch mal folgendes im Konstruktor vom Form:
__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { DWORD dwExStyle = GetWindowLong(Application->Handle, GWL_EXSTYLE); dwExStyle |= WS_EX_TOOLWINDOW; SetWindowLong(Application->Handle, GWL_EXSTYLE, dwExStyle); WindowState = wsMaximized; BorderStyle = bsSingle; }
-
Hallo Th und Linnea,
vielen Dank für eure Beiträge.
Leider funktionieren auch eure beiden Vorschläge nicht.
Ich blende im Konstruktor die Taskleiste aus und wenn ich euren Code ausführe, dann ist dort wo die Taskleiste war immer noch der Desktop zu sehen.... Scheinbar reserviert Windows diesen Bereich explizit für die Taskleiste, ob die nun da ist oder nicht. Was ich dabei nicht begreife ist die Tatsache, dass jeder Bildschirmschoner die Taskleiste entfernen kann....Ich befürchte langsam ich muss wirklich an die Eigenschaften der Taskleiste gehen, konnte dazu aber wie gesagt bis jetzt nichts finden.
Gruß Georg
-
N8Wolf schrieb:
....
Allerdings schreibe ich gerade eine Desktopoberfläche. Deren Zweck ist es unter anderem die Benutzer nur auf die Ebene dieser Desktopoberfläche zu lassen. Deswegen muß die Taskleiste weg! Ist halt ne spezielle Anwendung für einen speziellen Bereich und dort ist es halt so gewünscht.
Gruß
N8WolfDa muss man nichts programmieren. Das lässt sich alles über Windows konfigurieren.
Seit neustem gibts es dafür von MS das "Shared Computer Toolkit", welches extra für den einfachen Einsatz von XP im sogenannten "Kiosk-Modus" gemacht ist.
Das Toolkit habe ich noch nicht getestet, ohne dieses sind einige Registry-Kniffe notwendig, vieles geht aber auch über die Rechteverwaltung.
-
Hallo Fincki,
ja ich weiss, dass ich an meinem Rechner nichts programmieren muss!
Was hier aber entwickelt wird ist eine Desktopoberfläche für DAUs.Es gibt 3 Möglichkeiten:
-
Du verkaufst jedem Kunden das "Shared Computer Toolkit" und ne ellenlange Anleitung wie alles einzurichten ist, und wie alle für diese User zu benutzenden Programme, welche von dir kommen, installiert und eingerichtet werden.
-
Du schreibst ne mordslange Anleitung wie das über die Registry und die Rechteverwaltung gemacht wird und wie alle für diese User zu benutzenden Programme, welche von dir kommen, installiert und eingerichtet werden.
-
Du gehst bei und entwickelst eine Oberfläche, die selbst ein DAU installieren kann, in der alles enthalten ist....
Ich denke ich hab da die elegantere Lösung getroffen!

Gruß N8Wolf
-
-
der Quellcode den ich gepostet habe funktioniert ohne das zusätzliche ausblenden der Taskleiste, versuchs einfach mal in einem leeren/neuen Projekt, eventuell trifft das auch auf die anderen Beiträge zu und nur das alles-aufeinmal-ins-Projekt-packen-ewas-gehen-könnte führt zu diesen eigenartigen Effekten
-
Linneaich hab das eben mal auch ausprobiert, und bei mir bleibt meine Taskleiste auch im Projekt. Es liegt also nicht an ihm

-
ok, ich hatte etwas vergessen bzw. nur im Objektinspektor eingestellt:
bei den BorderIcons müssen Minimize und Maximize raus, also__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { DWORD dwExStyle = GetWindowLong(Application->Handle, GWL_EXSTYLE); dwExStyle |= WS_EX_TOOLWINDOW; SetWindowLong(Application->Handle, GWL_EXSTYLE, dwExStyle); BorderIcons == BorderIcons >> biMinimize >> biMaximize; WindowState = wsMaximized; BorderStyle = bsSingle; }wobei dann auch der Quellcode von Th reichen sollte
-
Joe_Ms Vorschlag funktioniert bei mir (XP Pro). Beachte, dass dabei das Fenster nicht maximiert werden darf.
-
Sorry, aber egal wie ich es handhabe, es funktioniert mit deinem Weg bei mir definitiv nicht. Trotzdem natürlich vielen dank für deine Hilfe.
@Morris:
Danke für den Tip.... Das wars! Nachdem ich auf wsnormal gestellt habe funktionierte der Vorschlag von Joe_Ms tatsächlich.
Danke für eure Hilfestellung! Ohne euch ist man manchmal echt aufgeschmissen!