Fenster optimal öffnen egal, wo die Taskleiste ist .

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Eckhard.S
Beiträge: 136
Registriert: 22.07.2006 17:19
Wohnort: Meschede/Sauerland

Fenster optimal öffnen egal, wo die Taskleiste ist .

Beitrag von Eckhard.S »

Habe zum Thema Taskleiste gestöbert aber noch nicht alles vollständig herausgefunden:

Aufgabe: Egal wo die Taskleiste ist und wie groß sie ist, soll ein Fenster optimal auf das ganze Desktop geöffnet werden.
Bei Taskleiste unten klappts bisher, bei Taskleiste oben oder an der Seite noch nicht.

Wer hat einen Tipp, wie man den Ort der Taskleiste herausbekommt und die Breite, wenn sie auf der Seite ist?

Code: Alles auswählen

;PB 4.0 Final


fensterrand = 3           ; jedes Fenster hat links, rechts oben unten je 3 Pixel Umrandung 
titelleistenhoehe = 19
titelleiste$ = "Fenster optimal öffnen"

bildschirmbreite = GetSystemMetrics_(#SM_CXSCREEN)  ; holt die Breite des Bildschirms
bildschirmhoehe  = GetSystemMetrics_(#SM_CYSCREEN)   ; holt die Höhe des Bildschirms

SystemParametersInfo_(#SPI_GETWORKAREA,0,@DesktopWorkArea.RECT,0) ; holt die Höhe des Desktops unter Berücksichtigung der Taskleiste
; Was holt die Breite des Desktops bei Taskleiste seitlich?

desktophoehe = DesktopWorkArea\Bottom 
taskleistenhoehe = GetSystemMetrics_(#SM_CYSCREEN) - DesktopWorkArea\Bottom 

;desktopbreite = ???? 
;was ist wenn Taskleiste oben oder rechts ist. 

OpenWindow(0, 0, 0, bildschirmbreite - 2*fensterrand, desktophoehe - 2*fensterrand - titelleistenhoehe, titelleiste$,  #PB_Window_SystemMenu |  #PB_Window_TitleBar ) ;| #PB_Window_SizeGadget #PB_Window_BorderLess )

SystemParametersInfo_(#SPI_GETWORKAREA,0,@DesktopWorkArea.RECT,0) 
TaskbarHeight = GetSystemMetrics_(#SM_CYSCREEN)-DesktopWorkArea\Bottom 
Debug "BildschirmBreite = " + Str(bildschirmbreite) +" Pixel"
Debug "BildschirmHöhe = " + Str(bildschirmhoehe) +" Pixel"
Debug "DesktopBreite = ???"
Debug "DesktopHöhe = " + Str(desktophoehe) +" Pixel"
Debug "TaskleistenHöhe = " + Str(taskleistenhoehe) +" Pixel"



Repeat 
 Select WaitWindowEvent() 
   Case #PB_Event_CloseWindow 
        Break
   EndSelect 
ForEver
End
Viele Grüße aus dem Sauerland
Eckhard

PureBasic 4.0 Vollversion, WinXP
Make a better world :D
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Du brauchst das Fenster doch nur zu Maximieren

Code: Alles auswählen

ShowWindow_(WindowID(0), #SW_MAXIMIZE)
oder dem entsprechenden PB Befehl.
Es gibt ja nicht nur die Taskleiste, sondern Quicklaunch usw. Die können auf
allen 4 Seiten verteilt werden :freak:

Bei normalen Anwendungen sollte man dies dem Anwender überlassen, weil
bei 1600 x 1200 Auflösung sieht ein maximiertes Fenster blöde aus :mrgreen:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Eckhard.S
Beiträge: 136
Registriert: 22.07.2006 17:19
Wohnort: Meschede/Sauerland

Beitrag von Eckhard.S »

Dein Maximieren geht über die Taskleiste hinweg und das ist nicht schön, weil die Taskleiste zu sehen bleiben soll.
Außerdem baue ich gerade ein Kontrukt aus 3 unabhängigen Fenstern, ähnlich eines Framesets, die über dem Desktop optimal aufgehen sollen.

In einem Forenthema habe ich

Code: Alles auswählen

SystemParametersInfo_(#SPI_GETWORKAREA,0,@DesktopWorkArea.RECT,0)
gefunden und jetzt bin ich neugierig, wie man an die Desktopinfos herankommt.

Das Programm purebasic.exe kanns ja auch, egal wo die Taskleiste ist, ist es immer optimal auf dem Desktop zu sehen.
Viele Grüße aus dem Sauerland
Eckhard

PureBasic 4.0 Vollversion, WinXP
Make a better world :D
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

Eckhard.S hat geschrieben:Dein Maximieren geht über die Taskleiste hinweg
genau das verhinderst Du, wenn Du Thomas' Rat befolgst.

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
Ja!
Beiträge: 271
Registriert: 02.01.2006 16:13
Wohnort: Stuttgart

Beitrag von Ja! »

Es ist Windows-Standard, daß die Taskleiste (bei "Always on top") immer zu sehen ist und maximierte Fenster sich automatisch anpassen..

..eben wie ts schon geschrieben hatte..
PureBasic 3.94 ; 4.2 ; 4.3
Benutzeravatar
Eckhard.S
Beiträge: 136
Registriert: 22.07.2006 17:19
Wohnort: Meschede/Sauerland

Beitrag von Eckhard.S »

Ich wollte aber gerne drei Fenster, die so aussehen und optimal auf dem Desktop sind, egal wo die Taskleiste ist.


Code: Alles auswählen

;PB4
; ************* Variablen Deklaration *************

fensterrand = 3
menuebreite=250
titelleistenhoehe = 19

SystemParametersInfo_(#SPI_GETWORKAREA,0,@DesktopWorkArea.RECT,0) ; holt die Höhe des Desktops unter Berücksichtigung der Taskleiste
bildschirmbreite = GetSystemMetrics_(#SM_CXSCREEN)  ; holt die Breite des Bildschirms
bildschirmhoehe = GetSystemMetrics_(#SM_CYSCREEN) -DesktopWorkArea\Bottom 
bildschirmhoehe = DesktopWorkArea\Bottom - 19
SystemParametersInfo_(#SPI_GETWORKAREA,0,@DesktopWorkArea.RECT,0) 
taskleistenhoehe = GetSystemMetrics_(#SM_CYSCREEN)-DesktopWorkArea\Bottom 
desktophoehe = bildschirmhoehe
desktopbreite = bildschirmbreite


;Debug "TaskBarHeight = "+Str(taskleistenhoehe)+" Pixel"
;Debug DesktopWorkArea\Bottom
;Debug bildschirmhoehe
;Debug desktophoehe
;Debug desktophoehe/2



        Fensterueberschrift$ = "Esperantoübersetzer von Eckhard Stoll, Version 1.0"

        Text_1       = 5
           Editor_1     = 11
           Editor_2     = 12
           Editor_3     = 13
              Button_1     = 20
                 Listenfeld_1 = 31
                 Listenfeld_2 = 32

        woerterbuchdatei$ = "eo-deu.txt"              ; aktuelles Wörterbuch
        Dim Wortlistenzeile.s(500000)            ; Anzahl der Wortlisteneinträge
        Dim Wortverbindung.s(1000)
                                 
        maxsaetze = 100                ; Maximum an Sätzen
        maxelemente = 500              ; Maximum an Wörtern pro Satz
        
        offset=13                      ; decode

        Dim eo_satz_wort.s(maxsaetze,maxelemente)     ; Array mit Eo-Sätzen und -Elementen (Wörter, Satzzeichen, Leerzeichen)
        Dim trans_satz_wort.s(maxsaetze,maxelemente)  ; Array mit Übersetzten Sätzen und -Wörtern
                                               
        Global FontID1
        FontID1 = LoadFont(1, "Courier New", 9)    ; Font für die Darstellung 


      
; ************* Hauptprogramm *************


OpenWindow(0, 0, 0, menuebreite, desktophoehe - 2*fensterrand, "Steuerung",  #PB_Window_SystemMenu |  #PB_Window_TitleBar ) ;| #PB_Window_SizeGadget #PB_Window_BorderLess )
SetWindowColor(0,RGB(100, 150, 100)) 
breitex = 70
  CreateGadgetList(WindowID(0))
      StringGadget(Editor_1, 20, 50, breitex, 100, "")
      SetGadgetFont(Editor_1, FontID1)
      EditorGadget(Editor_2, 20, 160, breitex, 110, #PB_Editor_ReadOnly)
      SetGadgetFont(Editor_2, FontID1)
      EditorGadget(Editor_3, 20, 280, breitex, 260,  #PB_Editor_ReadOnly)
      SetGadgetFont(Editor_3, FontID1)
      ListViewGadget(Listenfeld_1, breitex+25, 50, 110, 40)
      ButtonGadget(Button_1, breitex+25, 130, 100, 20, "Übersetzen")
      ListViewGadget(Listenfeld_2, breitex+25, 280, 100, 60)
      
   
      
      SetGadgetState(Listenfeld_1, 0)    ;erstes (nr. 0 ) Listenfelder aktiv
;OpenWindow(1, menuebreite + 2*fensterrand+10, 0, 10, 10,"",#PB_Window_BorderLess )
OpenWindow(1, menuebreite + 2*fensterrand, 0, desktopbreite-menuebreite-4*fensterrand - 2, desktophoehe/2 - 2*fensterrand - titelleistenhoehe - 1, "Esperanto",  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
OpenWindow(2, menuebreite + 2*fensterrand, desktophoehe/2 + 1, desktopbreite-menuebreite-4*fensterrand - 2, desktophoehe/2 - 2*fensterrand - titelleistenhoehe - 1, "Deutsch",  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )


Repeat 


 Select WaitWindowEvent() 
   Case #PB_Event_CloseWindow 
        Break

       
  EndSelect 
ForEver 
    


End
Viele Grüße aus dem Sauerland
Eckhard

PureBasic 4.0 Vollversion, WinXP
Make a better world :D
Benutzeravatar
Eckhard.S
Beiträge: 136
Registriert: 22.07.2006 17:19
Wohnort: Meschede/Sauerland

Beitrag von Eckhard.S »

P.S.

und es sollen drei getrennte Fenster sein, die man dann unabhängig voneinander maximieren kann, also kein Splitting
Viele Grüße aus dem Sauerland
Eckhard

PureBasic 4.0 Vollversion, WinXP
Make a better world :D
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Windows ist eine MultiTasking Umgebung, man arbeitet mit mehreren Anwendungen parallel. Die optimale Plazierung mußte dem Anwender überlassen. Wenn 3 Fenster, sollten es 2 Werkzeugfenster und ein Hauptfenster sein, alles andere händelt sich schlecht.

Bei Deinem Vorhaben wäre ein Splitting-Fenster oder ein MDI angebracht.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Eckhard.S
Beiträge: 136
Registriert: 22.07.2006 17:19
Wohnort: Meschede/Sauerland

Beitrag von Eckhard.S »

Genau so stelle ich es mir vor :D
Es gibt ein Hauptfenster, wo man Einstellungen machen kann. Und zwei Werkzeugfenster (Textfenster). In einem bearbeitet man den Esperantotext (während man dies tut, kann man das Fenster maximieren, damit man eine möglichst große Fläche bei langen Texten hat. )

Das andere Fenster gibt dann den deutschen Text, bzw. so etwas aus (hier ein Bespiel in Englisch):

Code: Alles auswählen

This   text is  bilingual    and should break down at the right     place.
Dieser Text ist zweisprachig und soll   umbrechen  an der richtigen Stelle. 
Auch dieses Fenster soll maximiert werden können.


Was ist die beste Methode hierfür?
Viele Grüße aus dem Sauerland
Eckhard

PureBasic 4.0 Vollversion, WinXP
Make a better world :D
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Für mich wäre das so nichts :wink:
Erinnert mich an den Explorer, da muß man auch 2 öffnen, wenn man nicht dauernd umständlich mit dem Kontextmenü arbeiten will. Deshalb nutze ich seid Jahren nur TotalCommander, weil die Fenster dort gesplittet sind.

Mit 2 Toolfenstern, meine ich so schmale lange, keine Textfenster zum
Maximieren.

Aber mach mal Dein Design, ich halte mich da lieber raus :wink:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Antworten