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] średniej klasy z kodem


Rekomendowane odpowiedzi

Opublikowano

Witam, jestem początkującym "skrypterem" w AutoIt. Proszę o pomoc i jeśli łaska naprawienie kodu poniżej

 

 

 

#include
#include
#include
#include
#include
#Region ### START Koda GUI section ### Form=D:\AutoIt Projects\koda\Forms\Kalkulator.kxf
$kalkulator = GUICreate("kalkulator", 255, 107, 393, 269)
$cyf1 = GUICtrlCreateInput("", 0, 24, 57, 21, BitOR($GUI_SS_DEFAULT_INPUT,$ES_CENTER,$ES_NUMBER))
$cyf2 = GUICtrlCreateInput("", 96, 24, 57, 21, BitOR($GUI_SS_DEFAULT_INPUT,$ES_CENTER,$ES_NUMBER))
$wynik5 = GUICtrlCreateInput("", 192, 24, 49, 21, BitOR($GUI_SS_DEFAULT_INPUT,$ES_CENTER,$ES_READONLY,$ES_NUMBER))
$plus = GUICtrlCreateButton("+", 16, 64, 27, 25)
$minus = GUICtrlCreateButton("-", 48, 64, 27, 25)
$mnozenie = GUICtrlCreateButton("*", 88, 64, 27, 25)
$dzielenie = GUICtrlCreateButton("/", 120, 64, 27, 25)
$rownasie = GUICtrlCreateButton("=", 160, 64, 59, 25)
$rowna = GUICtrlCreateLabel("=", 160, 24, 33, 17)
$labznak = GUICtrlCreateLabel("", 64, 24, 27, 17)
Dim $kalkulator_AccelTable[5][2] = [["{F3}", $plus],["{F4}", $minus],["{F5}", $mnozenie],["{F6}", $dzielenie],["{F2}", $rownasie]]
GUISetAccelerators($kalkulator_AccelTable)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

$msg=GUIGetMsg()
While $msg <> $GUI_EVENT_CLOSE
$msg=GUIGetMsg()
Switch $msg
Case $GUI_EVENT_CLOSE
Exit

EndSwitch
WEnd
Select
Case $msg = $plus
GUICtrlCreateButton($labznak, "+")

Case $msg = $minus
GUICtrlCreateButton($labznak, "-")

case $msg = $mnozenie
GUICtrlCreateButton($labznak, "*")

Case $msg = $dzielenie
GUICtrlCreateButton($labznak, "/")

Case $msg = $rowna
$znak = GuiCtrlread($labznak)
$liczba1 = GuiCtrlRead($cyf1)
$liczba2 = GuiCtrlRead($cyf2)
Select

Case $znak = "+"
$wynik= $liczba1+$liczba2
GUICtrlSetData($rowno, $wynik)
case $znak = "-"
$wynik = $liczba1-$liczba2
GUICtrlSetData($rowno, $wynik)
case $znak = "*"
$wynik= $liczba1*$liczba2
GUICtrlSetData($rowno, $wynik)
case $znak = "/"
If $cyf2 = 0 then
msgbox(0, "Nie da się podzielić", "Nie dziel przez zero cholero")
Else
$wynik = $liczba/$liczba2
GUICtrlSetData($rowno, $wynik)
EndIf
EndSelect
EndSelect


 


1517585546.png

 

Daj + za internet :D

Opublikowano
GUICtrlCreateButton($labznak, "+")

WAT?

Wiesz wogóle jakie parametry przyjmuje GUICtrlCreateButton?

F1 i google nie gryzą.

Po drugie musisz zadeklarowac zmienne a przynajmiej te które wywala ci kompilator że nie są za deklarowane, np. tak:
Local $rowno, $liczba

 

Po trzecie wystarcza tylko 3 includy:

#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
Opublikowano

Poprawiony prosze

 

#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#region ### START Koda GUI section ### Form=D:\AutoIt Projects\koda\Forms\Kalkulator.kxf
$kalkulator = GUICreate("kalkulator", 255, 107, 393, 269)
$cyf1 = GUICtrlCreateInput("", 16, 24, 57, 21, BitOR($GUI_SS_DEFAULT_INPUT, $ES_CENTER, $ES_NUMBER))
$cyf2 = GUICtrlCreateInput("", 88, 24, 57, 21, BitOR($GUI_SS_DEFAULT_INPUT, $ES_CENTER, $ES_NUMBER))
$wynik5 = GUICtrlCreateInput("", 172, 24, 67, 21, BitOR($GUI_SS_DEFAULT_INPUT, $ES_CENTER, $ES_READONLY, $ES_NUMBER))
$plus = GUICtrlCreateButton("+", 16, 64, 27, 25)
$minus = GUICtrlCreateButton("-", 48, 64, 27, 25)
$mnozenie = GUICtrlCreateButton("*", 88, 64, 27, 25)
$dzielenie = GUICtrlCreateButton("/", 120, 64, 27, 25)
$rowna = GUICtrlCreateLabel("=", 153, 25, 16, 17)
GUISetState(@SW_SHOW)
#endregion ### END Koda GUI section ###

$msg = GUIGetMsg()
While $msg <> $GUI_EVENT_CLOSE
	$msg = GUIGetMsg()
	Switch $msg
		Case $GUI_EVENT_CLOSE
			Exit
		Case $plus
			GUICtrlSetData($wynik5, oblicz(GUICtrlRead($cyf1), "+", GUICtrlRead($cyf2)))
		Case $minus
			GUICtrlSetData($wynik5, oblicz(GUICtrlRead($cyf1), "-", GUICtrlRead($cyf2)))
		Case $mnozenie
			GUICtrlSetData($wynik5, oblicz(GUICtrlRead($cyf1), "*", GUICtrlRead($cyf2)))
		Case $dzielenie
			GUICtrlSetData($wynik5, oblicz(GUICtrlRead($cyf1), "/", GUICtrlRead($cyf2)))
	EndSwitch
WEnd

Func oblicz($par, $par2, $par3)
	Switch $par2
		Case "+"
			Return $par + $par3
		Case "-"
			Return $par - $par3
		Case "*"
			Return $par * $par3
		Case "/"
			Return $par / $par3
	EndSwitch
EndFunc   ;==>oblicz

stopka.webp

Opublikowano

 

GUICtrlCreateButton($labznak, "+")

 

Po drugie musisz zadeklarowac zmienne a przynajmiej te które wywala ci kompilator że nie są za deklarowane, np. tak:
Local $rowno, $liczba

 

Po trzecie wystarcza tylko 3 includy:

#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

Mój błąd, powinno być GUICtrlSetData. Inlcludy mi koda podała, żadnych nie dodawałem ani nie usuwałem.

 

 

Poprawiony prosze

 

#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#region ### START Koda GUI section ### Form=D:\AutoIt Projects\koda\Forms\Kalkulator.kxf
$kalkulator = GUICreate("kalkulator", 255, 107, 393, 269)
$cyf1 = GUICtrlCreateInput("", 16, 24, 57, 21, BitOR($GUI_SS_DEFAULT_INPUT, $ES_CENTER, $ES_NUMBER))
$cyf2 = GUICtrlCreateInput("", 88, 24, 57, 21, BitOR($GUI_SS_DEFAULT_INPUT, $ES_CENTER, $ES_NUMBER))
$wynik5 = GUICtrlCreateInput("", 172, 24, 67, 21, BitOR($GUI_SS_DEFAULT_INPUT, $ES_CENTER, $ES_READONLY, $ES_NUMBER))
$plus = GUICtrlCreateButton("+", 16, 64, 27, 25)
$minus = GUICtrlCreateButton("-", 48, 64, 27, 25)
$mnozenie = GUICtrlCreateButton("*", 88, 64, 27, 25)
$dzielenie = GUICtrlCreateButton("/", 120, 64, 27, 25)
$rowna = GUICtrlCreateLabel("=", 153, 25, 16, 17)
GUISetState(@SW_SHOW)
#endregion ### END Koda GUI section ###

$msg = GUIGetMsg()
While $msg <> $GUI_EVENT_CLOSE
	$msg = GUIGetMsg()
	Switch $msg
		Case $GUI_EVENT_CLOSE
			Exit
		Case $plus
			GUICtrlSetData($wynik5, oblicz(GUICtrlRead($cyf1), "+", GUICtrlRead($cyf2)))
		Case $minus
			GUICtrlSetData($wynik5, oblicz(GUICtrlRead($cyf1), "-", GUICtrlRead($cyf2)))
		Case $mnozenie
			GUICtrlSetData($wynik5, oblicz(GUICtrlRead($cyf1), "*", GUICtrlRead($cyf2)))
		Case $dzielenie
			GUICtrlSetData($wynik5, oblicz(GUICtrlRead($cyf1), "/", GUICtrlRead($cyf2)))
	EndSwitch
WEnd

Func oblicz($par, $par2, $par3)
	Switch $par2
		Case "+"
			Return $par + $par3
		Case "-"
			Return $par - $par3
		Case "*"
			Return $par * $par3
		Case "/"
			Return $par / $par3
	EndSwitch
EndFunc   ;==>oblicz

To nie to o co mi chodziło, nie ma znaku równa się, nie pokazuje się znak pomiędzy cyframi. Niemniej dzięki za chęci ;)

1517585546.png

 

Daj + za internet :D

Opublikowano

kornel123 My nie dajemy gotowców ja ci to tak poprawiłem żeby mniej więcej działało resztę sobie sam dokończysz a żeby zmienił ci się tam znak użyj GuiCtrlSetData($labeljakistam,"+ - lub co tam chcesz)"

stopka.webp

Opublikowano

kornel123 My nie dajemy gotowców ja ci to tak poprawiłem żeby mniej więcej działało resztę sobie sam dokończysz a żeby zmienił ci się tam znak użyj GuiCtrlSetData($labeljakistam,"+ - lub co tam chcesz)"

 

Ten Twój kod jest dziwny, bo w żadnym kalkulatorze nie ma tak, że ani nie ma znaku równości, ani w ogóle nie musi być równania by otrzymać wynik.

Co więcej każdy z poszczególnych znaków jest sobą i równa się jednocześnie, a to nie jest po mojej myśli.

 

Pokaż mi błędy w moim, a nie piszesz nowy kalkulator (gotowiec), bo jak napisałeś wcześniej "gotowców nie dajecie".

1517585546.png

 

Daj + za internet :D

Opublikowano

kornel123 w twoim kalkulatorze jest tyle błędów że nie opłaca się pokazywać co jest źle. Napisałeś "nie musi być równania by otrzymać wynik." ja tylko podałem ci szkic tego kalkulatora napisanego w 5 min resztę sam sobie wykończ .

stopka.webp

Opublikowano

kornel123 w twoim kalkulatorze jest tyle błędów że nie opłaca się pokazywać co jest źle. Napisałeś "nie musi być równania by otrzymać wynik." ja tylko podałem ci szkic tego kalkulatora napisanego w 5 min resztę sam sobie wykończ .

Opłaca się pokazywać, chłopak nowy z AutoIT, to mu pomożemy.

Gotowca też mu nie dam ale pokaże błędy.

 

@topic

Oprócz tych błędów z mojego komentarza, to widze że głównym problemem jest ta pętla:

 

$msg=GUIGetMsg()
While $msg <> $GUI_EVENT_CLOSE
$msg=GUIGetMsg()
Switch $msg
Case $GUI_EVENT_CLOSE
Exit

EndSwitch
WEnd

A więc omówmy ją krótko:

 

While $msg <> $GUI_EVENT_CLOSE

Ta linia mówi że pętla zakończy się gdy zostanie naciśnięty guzik "x", czyli ten do wyłącznia programu na górnej belce.

Natomiast ten kod mówi że gdy naciśnie się guzik "X" wtedy program sie wyłącza.

Switch $msg
Case $GUI_EVENT_CLOSE
Exit
EndSwitch

A to oznacza że pętla trwa dopóki nie wyłączymy programu, a kod za nią nigdy sie nie wykona, co też oznacza to że nigdy nie dojdzie do Selecta sprawdzającego czy został naciśnięty button.

Czyli kod po linijce 31 sie nie wykona.

I jeżeli to poprawisz to kod powinien działać.

Opublikowano

Opłaca się pokazywać, chłopak nowy z AutoIT, to mu pomożemy.

Gotowca też mu nie dam ale pokaże błędy.

 

@topic

Oprócz tych błędów z mojego komentarza, to widze że głównym problemem jest ta pętla:

 

$msg=GUIGetMsg()
While $msg <> $GUI_EVENT_CLOSE
$msg=GUIGetMsg()
Switch $msg
Case $GUI_EVENT_CLOSE
Exit

EndSwitch
WEnd

A więc omówmy ją krótko:

 

While $msg <> $GUI_EVENT_CLOSE

Ta linia mówi że pętla zakończy się gdy zostanie naciśnięty guzik "x", czyli ten do wyłącznia programu na górnej belce.

Natomiast ten kod mówi że gdy naciśnie się guzik "X" wtedy program sie wyłącza.

Switch $msg
Case $GUI_EVENT_CLOSE
Exit
EndSwitch

A to oznacza że pętla trwa dopóki nie wyłączymy programu, a kod za nią nigdy sie nie wykona, co też oznacza to że nigdy nie dojdzie do Selecta sprawdzającego czy został naciśnięty button.

Czyli kod po linijce 31 sie nie wykona.

I jeżeli to poprawisz to kod powinien działać.

 

Opłaca się pokazywać, chłopak nowy z AutoIT, to mu pomożemy.

Gotowca też mu nie dam ale pokaże błędy.

 

@topic

Oprócz tych błędów z mojego komentarza, to widze że głównym problemem jest ta pętla:

 

$msg=GUIGetMsg()
While $msg <> $GUI_EVENT_CLOSE
$msg=GUIGetMsg()
Switch $msg
Case $GUI_EVENT_CLOSE
Exit

EndSwitch
WEnd

A więc omówmy ją krótko:

 

While $msg <> $GUI_EVENT_CLOSE

Ta linia mówi że pętla zakończy się gdy zostanie naciśnięty guzik "x", czyli ten do wyłącznia programu na górnej belce.

Natomiast ten kod mówi że gdy naciśnie się guzik "X" wtedy program sie wyłącza.

Switch $msg
Case $GUI_EVENT_CLOSE
Exit
EndSwitch

A to oznacza że pętla trwa dopóki nie wyłączymy programu, a kod za nią nigdy sie nie wykona, co też oznacza to że nigdy nie dojdzie do Selecta sprawdzającego czy został naciśnięty button.

Czyli kod po linijce 31 sie nie wykona.

I jeżeli to poprawisz to kod powinien działać.

Dzięki wielkie, już mi działa ;)

a tak pytanie z innej beczki przy okazji

http://www.mpcforum.pl/topic/1032975-gui-zawsze-na-wierzchu/

1517585546.png

 

Daj + za internet :D

Zarchiwizowany

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

×
×
  • Dodaj nową pozycję...