worum gehts in dem Spiel eig.?
Beiträge von Carsten8
-
-
mist .. musste noch was testen und hab alles wieder rückgängis gemacht und das falsche kopiert. Jetzt sollte es aber passen.
-
so hab den Fehler behoben und die Ressourcen werden ordnunggemäß gelöscht. Außerdem wird die GUI geschlossen wenn auf OK geklickt wurde
Danke nochma ProgA
-
stimmt... änder ich nachher, muss jetz aber los.
-
Ja hab ich, war aber ne last minute änderung. Geht jetzt
-
Da ich mal wieder langeweile hatte und was neues in Sachen AutoIt suchte, habe ich zwei kleine Captcha Funktionen geschrieben:
Beispiel
[autoit];Test: _captcha
[/autoit] [autoit][/autoit] [autoit]
$cap1 = _captcha(500, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789", "_captcha Test")
If $cap1 = True Then
MsgBox(0, "_captcha", "Richtiges Captcha eingegeben oder das Fenster wurde vorzeitig geschlossen (Rückgabe: True)")
Else
MsgBox(0, "_captcha", "Falsches Captcha eingegeben (Rückgabe: False)")
EndIf;Test: _captchaEmb
[/autoit] [autoit][/autoit] [autoit]
$form = GUICreate("_captchaEmb Test", 292, 55, 192, 124)
$pic = GUICtrlCreatePic("", 0, 0, 292, 55)
$cap2 = _captchaEmb($form, $pic)
WinSetTitle($form, "", "_captchaEmb Test (" & $cap2 & ")")
GUISetState(@SW_SHOW)While 1
[/autoit]
If GUIGetMsg() = -3 Then Exit
WEndUDF
[autoit]#include <GDIPlus.au3>
[/autoit] [autoit][/autoit] [autoit];Danke an ProgAndy für die Hilfestellung bei GDI+
[/autoit] [autoit][/autoit] [autoit]
; #FUNCTION# ====================================================================================================================
; Name...........: _captchaEmb
; Description ...: Erstellt ein Captcha in einem Picc-controll
; Syntax.........: _captchaEmb($hWnd, $hPic, $iPoints = 500, $sLetters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789", $sTitle = "Captcha", $sMsg = "Please insert the Code in the picture:", $sFont = "Times New Roman", $iSize = 10, $bBold = True)
; Parameters ....: $hWnd - Handle des Fenster indem sich das Pic-controll befindet
; $hPic - Handle des Pic-controlls
; $iPoints - Punkte die über die Schrift gezeichnet werden
; $sLetters - Buchstaben die im Captcha verwendet werden sollen
; $sTitle - Der Titel des Fensters
; $iMsg - Die Nachricht die im Fenster erscheind
; $sFont - Schriftart in der die Buchstaben geschrieben werden sollen
; $iSize - Schriftgröße in der die Buchstaben geschrieben werden sollen
; $bBold - Schrift dick schreiben (True - Ja;False - Nein)
; Return values .: Erfolg - Gibt den Captchacode zurück
; Fehler - Gibt -1 zurück und setzt @error auf 1
; Author ........: Carsten8
; Remarks .......: Das Bild wird in der Breite 292 und der Höhe 55 erstellt!
; ===============================================================================================================================
Func _captchaEmb($hWnd, $hPic, $iPoints = 500, $sLetters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789", $sTitle = "Captcha", $sMsg = "Please insert the Code in the picture:", $sFont = "Times New Roman", $iSize = 10, $bBold = True)
Local $iLen = 10, $sCaptcha
For $i = 1 To $iLen
$sCaptcha &= StringMid($sLetters, Random(1, StringLen($sLetters)), 1)
Next
If Not IsHWnd($hWnd) Then
SetError(1)
Return -1
EndIf
_GDIPlus_Startup()
$capGraph = _GDIPlus_GraphicsCreateFromHWND($hWnd)
$hBMP = _GDIPlus_BitmapCreateFromGraphics(292,55,$capGraph)
_GDIPlus_GraphicsDispose($capGraph)
$capGraph = _GDIPlus_ImageGetGraphicsContext($hBMP)
_GDIPlus_GraphicsFillRect($capGraph, 0, 0, 292, 55, _GDIPlus_BrushCreateSolid(0xFFFEFEFE))
For $iL = 1 To $iLen
$rand = Random(0, 40)
_GDIPlus_GraphicsDrawString($capGraph, StringMid($sCaptcha, $iL, 1), $iL * 25, $rand, $sFont, $iSize)
If $bBold = True Then _GDIPlus_GraphicsDrawString($capGraph, StringMid($sCaptcha, $iL, 1), $iL * 25 + 1, $rand, $sFont, $iSize)
Next
For $capLines = 1 To $iPoints
$randx = Random(0, 292)
$randy = Random(0, 55)
_GDIPlus_GraphicsDrawLine($capGraph, $randx, $randy, $randx + 1, $randy + 1)
Next
$hBitmap_GDI = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hBMP)
_SetBitmapToCtrl($hPic, $hBitmap_GDI)
_GDIPlus_GraphicsDispose($capGraph)
_GDIPlus_BitmapDispose($hBMP)
_GDIPlus_Shutdown()
Return $sCaptcha
EndFunc
; #FUNCTION# ====================================================================================================================
; Name...........: _captcha
; Description ...: Erstellt ein Fenster mit einem Captcha.
; Syntax.........: _captcha($iPoints = 500, $sLetters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789", $sTitle = "Captcha", $sMsg = "Please insert the Code in the picture:", $sFont = "Times New Roman", $iSize = 10, $bBold = True)
; Parameters ....: $iPoints - Punkte die über die Schrift gezeichnet werden
; $sLetters - Buchstaben die im Captcha verwendet werden sollen
; $sTitle - Der Titel des Fensters
; $iMsg - Die Nachricht die im Fenster erscheind
; $sFont - Schriftart in der die Buchstaben geschrieben werden sollen
; $iSize - Schriftgröße in der die Buchstaben geschrieben werden sollen
; $bBold - Schrift dick schreiben (True - Ja;False - Nein)
; Return values .: Richtiges Captcha - True
; Falsches Captcha - False
; Author ........: Carsten8
; Remarks .......: Gibt auch False zurück wenn das Fenster vom Benutzer geschlossen wurde.
; ===============================================================================================================================
Func _captcha($iPoints = 500, $sLetters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789", $sTitle = "Captcha", $sMsg = "Please insert the Code in the picture:", $sFont = "Times New Roman", $iSize = 10, $bBold = True)
Local $iLen = 10, $sCaptcha
For $i = 1 To $iLen
$sCaptcha &= StringMid($sLetters, Random(1, StringLen($sLetters)), 1)
Next
$capWin = GUICreate($sTitle, 309, 164, 303, 235)
GUICtrlCreateLabel($sMsg, 4, 4, 300, 17)
GUICtrlCreateGroup("Captcha", 4, 24, 300, 77)
$capPic = GUICtrlCreatePic("",8,40,292,55)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$capIn = GUICtrlCreateInput("", 4, 104, 300, 21)
$capOK = GUICtrlCreateButton("OK", 120, 132, 75, 25, 0)
GUISetState(@SW_SHOW, $capWin)
_GDIPlus_Startup()
$capGraph = _GDIPlus_GraphicsCreateFromHWND($capWin)
$hBMP = _GDIPlus_BitmapCreateFromGraphics(292,55,$capGraph)
_GDIPlus_GraphicsDispose($capGraph)
$capGraph = _GDIPlus_ImageGetGraphicsContext($hBMP)
_GDIPlus_GraphicsFillRect($capGraph, 0, 0, 292, 55, _GDIPlus_BrushCreateSolid(0xFFFEFEFE))
For $iL = 1 To $iLen
$rand = Random(0, 40)
_GDIPlus_GraphicsDrawString($capGraph, StringMid($sCaptcha, $iL, 1), $iL * 25, $rand, $sFont, $iSize)
If $bBold = True Then _GDIPlus_GraphicsDrawString($capGraph, StringMid($sCaptcha, $iL, 1), $iL * 25 + 1, $rand, $sFont, $iSize)
Next
For $capLines = 1 To $iPoints
$randx = Random(0, 292)
$randy = Random(0, 55)
_GDIPlus_GraphicsDrawLine($capGraph, $randx, $randy, $randx + 1, $randy + 1)
Next
$hBitmap_GDI = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hBMP)
_SetBitmapToCtrl($capPic, $hBitmap_GDI)
_GDIPlus_GraphicsDispose($capGraph)
_GDIPlus_BitmapDispose($hBMP)
_GDIPlus_Shutdown()
While 1
$mGUI = GUIGetMsg(1)
Switch $mGUI[0]
Case -3
GUIDelete($capWin)
Return False
Case $capOK
If GUICtrlRead($capIn) = $sCaptcha Then
GUIDelete($capWin)
Return True
Else
GUIDelete($capWin)
Return False
EndIf
EndSwitch
WEnd
EndFuncFunc _SetBitmapToCtrl($CtrlId, $hBitmap)
[/autoit] [autoit][/autoit] [autoit]
Local Const $STM_SETIMAGE = 0x0172
Local Const $IMAGE_BITMAP = 0
Local Const $SS_BITMAP = 0xE
Local Const $GWL_STYLE = -16Local $hWnd = GUICtrlGetHandle($CtrlId)
[/autoit] [autoit][/autoit] [autoit]
If $hWnd = 0 Then Return SetError(1, 0, 0)Local $oldStyle = DllCall("user32.dll", "long", "GetWindowLong", "hwnd", $hWnd, "int", $GWL_STYLE)
[/autoit] [autoit][/autoit] [autoit]
If @error Then Return SetError(2, 0, 0)
DllCall("user32.dll", "long", "SetWindowLong", "hwnd", $hWnd, "int", $GWL_STYLE, "long", BitOR($oldStyle[0], $SS_BITMAP))
If @error Then Return SetError(3, 0, 0)Local $oldBmp = DllCall("user32.dll", "hwnd", "SendMessage", "hwnd", $hWnd, "int", $STM_SETIMAGE, "int", $IMAGE_BITMAP, "int", $hBitmap)
[/autoit]
If @error Then Return SetError(4, 0, 0)
If $oldBmp[0] <> 0 Then DllCall("GDI32.dll", "int", "DeleteObject", "int", $oldBmp[0])
Return 1
EndFuncFreue mich auf Kritik und Kommentare dazu
Es ist meine erste Funktion in der GDI+ vorkommt und die erste Funktion die ich veröffentliche, seid also nicht allzu pingelichGruß
Carsten -
ok so im Groben kapier ichs, danke. Nur was soll anstatt $hImage rein?
Edit: hat sich erledigt und funzt blendent. Danke !
-
es soll später mal ne captcha funktion werden. Da ich da viele Striche etc. generiere, wird mit dem "an den Anfang schreiben" doch etwas umständlich oder? Wie meintest du das mit dem "--Mit GDI(Plus) in ein Bitmap zeichnen und mit _SetBimap aus er Resources.au3 arbeiten " eig.?
-
danke erstmal bis hierher. Mein nächstes Problem ist allerdings, dass ich das Rechteck zufällig erstelle (also größe und position). Das Bild soll sich aber beim minimieren und maximieren nicht verändern. Wie bekomm ich das am besten hin? Des Weiteren werden beim verschieben über den Rand des Desktops hinaus weitere Rechtecke erstellt.
[autoit]#include <GDIPlus.au3>
[/autoit]
#include <GUIConstantsEx.au3>
Global $testGraph
_GDIPlus_Startup()
test()
Func test()
Local $testOK, $testWin
$testWin = GUICreate("Test", 309, 164, 303, 235)
GUIRegisterMsg(0xF,"MY_PAINT")
GUISetState(@SW_SHOW, $testWin)
$testGraph = _GDIPlus_GraphicsCreateFromHWND($testWin)
_GDIPlus_GraphicsFillRect($testGraph, Random(0, 100), Random(0, 100), Random(100, 300), Random(100, 230))
Sleep(10000)
EndFunc
Func MY_PAINT($hWnd, $Msg, $wParam, $lParam)
_GDIPlus_GraphicsFillRect($testGraph, Random(0, 100), Random(0, 100), Random(100, 300), Random(100, 230))
Return $GUI_RUNDEFMSG
EndFunc
_GDIPlus_Shutdown() -
@all: Seid mal nicht so. Ihr wart auch irgendwann einmal Anfänger und wusstet fast nichts. Da wolltet ihr auch nicht, dass jeder kommt und sagt "Das reicht jetzt, finde ich." (Im Sinne von "hau ab und such hilfe wo anders! So blöde Fragen beantworte ich nicht) oder "So einen Mist unterstützen wir hier nicht." Er wusste/weiß es eben nicht besser. Jeder ist mal ganz am Anfang und versucht zu lernen. Wenn ihr nicht helfen wollt, braucht ihr nichts zu posten.
So b2t:
Logisch denken. Was kommt aus dem Lautsprecher des Computers? Ein Piepston. Und was heißt "Piepston" auf englisch? "Beep" (braucht nur in einen Online-Übersetzer eingeben). Mehr brauchst du dazu auch gar nicht -
Zitat
--Mit GDI(Plus) in ein Bitmap zeichnen und mit _SetBimap aus er Resources.au3 arbeiten
nur wie? xDZitat--oder mit GDI(plus) zeichnen und WM_PAINT nutzen.
mit zeichnen meinst du so, wie ichs in Möglichkeit 1 gemacht hab? Ok, und was bewirkt WM_PAINT? -
Moin
Ich bin kompletter Neuling auf dem Gebiet GDI+. Ich will in meinem GUI ein Bild darstellen, indem nur ein (evtl. auch 2) gefülltes Rechteck ist.Dabei sind mir 2 Möglichkeiten in den Sinn gekommen:
ZitatGrafik erstellen mit _GDIPlus_GraphicsCreateFromHWND und dann das Rechteck zeichnen mit _GDIPlus_GraphicsFillRect
=> Nach dem Minimieren und wieder maximieren ist das Rechteck wegZitatEine Bitmapdatei auf meinem Computer laden (bzw. vorher erstellen), dort das Rechteck zeichnen und mit GUICtrlCreatePic ausgeben.
=> Wie mach ich das Rechteck?Gibts da noch andere Möglichkeiten?
Lg
Carsten -
Hi,
auch von mir einen herzlichen Glückwunsch. Du machst deinen Job hier im Forum echt super, also weiter so :).
Pee macht seine Aufgabe nicht super.... er macht sie perfekt
-
Herzlichen Glückwunsch
-
Mit InetGetSize kannst du die Größe der Datei rausfinden. Dann machst du eine ProgressBar und setzt seinen Maximalwert mit GUICtrlSetLimi auf den Wert. Danach machst du eine While @InetGetActive in der du immer wieder den Wert der Progressbar auf @InetGetBytesRead setzt.
[autoit]
Beispiel:$url = "http://www.beispiel.de/testordner/testdatei.exe" ;Adresse zur Datei
[/autoit]
$size = InetGetSize($url) ;Dateigröße ermitteln
$Form1 = GUICreate("Testfenster", 232, 46, 192, 124)
$Progress1 = GUICtrlCreateProgress(4, 4, 222, 17)
GUICtrlSetLimit(-1, $size) ;Den maximalwert setzen
$Label1 = GUICtrlCreateLabel("", 4, 24, 226, 17)
GUISetState(@SW_SHOW)
InetGet($url, "testdatei.exe", 1, 1)
While @InetGetActive
If GUIGetMsg() = -3 Then
InetGet("abort")
Exit
EndIf
GUICtrlSetData($Progress1, @InetGetBytesRead)
GUICtrlSetData($Label1, @InetGetBytesRead & " von " & $size & " Bytes heruntergeladen.")
WEnd -
-
ich weiß schon was ich schenke. Du hast die Möglichkeit "Demnächst" vergessen
-
-
achsoo... sollte man wissen danke Wäre ich nie drauf gekommen. Ich dachte sowieso die 0 im Array is ein Sting. Aber egal
Aber wenn wir schon beim Thema sind, ich bekomm manchmal die Meldung
Warning from function _IECreate (Foreground Window Unlock Failed!)
Was bedeutet das? -
danke, aber das bringt mich auch nicht weiter. Soweit ich weiß ist = für case insensitive und == für case sensitive. Steht ja auch in der Hilfe. Aber gibts sonst noch unterschiede?