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

AutoIT Licznik?


Rekomendowane odpowiedzi

Opublikowano

Witam, ostatnio z czystej ciekawości wpadłem na pomysł potrenowania troche i pomyślałem, aby zrobic w GUI licznik samochodowy. Konkretniej to samą obracającą sie wskazówke. Mógłby mi ktoś mniej wiecej przedstawić zarys takiego kodu ? Albo w punktach wypisac funkcje po kolei bo niestety ja sie pogubiłem podczas myslenia o tym.. :/

Opublikowano

Nie ma w AU3 mozliwosci wyświetlania obrazków w GUI ? Chodziło mi bardziej o pomoc przy kodzie obracającym dany objekt lub coś w tym stylu.

Opublikowano

Jest, GID+ jak napisano wyżej. Chyba że sobie zrobisz obrazki wskazówek przesunięte co kawałek  i będziesz podmieniał po kolei.

 

Można użyć też WinAPI, directX, irrlichta, directdraw ( to chyba w gdi+ jest )  itp 

I jeszcze autoitowy  prograsbar do liniowego pokazania, albo normalne cyferki liczika 

 

prosty przykład :

 #include <GUIConstantsEx.au3>
#include <GDIPlus.au3>

Local $aGui[13], $aPoints[13][2] = [[12]]

For $i = 1 To 12
$aPoints[$i][0] = Cos(5 * $i / 15) * @DesktopHeight / 3 + @DesktopWidth / 2
$aPoints[$i][1] = Sin(5 * $i / 15) * @DesktopHeight / 3 + @DesktopHeight / 2
$aGui[$i] = GUICreate($i, 180, 160, $aPoints[$i][0] - 60, $aPoints[$i][1] - 50)
GUISetBkColor(0xA0)
GUISetState()
Next

sleep(1000)

_GDIPlus_Startup()
$hMatrix = _GDIPlus_MatrixCreate()
_GDIPlus_MatrixTranslate($hMatrix, -@DesktopWidth / 2, -@DesktopHeight / 2)
_GDIPlus_MatrixRotate($hMatrix, 1, True)
_GDIPlus_MatrixTranslate($hMatrix, @DesktopWidth / 2, @DesktopHeight / 2, True)

Do
Sleep(40)
_GDIPlus_MatrixTransformPoints($hMatrix, $aPoints)
For $i = 1 To 12
WinMove($aGui[$i], "", $aPoints[$i][0] - 60, $aPoints[$i][1] - 50)
Next
Until GUIGetMsg() = $GUI_EVENT_CLOSE

_GDIPlus_MatrixDispose($hMatrix)
_GDIPlus_Shutdown()

Ok, mam i zegarek  : 

DrawHand  to chyba wskazówka 


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


Dim $H = 400, $V = 400, $alfa = 30, $LS = 165, $LM =165, $LH = 140, $sec = -1
Dim $col_b = 0x666666, $Col_m = 0xFFFF0000, $Col_s = 0xFF00FFFF, $Col_c = 0xFF00FF00
$hGUI = GUICreate("GDI+: Zegar analogowo-cyfrowy", $H, $V, -1,-1)
GUISetBkColor($col_
GUISetState()
_GDIPlus_Startup()
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)
_GDIPlus_GraphicsSetSmoothingMode($hGraphic, 2)
$hPen = _GDIPlus_PenCreate($Col_m, 6)
$hPen1 = _GDIPlus_PenCreate($Col_s, 4)
_GDIPlus_PenSetEndCap($hPen1, $GDIP_LINECAPROUNDANCHOR)
$hFormat = _GDIPlus_StringFormatCreate()
_GDIPlus_StringFormatSetAlign($hFormat, 1)
$hFamily = _GDIPlus_FontFamilyCreate("Arial")
$hFont = _GDIPlus_FontCreate($hFamily, 38, 0, 0)
$tLayout = _GDIPlus_RectFCreate(-90, 50, 180, 40)
$hBrush = _GDIPlus_BrushCreateSolid($Col_c)
$Rect = _GDIPlus_RectFCreate(-$H/2+20, -$V/2+20, $H-20, $V-20)
$hBrush2 = _GDIPlus_BrushCreateGradient($Rect, 0xFFFEFEFE, 0xFF000000, 3)
$hMatrix = _GDIPlus_MatrixCreate()
_GDIPlus_MatrixTranslate($hMatrix, $H/2, $V/2)
_GDIPlus_GraphicsSetTransform($hGraphic, $hMatrix)


Do
   If $sec <> @ Then
      $hour = @HOUR
      $min = @
      $sec = @
      _GDIPlus_GraphicsFillEllipse($hGraphic, -170, -170, 340, 340, $hBrush2)
      _GDIPlus_GraphicsDrawStringEx($hGraphic, $hour & ":" & $min & ":" & _
                                 $sec, $hFont, $tLayout, $hFormat, $hBrush)
      DrawHand($hGraphic, $LH, $hour*5+$min/12, $hPen)
      DrawHand($hGraphic, $LM, $min, $hPen)
      DrawHand($hGraphic, $LS, $sec, $hPen1)
      For $i = 0 to 360-$alfa Step $alfa
         _GDIPlus_MatrixRotate($hMatrix, $alfa)
         _GDIPlus_GraphicsSetTransform($hGraphic, $hMatrix)
         _GDIPlus_GraphicsFillEllipse($hGraphic, 180, -5, 10, 10, $hBrush)
      Next
   EndIf
Until GUIGetMsg() = $GUI_EVENT_CLOSE


_GDIPlus_StringFormatDispose($hFormat)
_GDIPlus_FontDispose($hFont)
_GDIPlus_FontFamilyDispose($hFamily)
_GDIPlus_PenDispose($hPen)
_GDIPlus_PenDispose($hPen1)
_GDIPlus_BrushDispose($hBrush)
_GDIPlus_BrushDispose($hBrush2)
_GDIPlus_MatrixDispose($hMatrix)
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_Shutdown()


Func DrawHand($hGraphic, $L, $poz, $hPen)
   Local $alfa = -3.1415*($poz+15)/30
   Local $x = -$L*Cos($alfa), $y = $L*Sin($alfa)
   _GDIPlus_GraphicsDrawLine($hGraphic, $x, $y, 0, 0, $hPen)
EndFunc


Func _GDIPlus_BrushCreateGradient($sRect, $iArgb1 = 0xFF000000, $iArgb2 = 0xFFFFFFFF, _
                                      $LinearGradientMode = 0, $WrapMode = 0)
    Local $aRet
    If $iArgb1 = -1 Or $iArgb1 = Default Then $iArgb1 = 0xFF000000
    If $iArgb2 = -1 Or $iArgb2 = Default Then $iArgb2 = 0xFFFFFFFF
    If $LinearGradientMode = -1 Or Default Then $LinearGradientMode = 0
    If $WrapMode = -1 Or Default Then $WrapMode = 0
    $aRet = DllCall("gdiplus.dll", "int", "GdipCreateLineBrushFromRect", "struct*", $sRect, "int", $iArgb1, _
                                "int", $iArgb2, "int", $LinearGradientMode, "int", $WrapMode, "int*", 0)
    Return $aRet[6]
EndFunc

Mózg to nie mydło; nie ubędzie Ci go, gdy go użyjesz.

Zarchiwizowany

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

×
×
  • Dodaj nową pozycję...