Ah, das mit dem Dictionary hört sich ganz gut an!
Schade, dass es kein Assoziatives Array in AutoIt gibt.
Danke an euch!
MfG
qixx
Ah, das mit dem Dictionary hört sich ganz gut an!
Schade, dass es kein Assoziatives Array in AutoIt gibt.
Danke an euch!
MfG
qixx
Hallo Leute,
ist es möglich, dass ich anstatt einer Zahl im Array ein Wort hinschreibe?
Geht ja in anderen Sprachen.
Was ich meine:
[autoit]$array[Wort] = "Test"
[/autoit]Was muss ich beachten, wenn das möglich ist?
MfG
qixx
Danke, aber da klappt irgendwie gar nichts.^^
Wo z.B. wird die Variable $tagSize daklariert?
Da ist irgendwie noch ein Wurm drin. Wäre super,
wenn du mir das berichtigen könntest.
MfG
qixx
Bei Win 7 Prof x64 gehts nicht.
MfG
qixx
Genau. Da ist das mit dem Label einfacher umzusetzen.
MfG
qixx
Nein, aber achte auf die Zeit, wann unsere Beiträge gepostet wurden!
Timing!
MfG
qixx
Der Kreis war eher ein Beispiel.
Das was ich habe ist mehr ein Oval.Werde mal schauen, wie ich das mache.
Denke mal, dass ich das trotzdem mit dem Label mache.
Timing von AutoBert und mir.
Das schaut gut aus, was genau ist da denn jetzt der Trick?
MfG
qixx
Dann kann man auch den Transparenten Bereich anklicken und ziehen.
Also den um das Bild herum.
Kommt bisschen doof bei einem Kreis.
MfG
qixx
Schade.
Wollte nämlich eine transparente GUI erzeugen und dann ein GDI+ Bild als Hintergrund nehmen.
Nagut, muss ich das wohl anders regeln.
Danke!
MfG
qixx
2. Die Koordinaten des bilder "einkesseln" und dann wieder mit GUIGetCursorInfo() überprüfen ob in den Bereich des Bildes geklickt wurde
Ja, so hätte ich das sonst auch gemacht.
Hätte ja sein können, dass es eine Funktion dafür gibt.
Habe mal eben eine geschrieben.
[autoit]Func _MousePos($Links, $Oben, $Breite, $Hoehe) ;Abstand von links, Abstand von Oben, Breite, Höhe des Kastens
$pos = MouseGetPos()
If $pos[0] > $Links And _
$pos[1] > $Oben And _
$pos[0] < $Breite And _
$pos[1] < $Hoehe Then
Return True
EndIf
Return False
EndFunc
MfG
qixx
Hallo Leute,
kann ich einem GDI+ Bild $GUI_WS_EX_PARENTDRAG zuweisen?
Also dass ich mit dem meine Gui bewegen kann?
MfG
qixx
@H2112 : Wie siehts aus? Bist du wieder zu Hause?
Neue Frage: Gibt es einen Befehl mitdem ich überprüfen kann, ob ich das GDI+ Bild angeklickt habe?
MfG
qixx
Ja, dann mache ich das erstmal.
Habe vergessen, warum genau ich das mit Transparenz haben musste.
Hatte einen Grund, aber vielleicht gehts jetzt ja auch so.
Danke für Hilfe!
MfG
qixx
Edit: Wieso verwendest du _WinAPI_BitBlt um ein Bild in eine Grafik zu malen? Mit _GDIPlus_GraphicsDrawImageRect geht das ganze doch auch, und soweit ich weiß sogar mit Transparenz
Weil es ohne nicht funktionieren mag...
Hier mal mal Quellcode.
#include <GDIPlus.au3>
#include <WinAPI.au3>
#include <WindowsConstants.au3>
#include <Misc.au3>
HotKeySet("{Esc}", "_Exit")
$sText = "Hallo"
Dim $MovePic[1]
$Move_Animation = 1
$Links = True
$ImageExist = True
$hGUI = GUICreate("Test", 400, 150)
$hGUI_DC = _WinAPI_GetDC($hGUI)
$Slider = GUICtrlCreateSlider(40, 110, 201, 41)
GUICtrlSetLimit(-1, 20, 1)
GUICtrlSetData(-1, 5)
$Button = GUICtrlCreateButton("Richtung", 250, 110)
[/autoit] [autoit][/autoit] [autoit]$hBitmap = _WinAPI_CreateCompatibleBitmap($hGUI_DC, 500, 100)
$hGraphics_DC = _WinAPI_CreateCompatibleDC($hGUI_DC)
_WinAPI_SelectObject($hGraphics_DC, $hBitmap)
_GDIPlus_Startup()
$hGraphics = _GDIPlus_GraphicsCreateFromHDC($hGraphics_DC)
;~ _GDIPlus_GraphicsSetSmoothingMode($hGraphics, 2)
[/autoit] [autoit][/autoit] [autoit]Global $x = 400, $y = 0, $X2 = 0, $Y2 = 100
[/autoit] [autoit][/autoit] [autoit]$i = 0
While $ImageExist
$Image = @ScriptDir & "\images\Ausgewachsen\5000030-move-" & $i & ".png"
$ImageExist = FileExists($Image)
If $ImageExist Then
ReDim $MovePic[UBound($MovePic)+1]
$MovePic[$i+1] = _GDIPlus_ImageLoadFromFile($Image)
$i += 1
EndIf
WEnd
$Timer = TimerInit()
[/autoit] [autoit][/autoit] [autoit]GUISetState(@SW_SHOW)
While Sleep(5)
$nMsg = GUIGetMsg()
Switch $nMsg
Case -3
_Exit()
Case $Button
If $Links = True Then
$Links = False
$x += 59
Else
$Links = True
$x -= 59
EndIf
EndSwitch
[/autoit] [autoit][/autoit] [autoit]If TimerDiff($Timer) >= 100 Then
_Move(10, 0, 400, GUICtrlRead($Slider), $Links) ; Geschwindigkeit, Richtung, Breite, Abstand oben, Abstand links
$Timer = TimerInit()
EndIf
WEnd
Func _Move($Top, $Left, $MovingWidth, $Speed = 1, $Forward = True)
_GDIPlus_GraphicsClear($hGraphics, 0xFFFFFFFF)
If $Forward = True Then
$Width = _GDIPlus_ImageGetWidth($MovePic[1])
$Height = _GDIPlus_ImageGetHeight($MovePic[1])
$x -= $Speed
If $x < -$Width Then $x = $MovingWidth
Else
$Width = -_GDIPlus_ImageGetWidth($MovePic[1])
$Height = _GDIPlus_ImageGetHeight($MovePic[1])
$x += $Speed
If $x > $MovingWidth - $Width Then $x = 0
EndIf
If $Move_Animation = UBound($MovePic)-1 Then
$Move_Animation = 1
Else
$Move_Animation += 1
EndIf
_GDIPlus_GraphicsDrawImageRect($hGraphics,$MovePic[$Move_Animation], $x, 0, $Width, $Height)
_WinAPI_BitBlt($hGUI_DC, $Left, $Top, $MovingWidth, $Height, $hGraphics_DC, 0, 0, $SRCCOPY)
EndFunc
Func _Exit()
_WinAPI_DeleteDC($hGraphics_DC)
_WinAPI_ReleaseDC($hGUI, $hGUI_DC)
_WinAPI_DeleteObject($hBitmap)
_GDIPlus_GraphicsDispose($hGraphics)
_GDIPlus_Shutdown()
Exit
EndFunc ;==>_Exit
MfG
qixx
Hallo Leute,
habe gerade mit GDI+ angefangen und habe eine sich immer
aktualisierene Graphic, auf die ein Image (PNG) gepackt wird. (_WinAPI_BitBlt)
Ich hätte aber gerne, dass der Hintergrund, also Graphic, transparent
ist. Wie ist das möglich?
Habe es schon mit
[autoit]_GDIPlus_GraphicsClear($hGraphics, 0xFFFFFFFF)
[/autoit]
probiert, was aber leider nicht geklappt hat.
Sinn der Tranzparenz ist, dass ich ein Hintergrundbild habe.
Danke für Hilfe.
MfG
qixx
Habs geschafft. Danke.
MfG
qixx
Irgendwie bekomme ich das nicht gebacken. xD
Ich weiß auch gar nicht, was ich bei
_GDIPlus_GraphicsDrawImageRect
[/autoit]
in die ersten beiden Parameter eintragen soll..
Einmal Grafik und einmal Bild? oO
Und die Beispiele in der Hilfe helfen mir leider auch
nicht weiter...
Könnte mir vielleicht jemand ein ganz kleinen Codeschnipsel
zeigen, in der ein Bild aufgerufen wird und in eine GUI angezeigt
wird? Wäre echt super, sonst checke ich das anscheindend
nicht.
Danke!
MfG
qixx
Eine Frage habe ich dann doch noch.
Wie bekomme ich das hin, dass sich anstatt des Kastens
ein Bild bewegt?
MfG
qixx
Ah, super! Danke!
Hätte ich auch selbst drauf kommen können, mit der höheren Variable.
Aber du hast mir echt weitergeholfen wegen GDI+!
Danke!
MfG
qixx
Hallo Leute,
ich habe ein Problem. Und zwar möchte ich ein Spiel programmieren,
indem sich mehrere Objekte unabhängig voneinander bewegen. Sie sollen
in unterschiedlichen Geschwindigkeiten bewegt werden.
Wie kann ich das am besten anstellen?
Habe da schonmal was vorbereitet, allerdings noch ohne GDI+, weil das bei
mir irgendwie nicht hingehauen hat.
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <misc.au3>
$Height = 50
$Width = 50
$IchPosition = 2
$Form1 = GUICreate("Form1", 410, 126, 192, 124)
$Ich = GUICtrlCreateLabel("", 24, 60, $Width, $Height)
GUICtrlSetBkColor(-1, 0x000000)
$Gegner = GUICtrlCreateLabel("", 192, 8, $Width, $Height)
GUICtrlSetBkColor(-1, 0x800000)
GUISetState(@SW_SHOW)
AdlibRegister("_ChangePosition", 40)
_GegnerLinks(2)
[/autoit] [autoit][/autoit] [autoit]While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
Func _GegnerLinks($Position)
;~ Func _GegnerLinks()
;~ $Position = 1
Switch $Position
Case 1
$Position = 10
Case 2
$Position = 60
EndSwitch
For $i = 410 To -$Width Step -10
GUICtrlSetPos($Gegner, $i, $Position)
$IchPos = ControlGetPos("","", $Ich)
$Sleep = TimerInit()
While TimerDiff($Sleep) < 100
WEnd
Next
EndFunc
Func _ChangePosition()
If _IsPressed(01) Then
If $IchPosition = 1 Then
$IchPosition = 2
GUICtrlSetPos($Ich, 24, 60)
Else
$IchPosition = 1
GUICtrlSetPos($Ich, 24, 10)
EndIf
While _IsPressed(01)
WEnd
EndIf
EndFunc
Ziel ist es, dass man den Blöcken ausweicht.
Danke für Antworten im voraus!
MfG
qixx