Strona: [  << <   1   > >>  ]  z  1     
Autor Temat: Maksymalizacja formatki z zachowaniem pozycji jej elementów.
Groszek




Typ: neutral
Postów: 12
Zarejestrowany: Sep 2004
Maksymalizacja formatki z zachowaniem pozycji jej elementów.

Jak to zrobić, aby po kliknięciu "pola maksymalizuj" tego w środku trzech przycisków po prawej stronie okna na formatce nastąpiła jej maksymalizacja, ale aby jej elementy pozostały na swoim miejscu, tak jak były przed maksymalizacją tj. np. centralnie na ekranie monitora.

[Post edytowany dnia 26-09-2004 15:44 przez Groszek]


_____________________________________________
Groszek.

22-09-2004 23:47
Pokaż profil Groszek  Wyślij email do Groszek   
xEagle2



Typ: neutral
Postów: 280
Zarejestrowany: Jul 2003

Jeśli chcesz maxymalizować przez X to musisz sprwdzać informacje od systemu do okna

jeśli chcesz mieć takiej samej wielkości (guziki,textboxy)co przed zmienieniem rozmiaru tylko że na środku to daj ten kawałek kodu


Private Sub Form_Resize()
ramka.Left = (Me.ScaleWidth / 2) - (ramka.Width / 2)
ramka.Top = (Me.ScaleHeight / 2) - (ramka.Height / 2)
End Sub




Mam nadzieje że o to chodziło


_____________________________________________
Co oznacza NET ? Natychmiastowa Eksplozja Trojanów

23-09-2004 07:08
Pokaż profil xEagle2  Wyślij email do xEagle2       
kicaj




Typ: neutral
Postów: 271
Zarejestrowany: Aug 2003

Private Sub Form_Unload(Cancel As Integer)
Cancel = 1 ' albo zero nie pamietam bo nie mam teraz vb zainstalowanego
Beep ' na przyklad
End Sub

i mozesz sobie klikac na X ile chcesz a i tak sie nie wylaczy

23-09-2004 13:21
Pokaż profil kicaj  Wyślij email do kicaj        3914568
marcin_an
Forumowicz




Typ: neutral
Postów: 1265
Zarejestrowany: Mar 2004

... chyba, że jakiś program zrobi force kill .

Wracając do tematu:

Private Sub Maksymalizuj()
    Dim nX As Long
    Dim nY As Long
    Dim nW As Long
    Dim nH As Long
    Dim ctlControl As Control
   
    If Me.WindowState = 2 Then Exit Sub
   
    nW = Me.ScaleWidth
    nH = Me.ScaleHeight
    Me.WindowState = 2
    nX = Me.ScaleWidth \ 2 - nW \ 2
    nY = Me.ScaleHeight \ 2 - nH \ 2
   
    For Each ctlControl In Me.Controls
        ctlControl.Top = ctlControl.Top + nX
        ctlControl.Left = ctlControl.Left + nY
    Next
End Sub

Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
    If UnloadMode = 0 Then
        Cancel = True
        Maksymalizuj
    End If
End Sub




_____________________________________________
Jedzonko dla Google'a:
Forum na temat Visual Basic, C, C++, Pascal, Programowanie, API, PHP, VBA, VB.NET, QBasic, VBScript, Komputery
Moja strona o wszystkim

23-09-2004 13:48
Pokaż profil marcin_an  Wyślij email do marcin_an   Odwiedź stronę marcin_an  
Groszek




Typ: neutral
Postów: 12
Zarejestrowany: Sep 2004

Dziękuję marcin_an za kod. To działa, ale wtedy gdy klika się pole "X" (ostatni po prawej stronie u góry okna).
Natomiast mnie chodzi o to samo, ale w przypadku kliknięcia pola "tego w środku" (maksymalizuj).
Pewnie przerobienie tego kodu jest proste, ale ja nie umiem tego zrobić, Jestem początkującym w programowaniu (zielony). Pozostałe kody nie działają.

[Post edytowany dnia 26-09-2004 15:57 przez Groszek]


_____________________________________________
Groszek.

26-09-2004 15:42
Pokaż profil Groszek  Wyślij email do Groszek   
marcin_an
Forumowicz




Typ: neutral
Postów: 1265
Zarejestrowany: Mar 2004

Private nW As Long
Private nH As Long


Private Sub Ustaw_kontrolki()
    Dim nX As Long
    Dim nY As Long
    Dim ctlControl As Control
   
    nX = Me.ScaleWidth \ 2 - nW \ 2
    nY = Me.ScaleHeight \ 2 - nH \ 2
   
    For Each ctlControl In Me.Controls
        ctlControl.Top = ctlControl.Top + nX
        ctlControl.Left = ctlControl.Left + nY
    Next
End Sub

Private Sub Form_Resize()
    If Me.WindowState = 2 Then
        Ustaw_kontrolki
    ElseIf Me.WindowState = 0 Then
        nW = Me.ScaleWidth
        nH = Me.ScaleHeight
    End If
End Sub


Co do kodu xEagle2: działa, ale po pierwsze działa przy każdej zmianie rozmiaru okna (nie tylko przy maksymalizacji, po drugie musisz wtedy mieć wszystkie kontrolki na jakimkolwiek kontenerze o nazwie Ramka.

[Post edytowany dnia 26-09-2004 19:50 przez marcin_an]


_____________________________________________
Jedzonko dla Google'a:
Forum na temat Visual Basic, C, C++, Pascal, Programowanie, API, PHP, VBA, VB.NET, QBasic, VBScript, Komputery
Moja strona o wszystkim

26-09-2004 17:36
Pokaż profil marcin_an  Wyślij email do marcin_an   Odwiedź stronę marcin_an  
Groszek




Typ: neutral
Postów: 12
Zarejestrowany: Sep 2004

Dziękę. Wpisałem ten kod i efekt jest taki, że wyłączył mi się całkiem przycisk (pole) maksymalizacji.
W kodzie zabrakło (chyba) "\" w nX i nY. Dopisałem bo VB podawał, że bez tego to błąd.


_____________________________________________
Groszek.

26-09-2004 18:52
Pokaż profil Groszek  Wyślij email do Groszek   
marcin_an
Forumowicz




Typ: neutral
Postów: 1265
Zarejestrowany: Mar 2004

Ten kod nie mógł skasować wogóle pola maksymalizacji .

A ztymi \ to się zgadza. Ale to nie moja wina, tylko wina forum - czasami ten znak, nie wiem czemu, wycina . Już poprawiłem.


_____________________________________________
Jedzonko dla Google'a:
Forum na temat Visual Basic, C, C++, Pascal, Programowanie, API, PHP, VBA, VB.NET, QBasic, VBScript, Komputery
Moja strona o wszystkim

26-09-2004 19:52
Pokaż profil marcin_an  Wyślij email do marcin_an   Odwiedź stronę marcin_an  
Groszek




Typ: neutral
Postów: 12
Zarejestrowany: Sep 2004

Kod oczywiście nie skasował całkowicie tego przycisku. Jest on w programie, który piszę, tak jakby "wyłączony". W nowym programie kod ten działa, ale tylko też w jedną stronę tzn. po maksymalizacji wraca z powrotem, ale nie ma na formie kontrolek.

Odnośnie tego sposobu xEagle2, co to znaczy, że muszę wtedy mieć wszystkie kontrolki na jakimkolwiek kontenerze o nazwie Ramka. Czy takim kontenerem może być ogólna forma i wystarczy wpisać jej nazwę?

[Post edytowany dnia 26-09-2004 22:25 przez Groszek]


_____________________________________________
Groszek.

26-09-2004 21:09
Pokaż profil Groszek  Wyślij email do Groszek   
marcin_an
Forumowicz




Typ: neutral
Postów: 1265
Zarejestrowany: Mar 2004

Działa tylko w jedną stronę, bo tylko o jednej stronie mówiłeś . Jeśli chcesz, żeby po maksymalizacji kontrolki wracały do poprzednich pozycji, użyj takiego kodu:

Private nW As Long
Private nH As Long
Private nX As Long
Private nY As Long

Private Sub Ustaw_kontrolki()
    Dim ctlControl As Control
   
    nX = Me.ScaleWidth \ 2 - nW \ 2
    nY = Me.ScaleHeight \ 2 - nH \ 2
   
    For Each ctlControl In Me.Controls
        ctlControl.Top = ctlControl.Top + nX
        ctlControl.Left = ctlControl.Left + nY
    Next
End Sub

Private Sub Przywroc_kontrolki()
    Dim ctlControl As Control
   
    For Each ctlControl In Me.Controls
        ctlControl.Top = ctlControl.Top - nX
        ctlControl.Left = ctlControl.Left - nY
    Next
    nY = 0: nX = 0
End Sub

Private Sub Form_Resize()
    If Me.WindowState = 2 Then
        Ustaw_kontrolki
    ElseIf Me.WindowState = 0 Then
        Przywroc_kontrolki
        nW = Me.ScaleWidth
        nH = Me.ScaleHeight
    End If
End Sub



_____________________________________________
Jedzonko dla Google'a:
Forum na temat Visual Basic, C, C++, Pascal, Programowanie, API, PHP, VBA, VB.NET, QBasic, VBScript, Komputery
Moja strona o wszystkim

26-09-2004 21:24
Pokaż profil marcin_an  Wyślij email do marcin_an   Odwiedź stronę marcin_an  
Groszek




Typ: neutral
Postów: 12
Zarejestrowany: Sep 2004

Bardzo Ci dziękuję. Wreszcie zaczęło to działać!
Co prawda u mnie na ekranie kontrolki te nie są tak całkiem centralnie, ale już może być. Działa też w obie strony.

Jeszcze raz serdeczne podziękowania!


_____________________________________________
Groszek.

26-09-2004 22:28
Pokaż profil Groszek  Wyślij email do Groszek   
Wszystkich odpowiedzi: 10 :: Maxymalnie na stronę: 20
Strona: [  << <   1   > >>  ]  z  1