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

nieskończona zmiana obrazka


Rekomendowane odpowiedzi

Opublikowano

Witam, po raz kolejny potrzebuję pomocy. Chcę zrobić tak, że po podanym czasie pierwszy obrazek zmieni się na drugi i tak w kółko. Cały czas ma to zachodzić podczas pracy programu.

 

coś takiego mam (to jest tylko wycinek) pliki są w jednym katalogu, więc nie podałem całej ścieżki

$Button1 = GUICtrlCreateButton("Start", 8, 48, 51, 25)
$Button2 = GUICtrlCreateButton("Stop", 64, 48, 51, 25)
$Pic1 = GUICtrlCreatePic("pic1.jpg", 72, 16, 28, 28)

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit

		Case $Button1
			Do
				GUICtrlSetImage($Pic1, "pic2.jpg")
				sleep(1000)
				GUICtrlSetImage($Pic1, "pic1.jpg")
			Until	$nMsg=$Button2 OR $nMsg=$GUI_EVENT_CLOSE 
	EndSwitch
WEnd

dlaczego mi to nie działa i dlaczego po wciśnięciu stop lub krzyżyka program dalej działa? co jest nie tak?

Opublikowano

Z wycinka ciężko odczytać intencje twórcy xD

func _Control_Event()
Switch @GUI_CtrlId
	Case $Button2
		Exit
	Case $Button1
				GUICtrlSetImage($Pic1, "pic2.jpg")
				sleep(1000)
				GUICtrlSetImage($Pic1, "pic1.jpg")
	EndSwitch
EndFunc


Przykład:

 

 

#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_UseUpx=n
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
 
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <Misc.au3>
#include <WinApi.au3>

Opt('GUIOnEventMode', 1)

Global $hUser32DLL = DllOpen('user32.dll')

#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 101, 101, 192, 142)
$Pic1 = GUICtrlCreatePic("C:\Users\Ja\Desktop\zmiana_obrazu_po_klik\pic1.jpg", 0, 0, 70, 70)
$Button1 = GUICtrlCreateButton("Start", 0, 80, 49, 17)
$Button2 = GUICtrlCreateButton("Stop", 48, 80, 49, 17)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

GUISetOnEvent($GUI_EVENT_CLOSE, '_Exit') ;
GUISetOnEvent($GUI_EVENT_PRIMARYDOWN, '_GUIDrag')

For $i = $Button1 To $Button2
GUICtrlSetOnEvent($i, '_Control_Event')
Next

AdlibRegister('_RestoreOnDesktop')

While 1
Sleep(100)
WEnd

func _Control_Event()
Switch @GUI_CtrlId
Case $Button2
Exit
Case $Button1
GUICtrlSetImage($Pic1, "pic2.jpg")
sleep(1000)
GUICtrlSetImage($Pic1, "pic1.jpg")
EndSwitch
EndFunc

Func _GUIDrag()
Local $hGUI = @GUI_WinHandle
Local $aCurInfo = GUIGetCursorInfo($hGUI)
If $aCurInfo[4] = 0 Or $aCurInfo[4] = $Pic1 Then
DllCall("user32.dll", "int", "ReleaseCapture")
_SendMessage($hGUI, $WM_NCLBUTTONDOWN, $HTCAPTION, 0)
EndIf
EndFunc ;==>_GUIDrag

Func _RestoreOnDesktop()
If _IsPressed('5B', $hUser32DLL) And _IsPressed(44, $hUser32DLL) Then
GUISetState(@SW_HIDE, $Form1)
GUISetState(@SW_SHOW, $Form1)
EndIf
EndFunc ;==>_RestoreOnDesktop

Func _Exit()
DllClose($hUser32DLL)
Exit
EndFunc ;==>_Exit

 

Z tym że pic1 i pic2 mają 70x70 pixeli, a okno 100x100.

Opublikowano

Ten Sleep tylko przeszkadza, program cały czas śpi i dlatego mała szansa, że go wyłączysz.

Skróciłem troche kod i jedna zmienna mniej:

 

$Button1 = GUICtrlCreateButton("Start", 8, 48, 51, 25)
$Button2 = GUICtrlCreateButton("Stop", 64, 48, 51, 25)
$Pic1 = GUICtrlCreatePic("pic1.jpg", 72, 16, 28, 28)
GUISetState(@SW_SHOW)
While 1
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            Exit
        Case $Button1
            Do
                GUICtrlSetImage($Pic1, "pic2.jpg")
                sleep(1000)
                GUICtrlSetImage($Pic1, "pic1.jpg")
            Until GUIGetMsg()=$Button2 OR GUIGetMsg()=$GUI_EVENT_CLOSE
    EndSwitch
WEnd
Opublikowano

chodzi mi o to, że chciałem zrobić taki myk, że podczas działania skryptu w gui pojawia się się napis "działam..." i co sekundę by z trzech robiły się dwie kropki.
próbowałem to zrobić funkcją _timer_settimer, ale za każdym razem program się zacina.


/edit:
kolejny problem :/
chciałem zrobić wyskakujący przycisk wrzucający program do traya.

global $button3

...

GUISetOnEvent($Button3, "min")
GUICtrlSetOnEvent($Button1, "butt")

...

func butt()
	Switch @GUI_CtrlId
		Case $Button2
			Exit
		Case $Button1
			GUICtrlSetImage($pic, "pic2.jpg")
			$Button3 = GUICtrlCreateButton("Hide", 8, 16, 51, 25)
			GUICtrlSetState($Button1, $gui_disable)
	EndSwitch
EndFunc


func min()
	GUISetState(@SW_HIDE)
EndFunc

 

jednak po wciśnięciu tego przycisku nic się nie dzieje

Opublikowano

Według mnie użyłeś złego argumentu czy jak to można nazwać (SW_HIDE)-według moich wiadomości to blokuje okno tak że nie można np pisać w nim ,są inne jak minimalize itp,poszperaj w tym temacie.

1387536187-U112334.png

Jeśli Ci pomogłem mógłbyś wynagrodzić lajkiem :)

Opublikowano

chciałem zrobić wyskakujący przycisk wrzucający program do traya.

 

global $button3

...

GUISetOnEvent($Button3, "min")
GUICtrlSetOnEvent($Button1, "butt")

...

func butt()
	Switch @GUI_CtrlId
		Case $Button2
			Exit
		Case $Button1
			GUICtrlSetImage($pic, "pic2.jpg")
			$Button3 = GUICtrlCreateButton("Hide", 8, 16, 51, 25)
			GUICtrlSetState($Button1, $gui_disable)
	EndSwitch
EndFunc


func min()
	GUISetState(@SW_HIDE)
EndFunc

 

jednak po wciśnięciu tego przycisku nic się nie dzieje

 

#include <Constants.au3>
#include <GUIConstants.au3>
#NoTrayIcon
Opt("TrayOnEventMode",1)
Opt("TrayMenuMode",1)
TraySetOnEvent($TRAY_EVENT_PRIMARYUP, "Minimize")


Func Minimize()
    TraySetState(2)
    GuiSetState(@SW_SHOW)
EndFunc

 

I wtedy w case robisz tylko:

Case $Button3
  GuiSetState(@SW_HIDE)
  TraySetState(1)
Opublikowano

a jeszcze tak spytam tutaj, żeby nowego tematu nie zakładać?

 

mam w skrypcie sporo hotkeysów i funkcji. to normalne, że skrypt zżera tyle cpu? (50-90%)

da się jakoś temu zaradzić?

Opublikowano

Nie, to nie jest normalne.

Albo używasz _IsKeyPressed ( którego należy NIE używać ) albo korzystasz z OnEventMode i nie dodałęś Sleep'a w głównej pętli programu.

Ta sygnatura jest pusta.

Opublikowano

nie używam _iskeypressed

mam dla każdej litery coś takiego:

 

w while 1 bez sleepa

hotkeyset("a","a")

 

i funkcje:

 

func a()
HotKeySet("a")
send("a")
HotKeySet("a", "a")
$tresc&= "a"

Zarchiwizowany

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

×
×
  • Dodaj nową pozycję...