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

Problem z GUI


Rekomendowane odpowiedzi

Opublikowano

Witam. Własnie graficznie dopracowuje swoje GUI programu. Mam ogromne problemy z pojęciem GUI dlatego piszę tutaj. Mój program wygląda mniej więcej tak:

#include <GUIConstantsEx.au3>

GUICreate("MPC",320,130)
$1 = GUICtrlCreateInput("", 100, 5, 210, 20)
GUICtrlCreateLabel("A:",10, 5)
$2 = GUICtrlCreateInput("", 100, 35, 210, 20)
GUICtrlCreateLabel("B:",10, 35)
$hBtn = GUICtrlCreateButton("DALEJ", 100, 75, 60, 20)
GUISetState()

Do
   $msg = GUIGetMsg()
   Sleep(25)
Until $msg=$GUI_EVENT_CLOSE Or $msg=$hBtn


GUICreate("MPC 2", 320, 130)
$btn = GUICtrlCreateButton("OK", 100, 75, 60, 20)
GUICtrlCreateLabel("C: ", 10, 5)
$3 = GUICtrlCreateInput("", 110, 5, 200, 20)
GUICtrlCreateLabel("D: ", 10, 35)
$4 = GUICtrlCreateInput("", 110, 35, 200, 20)
GUISetState()

Do
   $msg = GUIGetMsg()
   Sleep(25)
Until $msg=$GUI_EVENT_CLOSE Or $msg=$btn

A chciałbym, żeby wyglądał tak:

#include <GUIConstants.au3>

GUICreate("Logowanie",320,130)
$q = GUICtrlCreateInput("", 100, 5, 210, 20)
GUICtrlCreateLabel("Login:",10, 5)
$w = GUICtrlCreateInput("", 100, 35, 210, 20)
GUICtrlCreateLabel("Haslo:",10, 35)
$hBtn = GUICtrlCreateButton("Loguj", 100, 75, 60, 20)
GUISetState()

Dim $aWSK[2]=[0,1]
Local $hCombo1, $hCombo2, $hCombo3, $hCombo4

GUICreate("MPC",290,260)
$hButton = GUICtrlCreateButton("OK", 100,200, 100, 25)
GUICtrlCreateLabel("A: ", 8, 25, 60, 20)
GUICtrlCreateLabel("B: ", 8, 55, 60, 20)

$hCombo=GUICtrlCreateCombo("1", 70, 20, 200, -1, $CBS_DROPDOWNLIST)  ; pierwsza pozycja listy
GUICtrlSetData($hCombo, "2|3|4", "1")
GUISetState()

Do
   $msg = GUIGetMsg()
   Switch GUICtrlRead($hCombo)
      Case "1"
	 If $aWSK[0]<>"1" Then
            GUICtrlDelete($hCombo1)
            $hCombo1=GUICtrlCreateCombo("11", 70, 50, 200, -1, $CBS_DROPDOWNLIST)  ; pierwsza pozycja listy
            GUICtrlSetData(-1, "12|13|14", "11")
            GUISetState()
	    $aWSK[0]="1"

	 EndIf
      Case "2"
	 If $aWSK[0]<>"2" Then
            GUICtrlDelete($hCombo1)
            $hCombo1=GUICtrlCreateCombo("21", 70, 50, 200, -1, $CBS_DROPDOWNLIST)  ; pierwsza pozycja listy
            GUICtrlSetData(-1, "22|23|24|25|26", "21")
            GUISetState()
	    $aWSK[0]="2"

	 EndIf
      Case "3"
	 If $aWSK[0]<>"3" Then
            GUICtrlDelete($hCombo1)
            $hCombo1=GUICtrlCreateCombo("31", 70, 50, 200, -1, $CBS_DROPDOWNLIST)  ; pierwsza pozycja listy
			GUICtrlSetData(-1, "32|33|34", "31")
            GUISetState()
	    $aWSK[0]="3"

         EndIf
      Case "4"
	 If $aWSK[0]<>"4" Then
            GUICtrlDelete($hCombo1)
            $hCombo1=GUICtrlCreateCombo("41", 70, 50, 200, -1, $CBS_DROPDOWNLIST)  ; pierwsza pozycja listy
			GUICtrlSetData(-1, "42|43|44", "41")
            GUISetState()
	    $aWSK[0]="4"

	 EndIf

   EndSwitch

   $a = GUICtrlCreateInput("", 70, 120, 210, 20)
   GUICtrlCreateLabel("C:",10, 125)

   $b = GUICtrlCreateInput("", 70, 150, 210, 20)
   GUICtrlCreateLabel("D:",10, 155)




Until $msg = $hButton

W moim programie jest logowanie i to powinno wyglądać tak, że na początku wyskakuje pierwsze GUI a po kliknięciu "Loguj" zniknąć i wyskoczyć GUI właściwego programu. A w tym właściwym po odpowiedniej konfiguracji Combo powinny niżej wyskoczyć odpowiednie inputy do wpisania innych danych np. Jeśli konfiguracja Combo jest taka: A=1, B=11 to pod spodem wyskakuje napis 1, 11 i obok input a po konfiguracji A=2, B=22 wyskakuje kolejne Combo w którym też trzeba wybrać jakąś konfigurację a jeśli konfiguracja jest taka jaką bym chciał to po kliknięciu "OK" wywołuje się odpowiednia funkcja w programie. I jeszcze jedno przydało by się, żeby przycisk wyłączenia programu działał jak należy, bo często mam tak, że albo on w ogóle nie działa albo działa tak samo jak przycisk "OK" i zamiast wyłączyć całkowicie program to wywołuje się jakaś funkcja. To już jedna z ostatnich prac nad programem. Dzięki z góry 

Opublikowano

Fragment z logowaniem powinien wyglądać np. tak:

#include <GUIConstants.au3>

Local $sLogin = "wasta", $sHaslo = "autoit" ;prawidłowy login i hasło

#Region Logowanie do programu
$hGUI1 = GUICreate("Logowanie",320,130, -1, -1, $WS_TILED, $WS_EX_TOPMOST)
$hLog = GUICtrlCreateInput("", 100, 5, 210, 20)
GUICtrlCreateLabel("Login:",10, 5)
$hPas = GUICtrlCreateInput("", 100, 35, 210, 20)
GUICtrlCreateLabel("Hasło:",10, 35)
$hBtn = GUICtrlCreateButton("Loguj", 100, 75, 60, 20)
GUISetState()
Do
   $msg = GUIGetMsg()
   Sleep(25)
Until $msg = $hBtn

$sLog = GUICtrlRead($hLog)
$sPas = GUICtrlRead($hPas)
If Not ($sG=$sLogin And $sW=$sHaslo) Then
   MsgBox(16, "UWAGA:", "Błąd logowania!", 3)
   Exit
EndIf
GUIDelete($hGUI1)
#EndRegion Logowanie do programu


GUICreate("MPC 2", 320, 130)
$hBtn = GUICtrlCreateButton("OK", 100, 75, 60, 20)
GUICtrlCreateLabel("C: ", 10, 5)
$h3 = GUICtrlCreateInput("", 110, 5, 200, 20)
GUICtrlCreateLabel("D: ", 10, 35)
$h4 = GUICtrlCreateInput("", 110, 35, 200, 20)
GUISetState()

Do
   $msg = GUIGetMsg()
   Sleep(25)
Until $msg=$GUI_EVENT_CLOSE Or $msg=$hBtn

Co do dalszej części, to musiałbyś to dokładniej opisać, bo na razie za bardzo nie wiem co chciałbyś osiągnąć.

Opublikowano

Chodzi o to że po wybraniu odpowidniej kombinacji tych 2 rozwijanych list czyli w pierwszej bylo by np 1 a w drugiej rozwijanej liscie np 11 to pod spodem wyskoczy np input zeby cos wpisać. A jesli jest np w pierwszym 2 a w drugim 23 to tamten imput zniknie i pojawi sie np jakis napis. Glownie chodzi o to że w tych 2 combo jest do wybrania: Ruletka i metoda obstawiania. I np ktos wybral ruletke csgopolygon i nizej metoda np na zielone i pod spodem ma pojawic sie miejsce do wpisania np stawki jaką bot ma stawiać.

Opublikowano

81684494625330969836.png

Coś takiego. Chodzi o to, żeby po wybraniu np A=1 B=11 pod spodem był np jakiś button a jeśli jest A=1 b=12 to nie ma tego buttona tylko jest jakieś pole do wpisania czegoś a jest np jakiś Checkbox. Inaczej nie potrafię wytłumaczyć

Opublikowano

To nie jest takie proste, aby dynamicznie zmieniać zawartość kontrolek w GUI na podstawie zawartości innych kontrolek.

Pracuję nad tym, ale na razie nie osiągnąłem zadowalającego rezultatu. Mam parę pomysłów, ale muszę je przetestować.

Trochę cierpliwości, bo trudno mi jest wygospodarować tyle czasu, aby wszystko załatwiać od ręki, zwłaszcza jeżeli rozwiązanie nie jest mi znane od razu.

No i inni tez mają pytania.

Opublikowano


#include <GUIConstants.au3>

#include <GuiComboBox.au3>

#include <AutoItConstants.au3>

 

GUICreate("MPC",290,260)

$hButton = GUICtrlCreateButton("OK", 100,200, 100, 25)

GUICtrlCreateLabel("A: ", 8, 25, 60, 20)

GUICtrlCreateLabel("B: ", 8, 55, 60, 20)

 

$hCombo= GUICtrlCreateCombo("1", 70, 20, 200, -1, $CBS_DROPDOWNLIST)

GUICtrlSetData($hCombo, "2|3|4", "1")

 

$hCombo1=GUICtrlCreateCombo("11", 70, 50, 200, -1, $CBS_DROPDOWNLIST)

GUICtrlSetData(-1, "12|13|14", "11")

 

Global $DummiesStart[2][3], $DummiesEnd[2][3]

 

$DummiesStart[0][0] = GUICtrlCreateDummy()

#Region 1-11

$a = GUICtrlCreateInput("", 70, 120, 210, 20)

GUICtrlCreateLabel("C:",10, 125)

$b = GUICtrlCreateInput("", 70, 150, 210, 20)

GUICtrlCreateLabel("D:",10, 155)

#EndRegion 1-11

$DummiesEnd[0][0] = GUICtrlCreateDummy()

 

$DummiesStart[0][1] = GUICtrlCreateDummy()

#Region 1-12

$c = GUICtrlCreateInput("", 70, 120, 210, 20)

GUICtrlCreateLabel("E:",10, 125)

$d = GUICtrlCreateInput("", 70, 150, 210, 20)

GUICtrlCreateLabel("F:",10, 155)

#EndRegion 1-12

$DummiesEnd[0][1] = GUICtrlCreateDummy()

 

$DummiesStart[0][2] = GUICtrlCreateDummy()

#Region 1-13

$e = GUICtrlCreateInput("", 70, 120, 210, 20)

GUICtrlCreateLabel("G:",10, 125)

$f = GUICtrlCreateInput("", 70, 150, 210, 20)

GUICtrlCreateLabel("H:",10, 155)

#EndRegion 1-13

$DummiesEnd[0][2] = GUICtrlCreateDummy()

 

$DummiesStart[1][0] = GUICtrlCreateDummy()

#Region 2-21

$g = GUICtrlCreateCheckbox("2-21", 70, 120, 100, 20)

$h = GUICtrlCreateCheckbox("2-21", 70, 150, 110, 20)

#EndRegion 2-21

$DummiesEnd[1][0] = GUICtrlCreateDummy()

 

$DummiesStart[1][1] = GUICtrlCreateDummy()

#Region 2-22

$i = GUICtrlCreateCheckbox("2-22", 70, 120, 100, 20)

$j = GUICtrlCreateCheckbox("2-22", 70, 150, 110, 20)

#EndRegion 2-22

$DummiesEnd[1][1] = GUICtrlCreateDummy()

 

GUISetState(@SW_SHOW)

_ShowHide(GUICtrlRead($hCombo1))

 

While 1

$msg = GUIGetMsg()

Switch $msg

Case $hButton, $GUI_EVENT_Close

ExitLoop

Case $hCombo

_GUICtrlComboBox_ResetContent ($hCombo1)

Switch GUICtrlRead($hCombo)

Case "1"

GUICtrlSetData($hCombo1, "11|12|13|14")

_GUICtrlComboBox_SetCurSel($hCombo1, 0)

_ShowHide(GUICtrlRead($hCombo1))

Case "2"

GUICtrlSetData($hCombo1, "21|22|23|24")

_GUICtrlComboBox_SetCurSel($hCombo1, 0)

_ShowHide(GUICtrlRead($hCombo1))

Case "3"

GUICtrlSetData($hCombo1, "31|32|33|34")

_GUICtrlComboBox_SetCurSel($hCombo1, 0)

_ShowHide(GUICtrlRead($hCombo1))

Case "4"

GUICtrlSetData($hCombo1, "41|42|43|44")

_GUICtrlComboBox_SetCurSel($hCombo1, 0)

_ShowHide(GUICtrlRead($hCombo1))

EndSwitch

 

Case $hCombo1

_ShowHide(GUICtrlRead($hCombo1))

 

EndSwitch

WEnd

 

Func _ShowHide($read = 0)

Local $RowToShow = -1

Local $ColumnToShow = -1

Switch $read

Case "11"

$RowToShow = 0

$ColumnToShow = 0

Case "12"

$RowToShow = 0

$ColumnToShow = 1

Case "13"

$RowToShow = 0

$ColumnToShow = 2

Case "21"

$RowToShow = 1

$ColumnToShow = 0

Case "22"

$RowToShow = 1

$ColumnToShow = 1

EndSwitch

 

For $i = 0 To UBound($DummiesStart, $UBOUND_ROWS)-1

For $j = 0 To UBound($DummiesStart, $UBOUND_COLUMNS)-1

For $id = $DummiesStart[$i][$j] + 1 To $DummiesEnd[$i][$j] - 1

If $i = $RowToShow And $j = $ColumnToShow Then

GUICtrlSetState($id, $GUI_SHOW)

Else

GUICtrlSetState($id, $GUI_HIDE)

EndIf

Next

Next

Next

EndFunc

 

 

Opublikowano

Stary jesteś wielki. Jeszcze jedno. Na podstawie tego co będzie w tych dwóch combo chciałbym aby przekierowywało po wciśnięciu "OK" do jakiejś funkcji i na podstawie tego co będzie w np impucie niżej chciałbym aby jakaś zmienna zmieniła swoją wartość w tej funkcji.

Opublikowano

;>

#include <GUIConstants.au3>
#include <GuiComboBox.au3>
#include <AutoItConstants.au3>
#include <WinAPI.au3>

GUICreate("MPC",290,260)
$hButton = GUICtrlCreateButton("OK", 100,200, 100, 25)
GUICtrlCreateLabel("A: ", 8, 25, 60, 20)
GUICtrlCreateLabel("B: ", 8, 55, 60, 20)

$hCombo= GUICtrlCreateCombo("1", 70, 20, 200, -1, $CBS_DROPDOWNLIST)
GUICtrlSetData($hCombo, "2|3|4", "1")

$hCombo1=GUICtrlCreateCombo("11", 70, 50, 200, -1, $CBS_DROPDOWNLIST)
GUICtrlSetData(-1, "12|13|14", "11")

Global $DummiesStart[2][3], $DummiesEnd[2][3]

$DummiesStart[0][0] = GUICtrlCreateDummy()
#Region 1-11
 $a = GUICtrlCreateInput("", 70, 120, 210, 20)
GUICtrlCreateLabel("C:",10, 125)
 $b = GUICtrlCreateInput("", 70, 150, 210, 20)
GUICtrlCreateLabel("D:",10, 155)
#EndRegion 1-11
$DummiesEnd[0][0] = GUICtrlCreateDummy()

$DummiesStart[0][1] = GUICtrlCreateDummy()
#Region 1-12
 $c = GUICtrlCreateInput("", 70, 120, 210, 20)
GUICtrlCreateLabel("E:",10, 125)
 $d = GUICtrlCreateInput("", 70, 150, 210, 20)
GUICtrlCreateLabel("F:",10, 155)
#EndRegion 1-12
$DummiesEnd[0][1] = GUICtrlCreateDummy()

$DummiesStart[0][2] = GUICtrlCreateDummy()
#Region 1-13
 $e = GUICtrlCreateInput("", 70, 120, 210, 20)
GUICtrlCreateLabel("G:",10, 125)
 $f = GUICtrlCreateInput("", 70, 150, 210, 20)
GUICtrlCreateLabel("H:",10, 155)
#EndRegion 1-13
$DummiesEnd[0][2] = GUICtrlCreateDummy()

$DummiesStart[1][0] = GUICtrlCreateDummy()
#Region 2-21
 $g = GUICtrlCreateCheckbox("2-21", 70, 120, 100, 20)
 $h = GUICtrlCreateCheckbox("2-21", 70, 150, 110, 20)
#EndRegion 2-21
$DummiesEnd[1][0] = GUICtrlCreateDummy()

$DummiesStart[1][1] = GUICtrlCreateDummy()
#Region 2-22
 $i = GUICtrlCreateCheckbox("2-22", 70, 120, 100, 20)
 $j = GUICtrlCreateCheckbox("2-22", 70, 150, 110, 20)
#EndRegion 2-22
$DummiesEnd[1][1] = GUICtrlCreateDummy()

GUISetState(@SW_SHOW)
_ShowHide(GUICtrlRead($hCombo1))

While 1
	$msg = GUIGetMsg()
    Switch $msg
		Case $GUI_EVENT_Close
			ExitLoop
		Case $hButton
			OKClicked(GUICtrlRead($hCombo), GUICtrlRead($hCombo1))
		Case $hCombo
			_GUICtrlComboBox_ResetContent ($hCombo1)
			Switch GUICtrlRead($hCombo)
				Case "1"
					GUICtrlSetData($hCombo1, "11|12|13|14")
					_GUICtrlComboBox_SetCurSel($hCombo1, 0)
					_ShowHide(GUICtrlRead($hCombo1))
				Case "2"
					GUICtrlSetData($hCombo1, "21|22|23|24")
					_GUICtrlComboBox_SetCurSel($hCombo1, 0)
					_ShowHide(GUICtrlRead($hCombo1))
				Case "3"
					GUICtrlSetData($hCombo1, "31|32|33|34")
					_GUICtrlComboBox_SetCurSel($hCombo1, 0)
					_ShowHide(GUICtrlRead($hCombo1))
				Case "4"
					GUICtrlSetData($hCombo1, "41|42|43|44")
					_GUICtrlComboBox_SetCurSel($hCombo1, 0)
					_ShowHide(GUICtrlRead($hCombo1))
			EndSwitch

		Case $hCombo1
			_ShowHide(GUICtrlRead($hCombo1))

	EndSwitch
WEnd

Func OKClicked($comboContent, $combo1Content)
	Local $inputContent = ""
	For $i = 0 To UBound($DummiesStart, $UBOUND_ROWS)-1
		For $j = 0 To UBound($DummiesStart, $UBOUND_COLUMNS)-1
			For $id = $DummiesStart[$i][$j] + 1 To $DummiesEnd[$i][$j] - 1
				If GUICtrlGetState($id) = 80 And  _WinAPI_GetClassName($Id) == "Edit" Then
					$inputContent = GUICtrlRead($id+1) & " " & GUICtrlRead($id)
					ExitLoop 3
				EndIf
			Next
		Next
	Next

	If $comboContent == "1" And $combo1Content == "11" Then
		JedenJedenascie($inputContent)
	ElseIf $comboContent == "1" And $combo1Content == "12" Then
		JedenDwanascie($inputContent)
	EndIf

EndFunc

Func JedenJedenascie($txt)
	MsgBox(0, "", "Func JedenJedenascie" & @CRLF & "Zawartosc input " & $txt)
EndFunc

Func JedenDwanascie($txt)
	MsgBox(0, "", "Func JedenDwanascie" & @CRLF & "Zawartosc input " & $txt)
EndFunc

Func _ShowHide($read = 0)
	Local $RowToShow = -1
	Local $ColumnToShow = -1
	Switch $read
		Case "11"
			$RowToShow = 0
			$ColumnToShow = 0
		Case "12"
			$RowToShow = 0
			$ColumnToShow = 1
		Case "13"
			$RowToShow = 0
			$ColumnToShow = 2
		Case "21"
			$RowToShow = 1
			$ColumnToShow = 0
		Case "22"
			$RowToShow = 1
			$ColumnToShow = 1
	EndSwitch

	For $i = 0 To UBound($DummiesStart, $UBOUND_ROWS)-1
		For $j = 0 To UBound($DummiesStart, $UBOUND_COLUMNS)-1
			For $id = $DummiesStart[$i][$j] + 1 To $DummiesEnd[$i][$j] - 1
				If $i = $RowToShow And $j = $ColumnToShow Then
					GUICtrlSetState($id, $GUI_SHOW)
				Else
					GUICtrlSetState($id, $GUI_HIDE)
				EndIf
			Next
		Next
	Next
EndFunc 

 

 

Zarchiwizowany

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

×
×
  • Dodaj nową pozycję...