1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. Oscar

Beiträge von Oscar

  • [gelöst] Textlänge in Pixel ermitteln

    • Oscar
    • 26. Juni 2017 um 15:14

    In der Hilfe zu _WinAPI_GetTextExtentPoint32 findet sich eine Funktion GetStringDimensions, mit der man die Stringlänge gut berechnen kann.
    Und das ohne eine Hilfs-Gui erstellen zu müssen oder GDI+ zu bemühen.
    Ich habe das Beispiel mal auf ein Label erweitert:

    AutoIt
    #include <GUIConstantsEx.au3>
    #include <MsgBoxConstants.au3>
    #include <WinAPI.au3>
    #include <WindowsConstants.au3>
    
    
    Example()
    
    
    Func Example()
    	Local $hGUI = GUICreate("String height & width.")
    	Local $idLabel = GUICtrlCreateLabel("---", 10, 10, 30, 20)
    	GUICtrlSetBkColor(-1, 0xAAAAFF)
    	GUICtrlSetFont(-1, 18, 400, 0, 'Arial')
    	GUISetState(@SW_SHOW, $hGUI)
    
    
    	Local $sText = "This is some text." ; The text we want to find the height & width of.
    	Local $aStringDimension = GetStringDimensions(GUICtrlGetHandle($idLabel), $sText) ; Retrieve a 1 dimensional array with $aArray[0] = width & $aArray[1] = height.
    	MsgBox($MB_SYSTEMMODAL, "String Height and Width", 'The height and width of the string "' & $sText & '" is:' & @CRLF & _
    			"Width: " & $aStringDimension[0] & @CRLF & _
    			"Height: " & $aStringDimension[1] & @CRLF)
    	GUICtrlSetPos($idLabel, 10, 10, $aStringDimension[0], $aStringDimension[1])
    	GUICtrlSetData($idLabel, $sText)
    	Do
    	Until GUIGetMsg() = $GUI_EVENT_CLOSE
    EndFunc   ;==>Example
    
    
    Func GetStringDimensions($hWnd, $sText)
    	Local $hDC = _WinAPI_GetDC($hWnd) ; Get the device context handle of the current window.
    	Local $hFont = _SendMessage($hWnd, $WM_GETFONT) ; Retrieve the font with which the control is currently drawing its text.
    	Local $hSelectObject = _WinAPI_SelectObject($hDC, $hFont) ; Select the object of the context device.
    	Local $tSIZE = _WinAPI_GetTextExtentPoint32($hDC, $sText) ; Retrieve the height & width of a string.
    
    
    	_WinAPI_SelectObject($hDC, $hSelectObject)
    	_WinAPI_ReleaseDC($hWnd, $hDC) ; Release the device context.
    	Local $aReturn[2] = [DllStructGetData($tSIZE, 1), DllStructGetData($tSIZE, 2)] ; Set an array with the width & height of the string.
    	Return $aReturn
    EndFunc   ;==>GetStringDimensions
    Alles anzeigen
  • AutoIt Buch Projekt [THEMA BEENDET]

    • Oscar
    • 25. Juni 2017 um 19:12

    Du hast da schon ein paar Fehler drin:
    Seite 17: "5. % (Modulo)" <- Gibt es in AutoIt nicht! Modulo ist in AutoIt eine Funktion Mod($x, $y)
    Seite 18: "Do Einleitung zu einer Do...While-Schleife" <- In AutoIt ist es eine Do...Until-Schleife.
    Seite 20: "ReDim Überschreibt Arrays." <- Auf keinen Fall! Es erweitert oder verringert die ArrayDimension(en)
    Seite 20: "Static Definiert lokale Variable in Funktion, wird danach vernichtet" <- Falsch! Static sorgt dafür, dass eine lokale Variable ihren, in der Funktion zugewiesenen, Wert behält. Beispiel:

    AutoIt
    _Function()
    _Function()
    _Function()
    Func _Function()
    	Local Static $iCount = 0
    	$iCount += 1
    	ConsoleWrite($iCount & @CR)
    EndFunc

    Bei den Schleifen "While...WEnd" und "Do...Until" sowie auch bei "For...Next" würde ich darauf hinweisen, dass es kopf- und fußgesteuerte Schleifen gibt.
    Wo findet die Abbruchbedingung statt und was bedeutet das für den Programmablauf?
    Bei einer kopfgesteuerten Schleife werden die Befehle innerhalb der Schleife möglicherweise gar nicht abgearbeitet. Bei der fußgesteuerten Schleife hingegen immer mindestens einmal.

    Seite 23: "@HOUR Stunden als Zahl" <- Da würde ich genauer drauf eingehen: Wertebereich, führende Null. Das Gleiche bei den anderen Makros.
    Seite 23: "@NumParams Nummer der Parameter, mit der das Programm aufgerufen wurde" <- Schlechte Übersetzung! "Anzahl der Parameter, mit der das Programm aufgerufen wurde"

  • AutoIt Buch Projekt [THEMA BEENDET]

    • Oscar
    • 25. Juni 2017 um 09:19

    [verschoben nach Talk]

    Zum Thema: Meine Meinung dazu, sieht ähnlich aus wie die von Musashi. So ein Buch fertigzustellen ist eine sehr große Aufgabe und meistens endet es auch als solche.
    Ich denke, dass es für Dich einfacher ist, wenn Du Dir ein spezielles Thema auswählst und dazu ein Tutorial schreibst. Du wirst feststellen, dass das schon eine ziemliche Herausforderung darstellt.

  • Kleines Desktop-Spiel (ChipHunter)

    • Oscar
    • 24. Juni 2017 um 18:06

    Bei EasySetup kann man diese Felder nicht ausfüllen. Zumindest habe ich dort nichts derartiges gefunden.
    Mit "InnoSetup" hatte ich mich auch mal beschäftigt, aber irgendwie war mir das dann zu aufwendig da dann auch noch ein Script für zu erstellen.
    Mit EasySetup geht das Ganze innerhalb einer Minute (Klick, klick, fertig). Deswegen nehme ich das EasySetup.

    Und danke für den Hinweis mit der Website in meinem Profil. :thumbup:
    Das hatte ich beim ändern völlig vergessen.

  • Kleines Desktop-Spiel (ChipHunter)

    • Oscar
    • 24. Juni 2017 um 16:06

    Du hast die Anleitung nicht gelesen!
    Genau so sollen sie sich verhalten.
    Der Teufel- und der Zauberhut-Chip kommen zufallsgesteuert von allein, nicht erst beim abschießer aller drei Chips.
    Und solange sie sich auf dem Bildschirm befinden, verwandeln sie alle Chips (auf dem Bildschirm und die die dann noch erscheinen) entweder in Einer-Chips (Teufel) oder in Gold-Chips (Zauberhut).

    Deswegen sollte man den Teufel, so schnell wie möglich abschießen und den Zauberhut natürlich gewähren lassen.

  • Kleines Desktop-Spiel (ChipHunter)

    • Oscar
    • 24. Juni 2017 um 15:29

    So, jetzt ist auch der Rest fertig! ^^
    Es gibt jetzt einen Teufel- und einen Zauberhut-Chip. Die sind beide 10 Sekunden lang aktiv und verschwinden von alleine, wenn man sie nicht vorher abschießt.
    Der Teufel-Chip verwandelt alle Chips in Einer-Chips und der Zauberhut-Chip verwandelt alle Chips in Gold-Chips.
    Mit Spezial-Chips war es das jetzt! Ich denke, das reicht jetzt.
    Das heißt auch, dass es Updates nur noch gibt, falls noch Bugs beseitigt werden müssen.

    Neue Version in Post#1.

    Den Link für die Installer-Version auf meiner Homepage habe ich auch angepasst. In meinem Forum konnte man das als Gast gar nicht runterladen.

  • Kleines Desktop-Spiel (ChipHunter)

    • Oscar
    • 23. Juni 2017 um 19:24

    Ja, mir gefällt die erste Variante auch besser.
    Ich habe das jetzt geändert:
    Zum einen erscheint kein weiterer Munitions-Chip, wenn sich bereits einer auf dem Bildschirm befindet.
    Und zum anderen kommt überhaupt kein Munitions-Chip, wenn man noch mehr als 90 Schuss Munition hat.
    So kann man nie mehr als 100 Schuss Munition bekommen und man hat noch so viel Reserve, dass man auf den Zufall warten kann.

    Eine neue Version kommt aber erst später, wenn ich den Rest eingebaut habe.

  • Kleines Desktop-Spiel (ChipHunter)

    • Oscar
    • 23. Juni 2017 um 18:23

    Das mit den Waffen sehe ich ähnlich. Es passt nicht so recht zu dem Spiel.

    Das mit dem Magneten stimmt so nicht so ganz. Die Zeiten werden nicht addiert, nein, aber die 10 Sekunden beginnen mit jedem Magneten von vorne.
    Allerdings hast Du recht, dass ich die Bombe nicht beachtet habe. Bei der Bombe wird die Magnetzeit nicht zurückgesetzt. Das werde ich noch ändern.

    Mit der Munitionsmenge hast Du ebenfalls recht. Manchmal ist der Zufall zu sehr auf Munition ausgelegt.
    Die Wahrscheinlichkeit vom Munitionsbestand abhängig machen wäre eine Idee.
    Oder man bekommt für überzählige Munition am Spielende noch Punkte?

    Jedenfalls danke ich euch für eure Audauer und die konstruktiven Rückmeldungen. :thumbup:

  • Kleines Desktop-Spiel (ChipHunter)

    • Oscar
    • 23. Juni 2017 um 09:36
    Zitat von Romanow

    Ich hätte gerne mehr Waffen!

    Ich sehe da jetzt auch keine Möglichkeit. Das ist ja kein 3D-Shooter.
    Wie stellst Du Dir das vor?

  • Kleines Desktop-Spiel (ChipHunter)

    • Oscar
    • 22. Juni 2017 um 12:23

    @Musashi: Danke, für das Testergebnis und die Korrekturen! :thumbup:

    Ja, die Häufigkeit des Magneten könnte ich noch erhöhen. Das ist im Moment etwas wenig, denke ich.

    Meine Frau hatte noch eine Idee, eines negativen Chips (vielleicht eine "böse Bombe"). So lange wie dieser Chips auf dem Monitor umherfliegt, verringert er den Wert der anderen Chips. Also z.B. alle 2 sek. verlieren die anderen Chips ihren Wert um eine Stufe (aus 100er werden 50er aus 50er werden 25er usw.), bis dann nur noch 1er umherfliegen.
    Das könnte man dann auch noch in die andere Richtung machen (vielleicht mit der "freundlichen Bombe").
    Was haltet ihr von der Idee?

  • Kleines Desktop-Spiel (ChipHunter)

    • Oscar
    • 22. Juni 2017 um 09:51

    Die Spielanleitung kann man jetzt auch im Spiel aufrufen. Entweder mit Klick auf das Icon oben rechts oder im Kontextmenü.
    Es gibt jetzt eine Boss-Taste (STRG & b). Damit wird das Spiel minimiert und es tarnt sich in der Taskleiste als Taschenrechner (Titel und Icon).
    Außerdem gibt es jetzt noch einen Magnet-Chip. Beim abschiessen wird das Fadenkreuz magnetisch und zieht die anderen Chips an. Dauer: 10 Sekunden.

    Neue Version in Post#1.

  • Kleines Desktop-Spiel (ChipHunter)

    • Oscar
    • 20. Juni 2017 um 18:57

    @Musashi: Du meinst, die Anleitung aus Post#1 nochmal als Anleitung im Spiel? Ja, das ist eine gute Idee. Werde ich umsetzen.

    autoiter: Das mit dem nachladen hatte ich schon erwogen, aber ich fand es nicht so gut, weil man damit viel Munition "verschenkt". Es passiert mir zwar auch häufig, dass ich im falschen Moment ein leeres Magazin habe, aber andererseits zwingt einen das auch dazu "mitzuzählen". Aber vielleicht mache ich das noch einstellbar.

    In Bezug auf noch mehr "Mega"-Chips bin ich mir nicht ganz sicher. Vielleicht sollte ich mal eine Umfrage starten, wie die Meinung dazu hier aussieht.

  • Kleines Desktop-Spiel (ChipHunter)

    • Oscar
    • 20. Juni 2017 um 17:27

    Ich habe jetzt mal einige Änderungen vorgenommen.
    Damit sollten die Probleme beseitigt sein.
    Neue Version in Post#1. :rolleyes:

  • Kleines Desktop-Spiel (ChipHunter)

    • Oscar
    • 20. Juni 2017 um 15:17

    Danke!
    Aber merkwürdig ist das trotzdem. ?(

  • Kleines Desktop-Spiel (ChipHunter)

    • Oscar
    • 20. Juni 2017 um 14:49

    Ich kann mir nicht erklären, wieso das mit komplett schwarz transparent wird.
    Aber als Workaround werde ich das erstmal so übernehmen. Danke, für's testen!

    Nachtrag: Kannst Du nochmal mit 0xFF000001 testen? Ob das bereits ausreicht?

  • Tooltip - Inhalt von Eingabefeld

    • Oscar
    • 20. Juni 2017 um 14:44

    Ok, das ist in der Tat ein Anwendungsfall.

    Und nein, GuiCtrlSetTip muss nicht immer unter dem Inputfeld stehen. Der erste Parameter, den man dort übergibt, ist die Control-ID (die Rückgabe von GuiCtrlCreateInput) und somit kann man von überall aus dem Programm den ToolTip ändern.
    Um dynamisch auf Benutzereingaben in dem Inputfeld reagieren zu können, kann man GuiRegisterMsg verwenden:

    AutoIt
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    Global $sMsg = 'Das ist ein ganz ganz langer Text, der garantiert nicht in das kleine Feld passt.'
    GUICreate('Test', 400, 300)
    Global $idInput = GUICtrlCreateInput($sMsg, 10, 10, 120, 20)
    GUICtrlSetTip($idInput, GUICtrlRead($idInput))
    GUISetState()
    GUIRegisterMsg($WM_COMMAND, '_WM_COMMAND')
    
    
    Do
    Until GUIGetMsg() = $GUI_EVENT_CLOSE
    
    
    Func _WM_COMMAND($hWnd, $iMsg, $wParam, $lParam)
    	Local $nID = BitAND($wParam, 0x0000FFFF)
    	If $nID = $idInput Then GUICtrlSetTip($idInput, GUICtrlRead($idInput))
    	Return $GUI_RUNDEFMSG
    EndFunc   ;==>_WM_COMMAND
    Alles anzeigen
  • Tooltip - Inhalt von Eingabefeld

    • Oscar
    • 20. Juni 2017 um 13:42

    Doch, das geht schon! Du musst das nur jedes Mal als Tip eintragen, wenn sich im Inputfeld etwas ändert.

    Meine Frage lautet hingegen: Warum als Tooltip genau das Gleiche eintragen, wie im Inputfeld? Was ergibt das für einen Sinn?

  • Kleines Desktop-Spiel (ChipHunter)

    • Oscar
    • 20. Juni 2017 um 13:35

    @Musashi: Das ist sehr merkwürdig! Warum wird da schwarz plötzlich als transparent dargestellt? Kannst Du bitte mal in Zeile 839 das 0xFF000000 in 0xFF222222 ändern und schauen, ob das dann immer noch auftritt?

    autoiter: Ja, das mit dem "im Vordergrund" hatte ich eingebaut, damit die Chips nicht hinter der Punkteanzeige erscheinen. Allerdings ist das flackern (wenn sich die Chips übereinander bewegen) auch nicht so schön. Ich muss noch mal etwas testen...

  • Kleines Desktop-Spiel (ChipHunter)

    • Oscar
    • 20. Juni 2017 um 07:21

    Ich hatte noch eine Idee! :D
    Die Einführung von Munition. Man bekommt am Anfang 100 Schuss Munition. 10 Schuss davon im Magazin. Hat man das Magazin leergeschossen, so muss man nachladen (rechte Maustaste).
    Im Spiel gibt es jetzt aber auch Munitions-Chips. Wenn man die abschießt, bekommt man 10 Schuss zusätzlich.
    Da sich das Punkteverhalten damit aber verändert, habe ich eine Versionsänderung mit Rücksetzung der bisherigen Punkte vorgenommen.

    Neue Version in Post#1.

  • Kleines Desktop-Spiel (ChipHunter)

    • Oscar
    • 19. Juni 2017 um 06:56

    Oh mann, so ein blöder C&P-Fehler!
    In Zeile 653 muss statt If $i <> $iIndex And $aChipPic[$iIndex][$Hide] = 0 Then natürlich If $i <> $iIndex And $aChipPic[$i][$Hide] = 0 Then stehen.
    Dadurch wird $iHideCount > 3 und es kommt zu dieser endlosen Folge von Spezial-Chips.


    Vielen Dank für Deine andauernden Test-Spiele! :thumbup:


    Neue Version in Post#1. :rolleyes:

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™