Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

GUI - najprostszy problem


Rekomendowane odpowiedzi

Opublikowano

Witam,

Otóż chodzi mi o zamykanie drugorzędnego gui.

 

Mam 

1x gui, po naciśnięciu wyświetla się kolejne gui, po kliknięciu w krzyżyk (exit) drugiego gui ma się wyłączyć nie zamykając całego programu włącznie z gui 1 (form1)

#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
$Form2 = GUICreate("program", 405, 293, 265, 162)
$Button1 = GUICtrlCreateButton("drugi", 128, 80, 163, 89)
GUISetState(@SW_SHOW)
 
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
 
 
Case $button1
$Form3 = GUICreate("Form3", 545, 174, 667, 261)
$Label1 = GUICtrlCreateLabel("ten po zamknieciu nie ma zamykac calego programu form2, tylko zwyczajnie form3", 88, 64, 391, 17)
GUISetState(@SW_SHOW)
 
EndSwitch
WEnd

Wszystkie poradniki w "O mnie" i na moim profilu YouTube.


51dd70965ae71.png


!!!HIT!!! -- Pełno klientów na DT nawet na najstarszym kompie bez zamuły!


!!!HIT!!! -- Nowa modyfikacja do Metina FastKill


World of Metin2


Opublikowano

Starałem się już poprzednio wg tego "helpu" przerobić mój kod, ale bez rezultatów.

Nie jestem żadnym programistą i nie chce być, potrzebne pilnie mi po prostu jeden skrawek przerobiony prawidłowo na moim kodzie, jeżeli wiesz jak to zrobić i nie zajmie Ci sporo to czasu to bardzo bym prosił.

Pozdrawiam

Wszystkie poradniki w "O mnie" i na moim profilu YouTube.


51dd70965ae71.png


!!!HIT!!! -- Pełno klientów na DT nawet na najstarszym kompie bez zamuły!


!!!HIT!!! -- Nowa modyfikacja do Metina FastKill


World of Metin2


Opublikowano


#include <ButtonConstants.au3>

#include <GUIConstantsEx.au3>

#include <WindowsConstants.au3>

 

Global $Form3 = 12345

 

$Form2 = GUICreate("program", 405, 293, 265, 162)

$Button1 = GUICtrlCreateButton("drugi", 128, 80, 163, 89)

GUISetState(@SW_SHOW)

 

While 1

$aMsg = GUIGetMsg(1)

Switch $aMsg[1]

Case $Form2

Switch $aMsg[0]

Case $GUI_EVENT_CLOSE

ExitLoop

Case $Button1

Form3()

EndSwitch

Case $Form3

Switch $aMsg[0]

Case $GUI_EVENT_CLOSE

GUIDelete($Form3)

EndSwitch

EndSwitch

WEnd

 

Func Form3()

$Form3 = GUICreate("Form3", 545, 174, 667, 261)

$Label1 = GUICtrlCreateLabel("ten po zamknieciu nie ma zamykac calego programu form2, tylko zwyczajnie form3", 88, 64, 391, 17)

GUISetState()

EndFunc

 

 

Opublikowano

Można to zapisać nieco prościej.

Dodałem także możliwość otwarcia tylko jednego okna potomnego.

#include <GUIConstantsEx.au3>

Dim $WSK = False
$Form2 = GUICreate("program", 405, 293, 265, 162)
$Button1 = GUICtrlCreateButton("drugi", 128, 80, 163, 89)
GUISetState()

Do
   $aMsg = GUIGetMsg(1)
   If Not $WSK And $aMsg[0]=$Button1 Then
      $Form3 = GUICreate("Form3", 545, 174, 667, 261)
      $Label1 = GUICtrlCreateLabel("ten po zamknieciu nie ma zamykac calego programu form2, tylko zwyczajnie form3", 88, 64, 391, 17)
      GUISetState()
      $WSK = True
   EndIf
   If $aMsg[0]=$GUI_EVENT_CLOSE And $aMsg[1]=$Form3 Then
       GUIDelete($Form3)
       $WSK = False
    EndIf
Until $aMsg[0]=$GUI_EVENT_CLOSE And $aMsg[1]=$Form2
Opublikowano

Dziękuję Wam za pomoc, niestety ciężko było wdrożyć mi Wasz kod w mój dość spory program, postanowiłem, że pójdę inną ścieżką i inaczej to zrobię.

Na przyszłość może komuś się przydać albo ktoś z Was napisze, że to nie jest praktyczne. %5E%5E.png

 

Wygląda to tak, że w głównym programie po naciśnięciu buttona, który otworzy kolejny form2 zrobiłem funkcję, czyli button z pierwszego glownego okna ma isc do funkcji na koniec programu, czyli 

 

Uproszczone wyjaśnienie:

$Form1_1 = GUICreate("tytul", 1190, 660, 73, 54)
GUISetState(@SW_SHOW)
While 1
	$nMsg = GUIGetMsg()
	Switch $nmsg
		Case $gui_event_close
			Exit
		Case $button24
		   form2()


func form2()
$Form2 = GUICreate("tekst", 1237, 463, 238, 91)
GUISetState(@SW_SHOW)
 
While 1
$aMsg = GUIGetMsg()
Switch $aMsg
Case $GUI_EVENT_CLOSE
GUIDelete($Form2)
Return 0
EndSwitch
WEnd
 EndFunc
Plusy mojego kodu

- Program potrafi tylko raz mieć aktywne okno dodatkowe (form2), nie uruchamia kilkukrotnie jak kod @Pawellek

- Po wylaczeniu glownego programu majac uruchomiony form2, wylaczy sie tylko form2, dopiero po wyleczeniu wszsytkich okien drugorzednych potrafi sie wylaczyc program glowny

Minus

- Mając uruchiomiony form2 na którym pracuję, żadna inna funkcja form1 nie zadziała

 

Więc wszystko naprawdę satysfakcjonująco działa.

Metoda prób i błędów, akurat zajęło mi tylko to z dwie minuty, więc jestem z siebie zadowolony. %5E%5E.png

Wam bardzo dziękuję za pomoc, pozdrawiam!

 

Edit

Jeśli chcemy wielozadaniowość można ten Exit zastąpić GUIDelete($Form2), tylko wtedy program trzeba zamykać Alt F4 albo Exit Script.

(mowa o pierwszym już kodzie z którym miałem problem)

Case $GUI_EVENT_CLOSE
Exit
Na

Case $GUI_EVENT_CLOSE
GUIDelete($Form2)

Wszystkie poradniki w "O mnie" i na moim profilu YouTube.


51dd70965ae71.png


!!!HIT!!! -- Pełno klientów na DT nawet na najstarszym kompie bez zamuły!


!!!HIT!!! -- Nowa modyfikacja do Metina FastKill


World of Metin2


Opublikowano

Cieszę się, że kombinujesz coś samodzielnie.

W programowaniu fajne jest między innymi to, że w zasadzie każdy problem można rozwiązać na różne sposoby.

A dodatkową satysfakcje daje znalezienie takiego rozwiązanie, które najlepiej spełnia nasze oczekiwania.

 

Pozdrawiam i życzę dalszych sukcesów w przygodzie z programowaniem.

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...