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

Rekomendowane odpowiedzi

Opublikowano

 

#include <gdiplus.au3>
#include <array.au3>
_GDIPlus_Startup()
Func _Radian($nDegrees)
Return $nDegrees / 57.2957795130823
EndFunc   ;==>_Radian
Global $iKat = 180
Global $iPozX = (@DesktopWidth - 50) / 2
Global $iPozY = (@DesktopHeight - 100) / 2
Global $hPen = _GDIPlus_PenCreate()
Global $iPenColor = 0xFF000000
Global $iPenWidth = 1
Global $hGraphic
Global $bPodnies = False
$hWnd = GUICreate("LOGO", @DesktopWidth - 50, @DesktopHeight - 100)
GUISetState()
GUICreate("Polecenia", 400, 40)
$hWyslij = GUICtrlCreateButton("Wyslij", 10, 10, 40, 20)
$hPolecenie = GUICtrlCreateInput("", 60, 10, 330, 20)
GUISetState()
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hWnd)
_GDIPlus_GraphicsClear($hGraphic, 0xFFFFFFFF)
Dim $AccelKeys[1][2] = [["{ENTER}", $hWyslij]]
GUISetAccelerators($AccelKeys)
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
	Case $hWyslij
		Local $sPolecenie = '', $iLiczNumbers = 0
		$sStringg = GUICtrlRead($hPolecenie)
		$sString = StringSplit($sStringg, " ")
;~			 _ArrayDisplay($sString)
		For $i = 1 To $sString[0]
			If StringIsDigit($sString[$i]) Then
				$iLiczNumbers += 1
				If $iLiczNumbers = 1 Then $sPolecenie &= "(" & $sString[$i]
				$czy = False
				If $i < $sString[0] Then
					If Not StringIsDigit($sString[$i + 1]) Then $czy = 1
				EndIf
				If $i = $sString[0] Or $czy Then
;~						 MsgBox(64, '', $sPolecenie)
					If $iLiczNumbers = 3 Or $iLiczNumbers = 4 Then
						If $i < $sString[0] Then

							Execute($sPolecenie & ")")
						Else
							Execute($sPolecenie & ',' & $sString[$i] & ")")
						EndIf
						$iLiczNumbers = 0
						$sPolecenie = ''
					ElseIf $iLiczNumbers = 1 Then

						Execute($sPolecenie & ")")
						$iLiczNumbers = 0
						$sPolecenie = ''
					EndIf
				EndIf
				If $i + 1 < $sString[0] Then
					If Not StringIsDigit($sString[$i + 1]) Then

						Execute($sPolecenie & $sString[$i] & ")")
						$iLiczNumbers = 0
						$sPolecenie = ''
					Else
						If $iLiczNumbers > 0 Then
							$sPolecenie &= ',' & $sString[$i + 1]
;~							 MsgBox(64, '1', $sPolecenie)
						EndIf

					EndIf
				EndIf

			Else

				If $iLiczNumbers = 0 And ($sString[$i] = 'cs' Or $sString[$i] = 'wroc' Or $sString[$i] = 'pod' Or $sString[$i] = 'opu') Then Execute($sString[$i] & "()")
				$sPolecenie = $sString[$i]
			EndIf
		Next
		$sString &= ")"
		Execute($sString)
		GUICtrlSetData($hPolecenie, "")
	Case -3
		Exit
EndSwitch
WEnd
Func np($iValue)
If $bPodnies = False Then _GDIPlus_GraphicsDrawLine($hGraphic, Round($iPozX), Round($iPozY), Round($iPozX + (Sin(_Radian($iKat)) * $iValue)), Round($iPozY + (Cos(_Radian($iKat)) * $iValue)), $hPen)
$iPozX += (Sin(_Radian($iKat)) * $iValue)
$iPozY += (Cos(_Radian($iKat)) * $iValue)
EndFunc   ;==>np
Func ws($iValue)
np($iValue * - 1)
EndFunc   ;==>ws
Func pw($iValue)
$iKat -= $iValue
EndFunc   ;==>pw
Func lw($iValue)
$iKat += $iValue
EndFunc   ;==>lw
Func cs()
_GDIPlus_GraphicsClear($hGraphic, 0xFFFFFFFF)
$iPozX = (@DesktopWidth - 50) / 2
$iPozY = (@DesktopHeight - 100) / 2
$iKat = 180
EndFunc   ;==>cs
Func ukp($iR, $iG, $iB, $iA = 255)
$iPenColor = '0x' & Hex($iA, 2) & Hex($iR, 2) & Hex($iG, 2) & Hex($iB, 2)
$hPen = _GDIPlus_PenCreate($iPenColor, $iPenWidth)
EndFunc   ;==>ukp
Func ugp($iValue)
$iPenWidth = $iValue
$hPen = _GDIPlus_PenCreate($iPenColor, $iPenWidth)
EndFunc   ;==>ugp
Func losowa($iValueMin, $iValueMax)
Return Random($iValueMin, $iValueMax, 1)
EndFunc   ;==>losowa
Func wroc()
If $bPodnies = False Then _GDIPlus_GraphicsDrawLine($hGraphic, Round($iPozX), Round($iPozY), (@DesktopWidth - 50) / 2, (@DesktopHeight - 100) / 2, $hPen)
$iPozX = (@DesktopWidth - 50) / 2
$iPozY = (@DesktopHeight - 100) / 2
EndFunc   ;==>wroc
Func pod()
$bPodnies = True
EndFunc   ;==>pod
Func opu()
$bPodnies = False
EndFunc   ;==>opu

 

Tak z nudów w 2 godzinki. Piszę to dla nauki. Brakuje jeszcze paru funkcji (powtórz, jeśli, losowa i tekstowe) Nie ma także możliwości tworzenia procedur, ale będę ten kod ulepszał w wolnym czasie.

Ulepszyłem pare funcji o dodatkowe parametry. Wykorzystałem execute, dobrodziejstwo dołącznia interpretera języka do exe ;p

ukp ma teraz 3 parametry wymagane i 1 dodatkowy, np.

ukp 255 0 0 127

ew. bez przezroczystości

ukp 255 0 0

 

Spowoduje to zmienienie koloru pisaka na czerwony w polowie przezroczysty

czyli poszczególne parametry

1. Kolor czerwony 0-255

2. Kolor zielony 0-255

3. Kolor niebieski 0-255

4. Kolor alpha 0-255 (przezroczystość) domyślnie 255 (brak prezezroczystości)

 

Piszcie błędy, itp.

Jeszcze nie tworzyłem sekcji sprawdzającej poprawność, po prostu przy błędnym kodzie nie wykona polecenia

 

@down. pobawię się WM_PAINT i to ogarnę.

Nie ogarniam tego. Próbowałem przed zminimalizowaniem (a w zasadzie tuż po) zapisać obraz do bitmapy, a po pokazaniu się okna przerzucić ją na hgraphic. Jednak nic się nie dzieję.

Prosiłbym kogoś o napisanie tego fragmentu. Z góry dzięki.

Co do samego przesuwania okna polecenia, to zrobię to jakoś inaczej, aby nie było osobnego okna, wtedy problem zniknie.

PS. Na win 7 poprawili to i nie rozmazuje.

  • 8 miesięcy temu...
Opublikowano · Ukryte przez 4ggr35510n, 13 Sierpnia 2012 - Brak powodu
Ukryte przez 4ggr35510n, 13 Sierpnia 2012 - Brak powodu

.

BDrwh.png?1

Sygnaturka by FructoN.

FructoN jest tylko jeden.

Zarchiwizowany

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

×
×
  • Dodaj nową pozycję...