Minimalgröße eines Fensters festlegen

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    Unsere Datenschutzerklärung wurde aktualisiert. Mit der Nutzung unseres Forums akzeptierst Du unsere Datenschutzerklärung. Du bestätigst zudem, dass Du mindestens 16 Jahre alt bist.

    • @Roland: Kannst du da was machen? Xprofan kümmert sich um die WindowProc soweit ich weiß, vielleicht hast du eine Möglichkeit, dass der Benutzer eine Minimalgröße angeben kann. Bisher nutze ich in etwa die folgende SubclassProc:

      Quellcode

      1. Def GetProcAddress(2) !"KERNEL32","GetProcAddress"
      2. Def GetModuleHandleA(1) !"KERNEL32","GetModuleHandleA"
      3. proc POKEDW
      4. PARAMETERS ADR&,V!
      5. var VI&=0
      6. Call(GetProcAddress(GetModuleHandleA("KERNEL32"),"RtlMoveMemory"),ADR&+2,ADDR(VI&),2)
      7. VI&=INT(V!-(VI&*2^16))
      8. Call(GetProcAddress(GetModuleHandleA("KERNEL32"),"RtlMoveMemory"),ADR&,ADDR(VI&),2)
      9. endproc
      10. subclassproc
      11. If SubClassMessage(%hWnd,$24)
      12. POKEDW &SLPARAM+24,minimalerxwert&
      13. POKEDW &SLPARAM+28,minimalerywert&
      14. Set("WinProc",1)
      15. endif
      16. endproc
      Alles anzeigen
      ...hilft aber eben nur, wenn sich das Programm in einer waitinput-Schleife befindet.
      XProfan-Semiprofi (XProfan X4a+XPIA+LemonEd)
      Ryzen 1700X/MSI B350 PC MATE/16GB RAM@2933MHz/Radeon HD7770 OC/Creative X-Fi XTreme Music/65TB HDD+256GB Samsung 960 EVO/28" Samsung 4k
      XBox Classic/360S/One S/One X Scorpio Edition/PS3 Super Slim 500GB/PS4 Pro (XBL-ID: jacdelad, PSN: jacdelad84) auf 60" 4k/3D LG
      OnePlus 6 256GB Midnight Black
      jacdelad.bplaced.net
    • Die WindowProc kann man doch selbst bearbeiten. Siehe unter Callback.

      So ähnlich sollte es laufen.
      Die betreffende Message wird durch Größenänderung ausgelöst.
      Da jubelt man einfach seine eigenen Grenzen unter...

      Quellcode

      1. $H Windows.ph
      2. $H Messages.ph
      3. 'Def %WM_GETMINMAXINFO = $24
      4. Struct MyPNT = x&, y&
      5. Struct MyMINMAXINFO = ptReserved!MyPNT, ptMaxSize!MyPNT, ptMaxPosition!MyPNT, ptMinTrackSize!MyPNT, ptMaxTrackSize!MyPNT
      6. Declare OldWndProc&
      7. Declare MMI#
      8. Dim MMI#, MyMINMAXINFO
      9. Proc MyWindowProc
      10. Parameters hWnd&, Message&, wParam&, lParam&
      11. If Message& = ~WM_GETMINMAXINFO // liefert in lParam die Adresse auf MinMaxInfo (wird bei Größenänderung gesendet)
      12. If lParam& <> 0
      13. MMI# = lParam& // dort setzt man dann seine Grenzen, die eingehalten werden sollen
      14. With MMI#
      15. .ptMinTrackSize.x& = 300 // neue Min-Werte setzen
      16. .ptMinTrackSize.y& = 300 // neue Min-Werte setzen
      17. EndWith
      18. EndIf
      19. EndIf
      20. Return ~CallWindowProc(OldWndProc&, hWnd&, Message&, wParam&, lParam&)
      21. EndProc
      22. OldWndProc& = ~GetWindowLong(%hWnd,~GWL_WNDPROC,ProcAddr("MyWindowProc",4))
      23. 'Set("FastMode",0)
      24. '.... DAS PROGRAMM
      25. 'Set("FastMode",1)
      26. ~SetWindowLong(%hWnd,~GWL_WNDPROC,OldWndProc&)
      27. Dispose MMI#
      28. End
      Alles anzeigen
      Programmieren, das spannendste Detektivspiel der Welt.
    • Ah danke. Probiere ich wenn ich von meiner Geschäftsreise zurück bin. Ich sollte wieder mehr MSDN lesen...
      XProfan-Semiprofi (XProfan X4a+XPIA+LemonEd)
      Ryzen 1700X/MSI B350 PC MATE/16GB RAM@2933MHz/Radeon HD7770 OC/Creative X-Fi XTreme Music/65TB HDD+256GB Samsung 960 EVO/28" Samsung 4k
      XBox Classic/360S/One S/One X Scorpio Edition/PS3 Super Slim 500GB/PS4 Pro (XBL-ID: jacdelad, PSN: jacdelad84) auf 60" 4k/3D LG
      OnePlus 6 256GB Midnight Black
      jacdelad.bplaced.net
    • Neu

      Sorry, aber irgendwie haut das nicht hin:

      Quellcode

      1. $H Windows.ph
      2. $H Messages.ph
      3. 'Def %WM_GETMINMAXINFO = $24
      4. Struct MyPNT = x&, y&
      5. Struct MyMINMAXINFO = ptReserved!MyPNT, ptMaxSize!MyPNT, ptMaxPosition!MyPNT, ptMinTrackSize!MyPNT, ptMaxTrackSize!MyPNT
      6. Declare OldWndProc&
      7. Declare MMI#
      8. Dim MMI#, MyMINMAXINFO
      9. Proc MyWindowProc
      10. Parameters hWnd&, Message&, wParam&, lParam&
      11. If Message& = ~WM_GETMINMAXINFO // liefert in lParam die Adresse auf MinMaxInfo (wird bei Größenänderung gesendet)
      12. If lParam& <> 0
      13. MMI# = lParam& // dort setzt man dann seine Grenzen, die eingehalten werden sollen
      14. With MMI#
      15. .ptMinTrackSize.x& = 300 // neue Min-Werte setzen
      16. .ptMinTrackSize.y& = 300 // neue Min-Werte setzen
      17. EndWith
      18. EndIf
      19. EndIf
      20. Return ~CallWindowProc(OldWndProc&, hWnd&, Message&, wParam&, lParam&)
      21. EndProc
      22. OldWndProc& = ~GetWindowLong(%hWnd,~GWL_WNDPROC,ProcAddr("MyWindowProc",4))
      23. Set("FastMode",0)
      24. '.... DAS PROGRAMM
      25. cls
      26. while 1
      27. waitinput
      28. endwhile
      29. Set("FastMode",1)
      30. ~SetWindowLong(%hWnd,~GWL_WNDPROC,OldWndProc&)
      31. Dispose MMI#
      32. End
      Alles anzeigen
      ...macht quasi nichts. Tut mir leid, dass ich das nicht selbst hinkriege. :cry:
      XProfan-Semiprofi (XProfan X4a+XPIA+LemonEd)
      Ryzen 1700X/MSI B350 PC MATE/16GB RAM@2933MHz/Radeon HD7770 OC/Creative X-Fi XTreme Music/65TB HDD+256GB Samsung 960 EVO/28" Samsung 4k
      XBox Classic/360S/One S/One X Scorpio Edition/PS3 Super Slim 500GB/PS4 Pro (XBL-ID: jacdelad, PSN: jacdelad84) auf 60" 4k/3D LG
      OnePlus 6 256GB Midnight Black
      jacdelad.bplaced.net
    • Neu

      p. specht schrieb:

      Für Minimal- und Maximalgröße hat Georg Teles etwas gestiftet. Klappt bei mir gut: LINK
      Vielen Dank. Der Code funktioniert bestimmt auch und ich benutze schon einen ähnlichen Code, der per Subclassing arbeitet. Aber das löst nicht mein Problem: Er funktioniert solange sichd as Programm in einer Schleife mit waitinput befindet. Aber nicht, wenn zum Beispiel eine komplexere Funktion aufgerufen wird die eine Minute zu bearbeiten braucht bis das Programm wieder in die waitinput-Schleife springt. Mir ist klar, dass XProfan in der Zeit natürlich keine Messages abarbeitet, aber andere Programmiersprachen können das, die Fenster lassen sich zu jedem Zeitpunkt flackerfrei skalieren.
      Eine Möglichkeit wäre vielleicht ein zweiter Prozess, aber das ist doch ziemlich umständlich?!
      XProfan-Semiprofi (XProfan X4a+XPIA+LemonEd)
      Ryzen 1700X/MSI B350 PC MATE/16GB RAM@2933MHz/Radeon HD7770 OC/Creative X-Fi XTreme Music/65TB HDD+256GB Samsung 960 EVO/28" Samsung 4k
      XBox Classic/360S/One S/One X Scorpio Edition/PS3 Super Slim 500GB/PS4 Pro (XBL-ID: jacdelad, PSN: jacdelad84) auf 60" 4k/3D LG
      OnePlus 6 256GB Midnight Black
      jacdelad.bplaced.net