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. Morrison

Beiträge von Morrison

  • LockBits & "Edit-Control" - Bitmap-Handle?

    • Morrison
    • 3. September 2012 um 19:17

    Hallo,

    ich habe eine GUI erstellt mit einem "Edit-Control" per GUICtrlCreateEdit. In diesem "Edit-Control" wird mir nun eine Grafik angezeigt. Wie kann ich per _GDIPlus_BitmapLockBits den Inhalt des Edits in den Speicher laden?? Bzw. wie deklariere ich das Edit zu einem Bitmap-Handle??

    Habs schon mit "_GDIPlus_GraphicsCreateFromHWND" und "_WinAPI_CreateCompatibleBitmap" probiert, funzt iwie nicht!

    Kann mir wer helfen??

  • Arrays verbinden oder aneinander hängen! Wie?

    • Morrison
    • 5. Juli 2012 um 05:05

    OK, ich hab mir ne Funktion gebastelt, mit ReDim!

    So siehts aus:

    Spoiler anzeigen
    [autoit]

    Func _checkZeichen() ; ZeichenArray setzen
    $sColl = 0
    $cZeichen = 0
    Global $aZeichen[2][1] ;Array für gewählte Zeichen
    If $chkAlpha = 1 Then ;wenn Checkbox für Alphabet gesetzt
    $sColl = $sColl + 1
    $cZeichen = $cZeichen + UBound($aAlpha, 2)
    $cCount = 0 ;Counter für altes Array
    If UBound($aZeichen, 2) = 1 Then ;Wenn keine Daten im neuen Array
    $start = UBound($aZeichen, 2) - 1 ;Counter für neues Array
    Else ; Falls Daten im Array
    $start = UBound($aZeichen, 2) ;;Counter für neues Array
    EndIf
    ReDim $aZeichen[2][$start + UBound($aAlpha, 2)] ;Neues Array reDimensionieren
    For $i = $start To $start + UBound($aAlpha, 2) - 1 ;neues Array befüllen
    $aZeichen[0][$i] = $aAlpha[0][$cCount]
    $aZeichen[1][$i] = $aAlpha[1][$cCount]
    $cCount = $cCount + 1
    Next
    EndIf
    If $chkNumeric = 1 Then
    $sColl = $sColl + 3
    $cZeichen = $cZeichen + UBound($aNumeric, 2)
    $cCount = 0
    If UBound($aZeichen, 2) = 1 Then
    $start = UBound($aZeichen, 2) - 1
    Else
    $start = UBound($aZeichen, 2)
    EndIf
    ReDim $aZeichen[2][$start + UBound($aNumeric, 2)]
    For $i = $start To $start + UBound($aNumeric, 2) - 1
    $aZeichen[0][$i] = $aNumeric[0][$cCount]
    $aZeichen[1][$i] = $aNumeric[1][$cCount]
    $cCount = $cCount + 1
    Next
    EndIf
    If $chkStandard = 1 Then
    $sColl = $sColl + 5
    $cZeichen = $cZeichen + UBound($aStandard, 2)
    $cCount = 0
    If UBound($aZeichen, 2) = 1 Then
    $start = UBound($aZeichen, 2) - 1
    Else
    $start = UBound($aZeichen, 2)
    EndIf
    ReDim $aZeichen[2][$start + UBound($aStandard, 2)]
    For $i = $start To $start + UBound($aStandard, 2) - 1
    $aZeichen[0][$i] = $aStandard[0][$cCount]
    $aZeichen[1][$i] = $aStandard[1][$cCount]
    $cCount = $cCount + 1
    Next
    EndIf
    If $chkExtendend = 1 Then
    $sColl = $sColl + 10
    $cZeichen = $cZeichen + UBound($aExtendend, 2)
    $cCount = 0
    If UBound($aZeichen, 2) = 1 Then
    $start = UBound($aZeichen, 2) - 1
    Else
    $start = UBound($aZeichen, 2)
    EndIf
    ReDim $aZeichen[2][$start + UBound($aExtendend, 2)]
    For $i = $start To $start + UBound($aExtendend, 2) - 1
    $aZeichen[0][$i] = $aExtendend[0][$cCount]
    $aZeichen[1][$i] = $aExtendend[1][$cCount]
    $cCount = $cCount + 1
    Next
    EndIf
    Return $aZeichen
    EndFunc

    [/autoit]

    Danke an alle!!

  • Arrays verbinden oder aneinander hängen! Wie?

    • Morrison
    • 4. Juli 2012 um 17:42

    Naja, weil ich wählen will welche Zeichen verfügbar sein sollen.

  • Arrays verbinden oder aneinander hängen! Wie?

    • Morrison
    • 4. Juli 2012 um 16:59

    Hallo!

    Ich habe insg. vier 2D-Arrays unterschiedlicher Größe. Dazu habe ich vier Checkboxen. Wenn eine Checkbox angehakt ist soll das dazugehörige Array aktiv sein. Wie kombiniere ich nun die Arrays miteinander? Sollte ich die jeweiligen Arrays zu einem neuen Array zusammenführen?

    Ich müsste ja theoretisch alle möglichen Kombinationsmöglichkeiten bestimmen, oder?

    Oder einfach ReDim und die Werte anhängen??

    Es geht um ASCII-Zeichen. Array 1 beinhaltet das Alphabet von A-Z und deren dazugehörigen Dezimalwertenz.B.: "A" = 065 oder "U" = 085, Array 2 die Numerischen Zahlen 0-9, 3. Array die Standard-Sonderzeichen wie "!(),. usw., und das 4. Array die Extendend-Zeichen.

    Wer hat nen Beispiel für mich? Danke!

  • Im Hintergrund/Arbeitsspeicher zeichnen..oder PixelGet und LockBits..

    • Morrison
    • 15. Juni 2012 um 03:27

    Hallo, ich arbeite immer noch an meinem Font-Tool.

    Dieses soll die installierten Schriftarten auslesen und in einer Listbox auflisten.
    Dann will ich für jede Schriftart und jedes deren darstellbaren Zeichen die Daten sammeln, wie z.B. Pixelanzahl oder eingrenzendes Rechteck etc

    Wenn ich nun die Schriftarten durchlaufe, ist es dann möglich auf ein "unsichtbares" Fenster zu zeichnen oder gar im Speicher damit die Datenerfassung schneller läuft??
    Und dann vllt. mit den Daten die Charaktere in den kleinen Fenstern anzeigt! Das wäre doch um einiges schneller!!

    Also ich verwende noch die PixelGet Methode weil ich nich weiss wie des mit dem LockBits funktioniert..des würd doch auch schon einiges bringen..!?

    Wer kann mir helfen??

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>
    #include <ButtonConstants.au3>
    #include <ComboConstants.au3>
    #include <EditConstants.au3>
    #include <File.au3>
    #include <Fontconstants.au3>
    #include <GDIPlus.au3>
    #include <GuiButton.au3>
    #include <GUIConstantsEx.au3>
    #include <GuiListView.au3>
    #include <ListviewConstants.au3>
    #include <ProgressConstants.au3>
    #include <StaticConstants.au3>
    #include <UpDownConstants.au3>
    #include <WindowsConstants.au3>
    #include <GuiRichEdit.au3>
    #include <GuiEdit.au3>
    Opt("GUIOnEventMode", 1)
    Opt("PixelCoordMode", 0)
    ;Data
    $dString = 'a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,ä,ö,ü,1,2,3,4,5,6,7,8,9,0' ;26 Buchstaben 3 Umlaute 10 Zahlen
    Global $aString = StringSplit($dString, ',')
    Local $data[3][$aString[0] + 1]
    Local $rLinks, $rRechts, $rOben, $rUnten, $rWidth, $rHeight
    Local $aCoords1[100][100]
    Local $aCoords2[100][100]
    Local $aARect[2][5]
    For $i = 1 To $aString[0]
    $data[1][$i] = StringUpper($aString[$i])
    $data[2][$i] = StringLower($aString[$i])
    Next
    $cDataCount = 1 ;Letter Stellenzähler
    $data[0][0] = (UBound($data, 2) - 1)
    Global $var = _FontGetList(1)
    Global $aItems[$var[0][0]]
    Global $fName[1]
    $sgrA = 50
    #region ### START Koda GUI section ### Form=C:\Users\IBM\Desktop\AU3_OCR_new\Form1.kxf
    $msg = GUICreate("Form1", 680, 245, 215, 124)
    $Datei = GUICtrlCreateMenu("&Datei")
    $mFileOpen = GUICtrlCreateMenuItem("Datei öffnen" & @TAB & "", $Datei)
    $MenuItem1 = GUICtrlCreateMenuItem("Optionen" & @TAB & "", $Datei)
    $MenuItem2 = GUICtrlCreateMenuItem("Exit" & @TAB & "", $Datei)
    $Hilfe = GUICtrlCreateMenu("&Hilfe")
    $lLabel = GUICtrlCreateLabel('Speichern', 264, 10, 60, 20)
    $lLabel2 = GUICtrlCreateLabel('Input:', 277, 100, 60, 20)
    $listview = GUICtrlCreateListView("Nr.|Datei|Name", 337, 25, 335, 157)
    GUICtrlCreateLabel('Suchen: ', 480, 4, 60, 20)
    $sSuche = GUICtrlCreateInput('', 526, 1, 110, 20)
    $iInput = GUICtrlCreateEdit('', 269, 117, 50, 50, BitOR($ES_CENTER, $ES_WANTRETURN, $WS_BORDER))
    $idEdit1 = GUICtrlCreateEdit('', 10, 32, 100, 100, $ES_AUTOVSCROLL, BitOR($WS_EX_WINDOWEDGE, $WS_EX_CLIENTEDGE, $WS_EX_DLGMODALFRAME))
    $idEdit2 = GUICtrlCreateEdit('', 151, 32, 100, 100, $ES_AUTOVSCROLL, BitOR($WS_EX_WINDOWEDGE, $WS_EX_CLIENTEDGE, $WS_EX_DLGMODALFRAME))
    Global $hEdit1 = GUICtrlGetHandle($idEdit1)
    Global $hEdit2 = GUICtrlGetHandle($idEdit2)
    GUICtrlCreateLabel('Daten: ', 264, 30, 50, 20)
    GUICtrlCreateLabel('Bilder: ', 264, 45, 50, 20)
    GUICtrlCreateLabel('Overwrite: ', 264, 60, 50, 20)
    $cDaten = GUICtrlCreateCheckbox('', 312, 32, 10, 10)
    $cBilder = GUICtrlCreateCheckbox('', 312, 47, 10, 10)
    $cOW = GUICtrlCreateCheckbox('', 312, 62, 10, 10)
    $SchriftG = GUICtrlCreateInput($sgrA, 113, 70, 35, 20, $ES_NUMBER)
    $updwnSGR = GUICtrlCreateUpdown($SchriftG)
    $bUp = GUICtrlCreateButton("Up", 113, 32, 35, 35, -1, $WS_EX_CLIENTEDGE)
    $bDown = GUICtrlCreateButton("Dwn", 113, 97, 35, 35, -1, $WS_EX_CLIENTEDGE)
    $bStart = GUICtrlCreateButton("Start", 20, 160, 80, 25, -1, $WS_EX_STATICEDGE)
    $bAbbruch = GUICtrlCreateButton("Abbruch", 160, 160, 80, 25, -1, $WS_EX_STATICEDGE)
    $bDaten = GUICtrlCreateButton("Alle Daten", 412, 188, 190, 30)
    $bFAkt = GUICtrlCreateButton('Aktuell', 105, 156, 50, 16, $BS_DEFPUSHBUTTON)
    $bFAll = GUICtrlCreateButton('Alle', 105, 176, 50, 16, $BS_DEFPUSHBUTTON)
    $bSetInput = GUICtrlCreateButton('Set', 274, 172, 40, 18)
    $Progress1 = GUICtrlCreateProgress(11, 139, 238, 10, -1, $WS_EX_STATICEDGE)
    GUISetState(@SW_SHOW)
    #endregion ### END Koda GUI section ###
    _GUICtrlListView_SetColumnWidth($listview, 0, 28)
    _GUICtrlListView_SetColumnWidth($listview, 1, 40)
    _GUICtrlListView_SetColumnWidth($listview, 2, 180)
    GUISetOnEvent($GUI_EVENT_CLOSE, "SpecialEvents")
    GUICtrlSetOnEvent($bStart, "_StartButton")
    GUICtrlSetOnEvent($bUp, "UP")
    GUICtrlSetOnEvent($bDown, "DOWN")
    GUICtrlSetOnEvent($listview, "HandleClicks")
    GUICtrlSetOnEvent($updwnSGR, "SchriftGR")
    GUICtrlSetOnEvent($bDaten, "AlleDaten")
    GUICtrlSetOnEvent($bFAkt, "BAkt")
    GUICtrlSetOnEvent($bFAll, "BAll")
    GUICtrlSetOnEvent($mFileOpen, "_File_Open")
    ;GUICtrlSetOnEvent($bSetInput, "SetInput")
    GUICtrlSetLimit($SchriftG, 99)
    GUICtrlSetLimit($iInput, 1)
    GUICtrlSetFont($iInput, 26)
    GUICtrlSetFont($lLabel, 10, -1, 4)
    GUICtrlSetFont($lLabel2, 10, -1, 4)
    ;GUICtrlSetData($iInput, StringUpper($aString[$cDataCount]))
    GUICtrlSetState($cDaten, $GUI_CHECKED)
    GUICtrlSetState($cBilder, $GUI_CHECKED)
    GUICtrlSetStyle($bFAll, $BS_FLAT)
    $bAll = 1
    $bAkt = 0
    $x = 0
    For $a = 1 To $var[0][0]
    If StringInStr($var[$a][0], 'Bold', 1) = False And StringInStr($var[$a][0], 'Italic', 1) = False _
    And StringInStr($var[$a][0], 'MT Extra', 1) = False Then
    $nName = $var[$a][0]
    _ArrayAdd($fName, $nName)
    $aItems[$x] = GUICtrlCreateListViewItem($x & '|' & $var[$a][1] & '|' & $nName, $listview)
    GUICtrlSetOnEvent($aItems[$x], "HandleClicks")
    $x = $x + 1
    EndIf
    Next
    $fName[0] = $x
    $x = 0
    $cFonts = _GUICtrlListView_GetItemCount($listview)
    _GUICtrlListView_SetSelectionMark($listview, 0)
    $sTrim = _GUICtrlListView_GetSelectionMark($listview)
    _GUICtrlListView_ClickItem($listview, 0, "left", False, 1)
    $pList = _GUICtrlListView_GetSelectedColumn($listview)
    While 1
    $rAktList = GUICtrlRead($listview)
    ;MsgBox(0, '', $pList)
    $sgr = GUICtrlRead($SchriftG)
    If $sgr <> $sgrA Then
    _Update()
    $sgrA = $sgr
    EndIf
    $input = GUICtrlRead($iInput)
    Sleep(100)
    WEnd
    ;~ ;Funktionen
    Func _Update()
    $rInput = $aString[$cDataCount]
    Global $rInput1 = StringUpper($rInput)
    Global $rInput2 = StringLower($rInput)
    Global $sgr = GUICtrlRead($SchriftG)
    _Paint($rInput1, $rInput2, $sTrim, $sgr)
    EndFunc ;==>_Update
    Func _Paint($rInput1, $rInput2, $sTrim, $sgr)
    _GDIPlus_Startup()
    Global $hGraphics1 = _GDIPlus_GraphicsCreateFromHWND($hEdit1)
    Global $hGraphics2 = _GDIPlus_GraphicsCreateFromHWND($hEdit2)
    Global $hBmpBuffer1 = _GDIPlus_BitmapCreateFromGraphics(100, 100, $hGraphics1)
    Global $hBmpBuffer2 = _GDIPlus_BitmapCreateFromGraphics(100, 100, $hGraphics2)
    Global $hGfxBuffer1 = _GDIPlus_ImageGetGraphicsContext($hBmpBuffer1)
    Global $hGfxBuffer2 = _GDIPlus_ImageGetGraphicsContext($hBmpBuffer2)
    Global $hPen = _GDIPlus_PenCreate(0xFF00FF00)
    Global $hBrush = _GDIPlus_BrushCreateSolid(0xFF000000)
    _GDIPlus_GraphicsSetSmoothingMode($hGfxBuffer1, 2)
    _GDIPlus_GraphicsSetSmoothingMode($hGfxBuffer2, 2)
    _GDIPlus_GraphicsClear($hGfxBuffer1, 0xFFFFFFFF)
    _GDIPlus_GraphicsClear($hGfxBuffer2, 0xFFFFFFFF)
    _Zentriere($rInput1, 45, 45, $sgr, $sTrim, $hGfxBuffer1)
    _Zentriere($rInput2, 45, 45, $sgr, $sTrim, $hGfxBuffer2)
    _GDIPlus_GraphicsDrawImage($hGraphics1, $hBmpBuffer1, 0, 0)
    _GDIPlus_GraphicsDrawImage($hGraphics2, $hBmpBuffer2, 0, 0)
    _release()
    EndFunc ;==>_Paint
    Func _StartButton() ;Daten einlesen und speichern
    If $bAkt = 1 And $bAll = 0 Then
    _AktFont()
    ElseIf $bAll = 1 And $bAkt = 0 Then
    For $g = 1 To $aString[0]
    $rInput = $aString[$g]
    $rInput1 = StringUpper($rInput)
    $rInput2 = StringLower($rInput)
    _Paint($rInput1, $rInput2, $sTrim, $sgr)
    _AktFont()
    Next
    EndIf
    EndFunc ;==>_StartButton
    Func _AktFont()
    $sgr = GUICtrlRead($SchriftG) ;Schriftgrösse ermitteln
    $File1 = @ScriptDir & "\coords\" & $sTrim & "_" & $sgr & "_(" & $rInput1 & ")_Upper_coords.txt"
    $File2 = @ScriptDir & "\coords\" & $sTrim & "_" & $sgr & "_(" & $rInput2 & ")_Lower_coords.txt"
    If FileExists($File1) Or FileExists($File2) Then
    If GUICtrlRead($cOW) = 1 Then
    _FW_RAW($hEdit1, $File1)
    _FW_RAW($hEdit2, $File2)
    Else
    $FAsk1 = MsgBox(4, $rInput1 & '/' & $rInput1, $File1 & @CRLF & "Exists" & @CRLF & @CRLF & 'Overwrite?')
    If $FAsk1 = 6 Then ;Wenn Ja dann
    _FW_RAW($hEdit1, $File1)
    _FW_RAW($hEdit2, $File2)
    ElseIf $FAsk1 = 7 Then ;Wenn Nein dann
    ;
    EndIf
    EndIf
    Else
    _FW_RAW($hEdit1, $File1)
    _FW_RAW($hEdit2, $File2)
    EndIf
    ;_Update()
    EndFunc ;==>_AktFont
    Func _FW_RAW($hEdit, $File) ;Pixelkoordinaten in Datei Speichern(Returns Array)
    Local $aXY[1]
    FileOpen($File, 10)
    For $iX = 0 To 100
    For $iY = 0 To 100
    If Dec(PixelGetColor($iX, $iY, $hEdit)) < Dec('999999') Then
    FileWrite($File, $iX & "," & $iY & @CRLF)
    EndIf
    Next
    Next
    FileClose($File)
    EndFunc ;==>_FW_RAW
    Func SpecialEvents()
    Select
    Case @GUI_CtrlId = $GUI_EVENT_CLOSE
    ;cleanup()
    Exit
    EndSelect
    EndFunc ;==>SpecialEvents
    Func AlleDaten()
    $sgr = GUICtrlRead($SchriftG)
    For $f = 1 To $fName[0]
    $sTrim = $fName[$f]
    ConsoleWrite($sTrim & @CRLF)
    For $g = 1 To $aString[0]
    $rInput = $aString[$g]
    $rInput1 = StringUpper($rInput)
    $rInput2 = StringLower($rInput)
    $File1 = @ScriptDir & "\coords\" & $sTrim & "_" & $sgr & "_(" & $rInput1 & ")_Upper_coords.txt"
    $File2 = @ScriptDir & "\coords\" & $sTrim & "_" & $sgr & "_(" & $rInput2 & ")_Lower_coords.txt"
    FileOpen($File1, 10)
    FileOpen($File2, 10)
    _Paint($rInput1, $rInput2, $sTrim, $sgr)
    Sleep(100)
    For $iX = 0 To 100 - 1
    For $iY = 0 To 100 - 1
    $iPixelColor1 = PixelGetColor($iX, $iY, $hEdit1)
    $iPixelColor2 = PixelGetColor($iX, $iY, $hEdit2)
    If Dec($iPixelColor1) < Dec('999999') Then
    FileWrite($File1, $iX & "," & $iY & @CRLF)
    EndIf
    If Dec($iPixelColor2) < Dec('999999') Then
    FileWrite($File2, $iX & "," & $iY & @CRLF)
    EndIf
    Next
    Next
    FileClose($File1)
    FileClose($File1)
    Next
    Next
    EndFunc ;==>AlleDaten
    Func HandleClicks()
    $aktSel = GUICtrlRead(GUICtrlRead($listview))
    $aList = StringSplit($aktSel, '|')
    $sTrim = StringTrimRight($aList[3], 0)
    _Update()
    EndFunc ;==>HandleClicks
    Func UP()
    Local $cNUMCount
    If $cDataCount < $aString[0] Then
    $cDataCount = $cDataCount + 1
    $cNUMCount = $cNUMCount + 1
    _Update()
    EndIf
    EndFunc ;==>UP
    Func DOWN()
    Local $cNUMCount
    If $cDataCount >= 2 Then
    $cDataCount = $cDataCount - 1
    _Update()
    EndIf
    EndFunc ;==>DOWN
    Func BAll()
    $bAll = 1
    $bAkt = 0
    GUICtrlSetStyle($bFAll, $BS_FLAT)
    GUICtrlSetStyle($bFAkt, $BS_DEFPUSHBUTTON)
    EndFunc ;==>BAll
    Func BAkt()
    $bAll = 0
    $bAkt = 1
    GUICtrlSetStyle($bFAkt, $BS_FLAT)
    GUICtrlSetStyle($bFAll, $BS_DEFPUSHBUTTON)
    EndFunc ;==>BAkt
    Func SchriftGR()
    $sgr = GUICtrlRead($SchriftG)
    If $sgr <= 20 Then
    GUICtrlSetData($SchriftG, 21)
    EndIf
    If $sgr >= 100 Then
    GUICtrlSetData($SchriftG, 99)
    EndIf
    _Update()
    EndFunc ;==>SchriftGR
    Func _FontGetList($i_opt = 0)
    Dim $a_FontNames[1], $a_FontNamesFiles[1][1], $i = 1
    If @OSType = "WIN32_NT" Then $regkey = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts"
    If @OSType = "WIN32_WINDOWS" Then $regkey = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Fonts"
    While 1
    $s_temp = RegEnumVal($regkey, $i)
    If @error <> 0 Then ExitLoop
    $s_temp2 = RegRead($regkey, $s_temp)
    $s_temp = StringRegExpReplace($s_temp, "\s\(.*?\)(\s*)?", "")
    If $i_opt = 0 Then
    ReDim $a_FontNames[($i + 1)]
    $a_FontNames[$i] = $s_temp
    ElseIf $i_opt = 1 Then
    ReDim $a_FontNames[($i + 1)]
    $a_FontNames[$i] = $s_temp & "|" & $s_temp2
    EndIf
    $i = $i + 1
    WEnd
    If $i_opt = 0 Then
    _ArraySort($a_FontNames)
    $a_FontNames[0] = (UBound($a_FontNames) - 1)
    Return ($a_FontNames)
    ElseIf $i_opt = 1 Then
    _ArraySort($a_FontNames) ; Sort with font names and files as a single array
    For $i = 1 To (UBound($a_FontNames) - 1) ; then split it up into 2D, so they will be alphabatized together.
    $s_fontsplit = StringSplit($a_FontNames[$i], "|")
    If IsArray($s_fontsplit) = 1 Then
    ReDim $a_FontNamesFiles[($i + 1)][2]
    $a_FontNamesFiles[$i][0] = $s_fontsplit[1]
    $a_FontNamesFiles[$i][1] = $s_fontsplit[2]
    EndIf
    Next
    $a_FontNamesFiles[0][0] = (UBound($a_FontNamesFiles) - 1)
    Return ($a_FontNamesFiles)
    EndIf
    EndFunc ;==>_FontGetList
    Func _GetRegValues($HKEY)
    Local $oMyError = ObjEvent("AutoIt.Error", "MyErrFunc")
    If StringInStr($HKEY, '\') Then
    If StringRight($HKEY, 1) = '\' Then
    $HKEY = StringTrimRight($HKEY, 1)
    Local $strKeyPath = ''
    Else
    Local $strKeyPath = StringRight($HKEY, StringLen($HKEY) - StringInStr($HKEY, '\'))
    $HKEY = StringLeft($HKEY, StringInStr($HKEY, '\') - 1)
    EndIf
    Else
    Local $strKeyPath = ''
    EndIf
    Select
    Case $HKEY = "HKEY_LOCAL_MACHINE" Or $HKEY = "HKLM"
    $HKEY = 0x80000002
    Case $HKEY = "HKEY_USERS" Or $HKEY = "HKU"
    $HKEY = 0x80000003
    Case $HKEY = "HKEY_CURRENT_USER" Or $HKEY = "HKCU"
    $HKEY = 0x80000001
    Case $HKEY = "HKEY_CLASSES_ROOT" Or $HKEY = "HKCR"
    $HKEY = 0x80000000
    Case $HKEY = "HKEY_CURRENT_CONFIG" Or $HKEY = "HKCC"
    $HKEY = 0x80000005
    EndSelect
    Local $oReg = ObjGet("winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv")
    Local $arrValueNames, $arrValueTypes, $strValue
    $oReg.EnumValues($HKEY, $strKeyPath, $arrValueNames, $arrValueTypes)
    $OEvent = ObjEvent($oReg, "EnumValues")
    If Not IsArray($arrValueNames) Then Return ''
    Local $arOut[UBound($arrValueNames)][3]
    For $i = 0 To UBound($arrValueNames) - 1
    $arOut[$i][0] = $arrValueNames[$i]
    Switch $arrValueTypes[$i]
    Case 1
    $arOut[$i][1] = 'REG_SZ'
    $oReg.GetStringValue($HKEY, $strKeyPath, $arrValueNames[$i], $strValue)
    Case 2
    $arOut[$i][1] = 'REG_EXPAND_SZ'
    $oReg.GetExpandedStringValue($HKEY, $strKeyPath, $arrValueNames[$i], $strValue)
    Case 3
    $arOut[$i][1] = 'REG_BINARY'
    $oReg.GetBinaryValue($HKEY, $strKeyPath, $arrValueNames[$i], $strValue)
    Case 4
    $arOut[$i][1] = 'REG_DWORD'
    $oReg.GetStringValue($HKEY, $strKeyPath, $arrValueNames[$i], $strValue)
    Case 7
    $arOut[$i][1] = 'REG_MULTI_SZ'
    $oReg.GetMultiStringValue($HKEY, $strKeyPath, $arrValueNames[$i], $strValue)
    EndSwitch
    $arOut[$i][2] = $strValue
    Next
    Return $arOut
    EndFunc ;==>_GetRegValues
    Func _Zentriere($sString, $iX, $iY, $fSize, $sFont, $hGfxBuffer)
    Local $aResult = DllCall($ghGDIPDLL, "uint", "GdipCreatePath", "int", 0, "int*", 0)
    Local $hPath = $aResult[2]
    Local $hFormat = _GDIPlus_StringFormatCreate()
    Local $hFamily = _GDIPlus_FontFamilyCreate($sFont)
    Local $tLayout = _GDIPlus_RectFCreate(0, 0, 0, 0)
    Local $tBounds = _GDIPlus_RectFCreate(0, 0, 0, 0)
    DllCall($ghGDIPDLL, "uint", "GdipAddPathString", "hwnd", $hPath, "wstr", $sString, "int", -1, "hwnd", $hFamily, "int", 0, "float", $fSize, "ptr", DllStructGetPtr($tLayout), "hwnd", $hFormat)
    DllCall($ghGDIPDLL, "uint", "GdipGetPathWorldBounds", "hwnd", $hPath, "ptr", DllStructGetPtr($tBounds), "hwnd", 0, "hwnd", 0)
    Local $fRectX = DllStructGetData($tBounds, "X")
    Local $fRectY = DllStructGetData($tBounds, "Y")
    Local $fRectW = DllStructGetData($tBounds, "Width")
    Local $fRectH = DllStructGetData($tBounds, "Height")
    Local $hMatrix = _GDIPlus_MatrixCreate()
    _GDIPlus_MatrixTranslate($hMatrix, -$fRectX - $fRectW / 2 + $iX, -$fRectY - $fRectH / 2 + $iY)
    DllCall($ghGDIPDLL, "uint", "GdipTransformPath", "hwnd", $hPath, "hwnd", $hMatrix)
    _GDIPlus_MatrixDispose($hMatrix)
    DllCall($ghGDIPDLL, "uint", "GdipFillPath", "hwnd", $hGfxBuffer, "hwnd", $hBrush, "hwnd", $hPath)
    _GDIPlus_FontFamilyDispose($hFamily)
    _GDIPlus_StringFormatDispose($hFormat)
    DllCall($ghGDIPDLL, "uint", "GdipDeletePath", "hwnd", $hPath)
    EndFunc ;==>_Zentriere
    Func _File_Open()
    $pFile = FileOpenDialog('Pattern laden', @ScriptDir & "\Coords\", "Text (*.txt)")
    $cFL = _FileCountLines($pFile)
    Global $Pattern[$cFL + 1]
    $Pattern[0] = 'X,Y'
    For $i = 1 To $cFL
    $Pattern[$i] = FileReadLine($pFile, $i)
    Next
    _SetPixel($rInput1, $rInput2, $sTrim, $sgr, $Pattern)
    EndFunc
    Func _SetPixel($rInput1, $rInput2, $sTrim, $sgr, $Pattern)
    _GDIPlus_Startup()
    $hGraphics1 = _GDIPlus_GraphicsCreateFromHWND($hEdit1)
    $hGraphics2 = _GDIPlus_GraphicsCreateFromHWND($hEdit2)
    $hBmpBuffer1 = _GDIPlus_BitmapCreateFromGraphics(100, 100, $hGraphics1)
    $hBmpBuffer2 = _GDIPlus_BitmapCreateFromGraphics(100, 100, $hGraphics2)
    $hGfxBuffer1 = _GDIPlus_ImageGetGraphicsContext($hBmpBuffer1)
    $hGfxBuffer2 = _GDIPlus_ImageGetGraphicsContext($hBmpBuffer2)
    $hPen = _GDIPlus_PenCreate(0xFF000000)
    $hBrush = _GDIPlus_BrushCreateSolid(0xFF000000)
    _GDIPlus_GraphicsSetSmoothingMode($hGfxBuffer1, 1)
    _GDIPlus_GraphicsSetSmoothingMode($hGfxBuffer2, 1)
    _GDIPlus_GraphicsClear($hGfxBuffer1, 0xFFFFFFFF)
    _GDIPlus_GraphicsClear($hGfxBuffer2, 0xFFFFFFFF)
    For $i = 1 To UBound($Pattern) - 1
    $coXY = StringSplit($Pattern[$i], ',')
    ConsoleWrite($coXY[1] & ',' & $coXY[2] & @CRLF)
    _GDIPlus_GraphicsDrawLine($hGfxBuffer1, $coXY[1] - 5, $coXY[2] - 5, $coXY[1] - 6, $coXY[2] - 6 ,$hPen)
    _GDIPlus_GraphicsDrawLine($hGfxBuffer2, $coXY[1] - 5, $coXY[2] - 5, $coXY[1] - 6, $coXY[2] - 6 ,$hPen)
    Next
    _GDIPlus_GraphicsDrawImage($hGraphics1, $hBmpBuffer1, 0, 0)
    _GDIPlus_GraphicsDrawImage($hGraphics2, $hBmpBuffer2, 0, 0)
    _release()
    EndFunc
    Func _release()
    _GDIPlus_PenDispose($hPen)
    _GDIPlus_BrushDispose($hBrush)
    _GDIPlus_GraphicsDispose($hGfxBuffer1)
    _GDIPlus_GraphicsDispose($hGfxBuffer2)
    _GDIPlus_BitmapDispose($hBmpBuffer1)
    _GDIPlus_BitmapDispose($hBmpBuffer2)
    _GDIPlus_GraphicsDispose($hGraphics1)
    _GDIPlus_GraphicsDispose($hGraphics2)
    _GDIPlus_Shutdown()
    EndFunc ;==>_release

    [/autoit]
  • Gesichtserkennung

    • Morrison
    • 6. April 2012 um 01:13

    Hi!

    Es gibt unter C++ die Bibliothek OpenCV wo "ObjectDetection" und somit Gesichtserkennung schon implementiert ist! Man könnte sich die Funktionen mithilfe der OpenCV .dll´s zunuze machen!

    Hier mal ein Link!

  • Grafikobjekt skelettieren / C++ OpenCV Code

    • Morrison
    • 21. März 2012 um 21:04

    Hallo,

    ich möchte mir ein kleines Grafik-Tool basteln! Jetzt habe ich einen Code für das Skelettieren eines Objektes in OpenCV gefunden! Kann man dies einfach nach AutoIt übersetzen? Oder kann man mir sagen wie ich dieses Script kompilieren kann damit ich es nutzen kann??

    Script:

    Spoiler anzeigen
    [autoit]

    cv::Mat skel(img.size(), CV_8UC1, cv::Scalar(0));
    cv::Mat temp;
    cv::Mat eroded;

    [/autoit] [autoit][/autoit] [autoit]

    cv::Mat element = cv::getStructuringElement(cv::MORPH_CROSS, cv::Size(3, 3));

    [/autoit] [autoit][/autoit] [autoit]

    bool done;
    do
    {
    cv::erode(img, eroded, element);
    cv::dilate(eroded, temp, element); // temp = open(img)
    cv::subtract(img, temp, temp);
    cv::bitwise_or(skel, temp, skel);
    eroded.copyTo(img);

    [/autoit] [autoit][/autoit] [autoit]

    done = (cv::norm(img) == 0);
    } while (!done);

    [/autoit]


    Example

  • GDI+, Backbuffer und _GDIPlus_MatrixTranslate

    • Morrison
    • 3. März 2012 um 07:42

    Hi!

    Hab jetzt eine Seite gefunden die genau beschreibt was ich brauche!!

    Versuch mir damit was zu basteln..wär aber kewl wenn jemand schneller ist!

    Link!

  • GDI+, Backbuffer und _GDIPlus_MatrixTranslate

    • Morrison
    • 1. März 2012 um 09:23

    Hallo,

    ich habe es nun irgendwie geschafft die "Lettern" in die Mitte zu bringen, jedoch bekomm ich des mit dem Backbuffer und der Matrix nicht hin. Wie bewerkstellige ich es das nur das zentrierte Zeichen gezeichnet wird??

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>
    #include <ButtonConstants.au3>
    #include <ComboConstants.au3>
    #include <EditConstants.au3>
    #include <File.au3>
    #include <Fontconstants.au3>
    #include <GDIPlus.au3>
    #include <GuiButton.au3>
    #include <GUIConstantsEx.au3>
    #include <GuiListView.au3>
    #include <ListviewConstants.au3>
    #include <ProgressConstants.au3>
    ;#include <RegFunc.au3>
    #include <StaticConstants.au3>
    #include <UpDownConstants.au3>
    #include <WindowsConstants.au3>
    Opt("GUIOnEventMode", 1)
    Opt("PixelCoordMode", 0)
    ;Data
    $dString = 'a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,ä,ö,ü,1,2,3,4,5,6,7,8,9,0'
    $aString = StringSplit($dString, ',')
    Local $data[3][$aString[0] + 1]
    Local $rLinks, $rRechts, $rOben, $rUnten, $rWidth, $rHeight
    Local $aCoords1[100][100]
    Local $aCoords2[100][100]
    Local $aARect[1][5]
    For $i = 1 To $aString[0]
    $data[0][$i] = $i
    $data[1][$i] = StringUpper($aString[$i])
    $data[2][$i] = StringLower($aString[$i])
    Next
    $cDataCount = 1 ;Letter Stellenzähler
    $data[0][0] = (UBound($data, 2) - 1)
    ;Fonts
    $FontList = _FileListToArray(@WindowsDir & '\Fonts', '*.ttf', 1);Schriftarten aus Windows Fonts Ordner holen
    $var = _GetRegValues('HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts');Schriftartennamen aus Windows Registry holen
    Dim $aItems[($FontList[0] + 1)]
    $x = 1
    $sgrA = 50
    #region ### START Koda GUI section ### Form=C:\Users\IBM\Desktop\AU3_OCR_new\Form1.kxf
    $msg = GUICreate("Form1", 680, 245, 215, 124)
    $Datei = GUICtrlCreateMenu("&Datei")
    $MenuItem1 = GUICtrlCreateMenuItem("Optionen" & @TAB & "", $Datei)
    $MenuItem2 = GUICtrlCreateMenuItem("Exit" & @TAB & "", $Datei)
    $Hilfe = GUICtrlCreateMenu("&Hilfe")
    $lLabel = GUICtrlCreateLabel('Speichern', 264, 10, 60, 20)
    $lLabel2 = GUICtrlCreateLabel('Input:', 277, 66, 60, 20)
    $listview = GUICtrlCreateListView("Nr.|Datei|Name", 337, 25, 335, 157)
    GUICtrlCreateLabel('Suchen: ', 480, 4, 60, 20)
    $sSuche = GUICtrlCreateInput('', 526, 1, 110, 20)
    $iInput = GUICtrlCreateEdit('', 269, 83, 50, 50, BitOR($ES_CENTER, $ES_WANTRETURN, $WS_BORDER))
    _GDIPlus_Startup()
    $gWin1 = GUICtrlCreatePic('', 10, 32, 100, 100, $SS_SUNKEN)
    $gWin2 = GUICtrlCreatePic('', 151, 32, 100, 100, $SS_SUNKEN)
    $hPic1 = GUICtrlGetHandle($gWin1)
    $hPic2 = GUICtrlGetHandle($gWin2)
    $hGfx1 = _GDIPlus_GraphicsCreateFromHWND($hPic1)
    $hGfx2 = _GDIPlus_GraphicsCreateFromHWND($hPic2)
    $hPen = _GDIPlus_PenCreate(0xFF000000)
    Global $hBrush = _GDIPlus_BrushCreateSolid(0xFF000000)
    GUICtrlCreateLabel('Daten: ', 264, 30, 50, 20)
    GUICtrlCreateLabel('Bilder: ', 264, 45, 50, 20)
    $cDaten = GUICtrlCreateCheckbox('', 312, 32, 10, 10)
    $cBilder = GUICtrlCreateCheckbox('', 312, 47, 10, 10)
    $SchriftG = GUICtrlCreateInput($sgrA, 113, 70, 35, 20, $ES_NUMBER)
    $updwnSGR = GUICtrlCreateUpdown($SchriftG)
    $bUp = GUICtrlCreateButton("Up", 113, 32, 35, 35, -1, $WS_EX_CLIENTEDGE)
    $bDown = GUICtrlCreateButton("Dwn", 113, 97, 35, 35, -1, $WS_EX_CLIENTEDGE)
    $bStart = GUICtrlCreateButton("Start", 20, 156, 80, 25, -1, $WS_EX_STATICEDGE)
    $bAbbruch = GUICtrlCreateButton("Abbruch", 160, 156, 80, 25, -1, $WS_EX_STATICEDGE)
    $bDaten = GUICtrlCreateButton("Alle Daten", 412, 188, 190, 30)
    $bSetInput = GUICtrlCreateButton('Set', 274, 136, 40, 18)
    $Progress1 = GUICtrlCreateProgress(11, 139, 238, 10, -1, $WS_EX_STATICEDGE)
    GUISetState(@SW_SHOW)
    #endregion ### END Koda GUI section ###
    _GUICtrlListView_SetColumnWidth($listview, 0, 28)
    _GUICtrlListView_SetColumnWidth($listview, 1, 40)
    _GUICtrlListView_SetColumnWidth($listview, 2, 180)
    GUISetOnEvent($GUI_EVENT_CLOSE, "SpecialEvents")
    GUICtrlSetOnEvent($bStart, "start")
    GUICtrlSetOnEvent($bUp, "UP")
    GUICtrlSetOnEvent($bDown, "DOWN")
    GUICtrlSetOnEvent($listview, "HandleClicks")
    GUICtrlSetOnEvent($updwnSGR, "SchriftGR")
    GUICtrlSetOnEvent($bDaten, "AlleDaten")
    ;GUICtrlSetOnEvent($bSetInput, "SetInput")
    GUICtrlSetLimit($SchriftG, 99)
    GUICtrlSetLimit($iInput, 1)
    GUICtrlSetFont($iInput, 26)
    GUICtrlSetFont($lLabel, 10, -1, 4)
    GUICtrlSetFont($lLabel2, 10, -1, 4)
    ;GUICtrlSetData($iInput, StringUpper($aString[$cDataCount]))
    GUICtrlSetState($cDaten, $GUI_CHECKED)
    GUICtrlSetState($cBilder, $GUI_CHECKED)
    ;GUI Liste schreiben
    For $a = 1 To UBound($var)
    If StringRight($var[$a - 1][2], 3) = 'ttf' Then
    If StringInStr($var[$a - 1][0], 'Bold', 1) = False And StringInStr($var[$a - 1][0], 'Italic', 1) = False _
    And StringInStr($var[$a - 1][0], 'MT Extra', 1) = False Then
    $nName = StringReplace($var[$a - 1][0], '(TrueType)', '', 1)
    $aItems[$x] = GUICtrlCreateListViewItem($x & '|' & $var[$a - 1][2] & '|' & $nName, $listview)
    GUICtrlSetOnEvent($aItems[$x], "HandleClicks")
    $x = $x + 1
    EndIf
    EndIf
    Next
    $x = 0
    $cFonts = _GUICtrlListView_GetItemCount($listview)
    _GUICtrlListView_SetSelectionMark($listview, 0)
    $sTrim = _GUICtrlListView_GetSelectionMark($listview)
    _GUICtrlListView_ClickItem($listview, 0, "left", False, 1)
    $pList = _GUICtrlListView_GetSelectedColumn($listview)

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    $rAktList = GUICtrlRead($listview)
    ;MsgBox(0, '', $pList)
    $sgr = GUICtrlRead($SchriftG)
    If $sgr <> $sgrA Then
    Drawing()
    $sgrA = $sgr
    EndIf
    $input = GUICtrlRead($iInput)
    ;Sleep(50)
    WEnd
    ;Funktionen
    Func start()
    $sgr = GUICtrlRead($SchriftG)
    $File1 = FileOpen(@ScriptDir & "\coords\" & $sTrim & "_" & $sgr & "_Upper_coords.txt", 10)
    $File2 = FileOpen(@ScriptDir & "\coords\" & $sTrim & "_" & $sgr & "_Lower_coords.txt", 10)
    ;Fenster Farbwert auslesen
    Local $wh1, $wh2
    ;_ArrayDisplay($rect)
    $wh1 = StringSplit($aARect[0][4], '/')
    $wh2 = StringSplit($aARect[1][4], '/')
    For $iX = 0 To $wh1[1]
    For $iY = 0 To $wh1[2]
    $iPixelColor1 = PixelGetColor($iX, $iY, GUICtrlGetHandle($gWin1))
    If Dec($iPixelColor1) < Dec('999999') Then
    FileWrite($File1, $iX & "," & $iY & @CRLF)
    EndIf
    Next
    Next
    For $iX = 0 To $wh2[1]
    For $iY = 0 To $wh2[2]
    $iPixelColor2 = PixelGetColor($iX, $iY, GUICtrlGetHandle($gWin2))
    If Dec($iPixelColor2) < Dec('999999') Then
    FileWrite($File2, $iX & "," & $iY & @CRLF)
    EndIf
    Next
    Next
    ;~ For $iX = 0 To 100 - 1
    ;~ For $iY = 0 To 100 - 1
    ;~ $iPixelColor1 = PixelGetColor($iX, $iY, GUICtrlGetHandle($gWin1))
    ;~ $iPixelColor2 = PixelGetColor($iX, $iY, GUICtrlGetHandle($gWin2))
    ;~ If Dec($iPixelColor1) < Dec('999999') Then
    ;~ FileWrite($File1, $iX & "," & $iY & @CRLF)
    ;~ EndIf
    ;~ If Dec($iPixelColor2) < Dec('999999') Then
    ;~ FileWrite($File2, $iX & "," & $iY & @CRLF)
    ;~ EndIf
    ;~ Next
    ;~ Next
    FileClose($File1)
    FileClose($File1)
    Drawing()
    EndFunc ;==>start
    Func Drawing()
    Local $iRectWidth, $iRectHeight, $aCtrlPos1
    GUICtrlSetColor($gWin1, 0)
    GUICtrlSetColor($gWin2, 0)
    $rInput = $aString[$cDataCount]
    $rInput1 = StringUpper($rInput)
    $rInput2 = StringLower($rInput)
    $sgr = GUICtrlRead($SchriftG)
    ; Größe des Graphic-Controls ermitteln (Noch 100x100, aber wer weiß, wann sich das ändert)
    $aCtrlPos1 = ControlGetPos($msg, '', $gWin1)
    $aCtrlPos2 = ControlGetPos($msg, '', $gWin2)
    $iRectWidth = $aCtrlPos1[2]
    $iRectHeight = $aCtrlPos1[3]
    _GDIPlus_GraphicsClear($hGfx1, 0xFFFFFFFF)
    _GDIPlus_GraphicsClear($hGfx2, 0xFFFFFFFF)
    $hBitmap1 = _GDIPlus_BitmapCreateFromGraphics(100, 100, $hGfx1)
    $hBitmap2 = _GDIPlus_BitmapCreateFromGraphics(100, 100, $hGfx2)
    $hBackbuffer1 = _GDIPlus_ImageGetGraphicsContext($hBitmap1)
    $hBackbuffer2 = _GDIPlus_ImageGetGraphicsContext($hBitmap2)
    _GDIPlus_GraphicsDrawString($hBackbuffer1, $rInput1, 0, 0, $sTrim, $sgr)
    _GDIPlus_GraphicsDrawString($hBackbuffer2, $rInput2, 0, 0, $sTrim, $sgr)
    _Zentriere($rInput1, 50, 50, $sgr, $sTrim, $hBackbuffer1)
    _Zentriere($rInput2, 50, 50, $sgr, $sTrim, $hBackbuffer2)
    _GDIPlus_GraphicsDrawImage($hGfx1, $hBitmap1, 0, 0)
    _GDIPlus_GraphicsDrawImage($hGfx2, $hBitmap2, 0, 0)

    [/autoit] [autoit][/autoit] [autoit]

    EndFunc ;==>Drawing
    ;SpecialEvents
    Func SpecialEvents()
    Select
    Case @GUI_CtrlId = $GUI_EVENT_CLOSE
    cleanup()
    Exit
    EndSelect
    EndFunc ;==>SpecialEvents
    Func _Zentriere($sString, $iX, $iY, $fSize, $sFont, $hGfxBuffer)
    Local $aResult = DllCall($ghGDIPDll, "uint", "GdipCreatePath", "int", 0, "int*", 0)
    Local $hPath = $aResult[2]
    Local $hFormat = _GDIPlus_StringFormatCreate()
    Local $hFamily = _GDIPlus_FontFamilyCreate($sFont)
    Local $tLayout = _GDIPlus_RectFCreate(0, 0, 0, 0)
    Local $tBounds = _GDIPlus_RectFCreate(0, 0, 0, 0)
    DllCall($ghGDIPDll, "uint", "GdipAddPathString", "hwnd", $hPath, "wstr", $sString, "int", -1, "hwnd", $hFamily, "int", 0, "float", $fSize, "ptr", DllStructGetPtr($tLayout), "hwnd", $hFormat)
    DllCall($ghGDIPDll, "uint", "GdipGetPathWorldBounds", "hwnd", $hPath, "ptr", DllStructGetPtr($tBounds), "hwnd", 0, "hwnd", 0)
    Local $fRectX = DllStructGetData($tBounds, "X")
    Local $fRectY = DllStructGetData($tBounds, "Y")
    Local $fRectW = DllStructGetData($tBounds, "Width")
    Local $fRectH = DllStructGetData($tBounds, "Height")
    Local $hMatrix = _GDIPlus_MatrixCreate()
    _GDIPlus_MatrixTranslate($hMatrix, -$fRectX - $fRectW / 2 + $iX, -$fRectY - $fRectH / 2 + $iY)
    DllCall($ghGDIPDll, "uint", "GdipTransformPath", "hwnd", $hPath, "hwnd", $hMatrix)
    _GDIPlus_MatrixDispose($hMatrix)
    DllCall($ghGDIPDll, "uint", "GdipFillPath", "hwnd", $hGfxBuffer, "hwnd", $hBrush, "hwnd", $hPath)
    _GDIPlus_FontFamilyDispose($hFamily)
    _GDIPlus_StringFormatDispose($hFormat)
    DllCall($ghGDIPDll, "uint", "GdipDeletePath", "hwnd", $hPath)
    EndFunc ;==>_Zentriere
    Func AlleDaten()
    ;_tRect()
    ;~ $sgr = GUICtrlRead($SchriftG)
    ;~ $File1 = FileOpen(@ScriptDir & "\coords\" & $sTrim & "_" & $sgr & "_Upper_coords.txt", 10)
    ;~ $File2 = FileOpen(@ScriptDir & "\coords\" & $sTrim & "_" & $sgr & "_Lower_coords.txt", 10)
    ;~ For $z = 1 To $data[0][0]
    ;~ For $iX = 0 To 100 - 1
    ;~ For $iY = 0 To 100 - 1
    ;~ $iPixelColor1 = PixelGetColor($iX, $iY, GUICtrlGetHandle($gWin1))
    ;~ $iPixelColor2 = PixelGetColor($iX, $iY, GUICtrlGetHandle($gWin2))
    ;~ If Dec($iPixelColor1) < Dec('999999') Then
    ;~ FileWrite($File1, $iX & "," & $iY & @CRLF)
    ;~ EndIf
    ;~ If Dec($iPixelColor2) < Dec('999999') Then
    ;~ FileWrite($File2, $iX & "," & $iY & @CRLF)
    ;~ EndIf
    ;~ Next
    ;~ Next
    ;~ Next
    ;~ FileClose($File1)
    ;~ FileClose($File1)
    EndFunc ;==>AlleDaten
    ;HandleClicks
    Func HandleClicks()
    $aktSel = GUICtrlRead(GUICtrlRead($listview))
    $aList = StringSplit($aktSel, '|')
    $sTrim = StringTrimRight($aList[3], 1)
    ;_ArrayDisplay($aList)
    Drawing()
    EndFunc ;==>HandleClicks
    Func _GDIPlus_GetPixel($hBitmap, $x, $Y)
    Local $result = DllCall($ghGDIPDLL, "int", "GdipBitmapGetPixel", "ptr", $hBitmap, "int", $x, "int", $Y, "dword*", 0)
    If @error Then Return SetError(1, 0, 0)
    Return SetError($result[0], 1, $result[4])
    EndFunc ;==>_GDIPlus_GetPixel
    ;UP()
    Func UP()
    If $cDataCount < $aString[0] Then
    $cDataCount = $cDataCount + 1
    EndIf
    Drawing()
    EndFunc ;==>UP
    ;DOWN()
    Func DOWN()
    If $cDataCount >= 2 Then
    $cDataCount = $cDataCount - 1
    EndIf
    Drawing()
    EndFunc ;==>DOWN
    Func SchriftGR()
    $sgr = GUICtrlRead($SchriftG)
    If $sgr <= 8 Then
    GUICtrlSetData($SchriftG, 8)
    EndIf
    If $sgr >= 99 Then
    GUICtrlSetData($SchriftG, 99)
    EndIf
    Drawing()
    EndFunc ;==>SchriftGR
    Func _GetRegValues($HKEY)
    Local $oMyError = ObjEvent("AutoIt.Error","MyErrFunc")
    If StringInStr($HKEY, '\') Then
    If StringRight($HKEY, 1) = '\' Then
    $HKEY = StringTrimRight($HKEY, 1)
    Local $strKeyPath = ''
    Else
    Local $strKeyPath = StringRight($HKEY, StringLen($HKEY)-StringInStr($HKEY, '\') )
    $HKEY = StringLeft($HKEY, StringInStr($HKEY, '\')-1)
    EndIf
    Else
    Local $strKeyPath = ''
    EndIf
    Select
    Case $HKEY = "HKEY_LOCAL_MACHINE" Or $HKEY = "HKLM"
    $HKEY = 0x80000002
    Case $HKEY = "HKEY_USERS" Or $HKEY = "HKU"
    $HKEY = 0x80000003
    Case $HKEY = "HKEY_CURRENT_USER" Or $HKEY = "HKCU"
    $HKEY = 0x80000001
    Case $HKEY = "HKEY_CLASSES_ROOT" Or $HKEY = "HKCR"
    $HKEY = 0x80000000
    Case $HKEY = "HKEY_CURRENT_CONFIG" Or $HKEY = "HKCC"
    $HKEY = 0x80000005
    EndSelect
    Local $oReg = ObjGet("winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv")
    Local $arrValueNames, $arrValueTypes, $strValue
    $oReg.EnumValues($HKEY, $strKeyPath, $arrValueNames, $arrValueTypes)
    $OEvent = ObjEvent($oReg, "EnumValues")
    If Not IsArray($arrValueNames) Then Return ''
    Local $arOut[UBound($arrValueNames)][3]
    For $i = 0 To UBound($arrValueNames) -1
    $arOut[$i][0] = $arrValueNames[$i]
    Switch $arrValueTypes[$i]
    Case 1
    $arOut[$i][1] = 'REG_SZ'
    $oReg.GetStringValue($HKEY, $strKeyPath, $arrValueNames[$i], $strValue)
    Case 2
    $arOut[$i][1] = 'REG_EXPAND_SZ'
    $oReg.GetExpandedStringValue($HKEY, $strKeyPath, $arrValueNames[$i], $strValue)
    Case 3
    $arOut[$i][1] = 'REG_BINARY'
    $oReg.GetBinaryValue($HKEY, $strKeyPath, $arrValueNames[$i], $strValue)
    Case 4
    $arOut[$i][1] = 'REG_DWORD'
    $oReg.GetStringValue($HKEY, $strKeyPath, $arrValueNames[$i], $strValue)
    Case 7
    $arOut[$i][1] = 'REG_MULTI_SZ'
    $oReg.GetMultiStringValue($HKEY, $strKeyPath, $arrValueNames[$i], $strValue)
    EndSwitch
    $arOut[$i][2] = $strValue
    Next
    Return $arOut
    EndFunc ;==>_GetRegValues
    Func MyErrFunc()
    Return
    Endfunc
    Func cleanup()
    _GDIPlus_PenDispose($hPen)
    _GDIPlus_GraphicsDispose($hGfx1)
    _GDIPlus_GraphicsDispose($hGfx2)
    _GDIPlus_Shutdown()
    EndFunc ;==>cleanup

    [/autoit]

    Update!

    Dateien

    RegFunc.au3 6,27 kB – 283 Downloads
  • Problem mit Array..übergeben?? Dim, Local??

    • Morrison
    • 25. Februar 2012 um 22:29

    Hallo,

    ich habe ein Fenster das ich, je nach X oder Y Zähler, in Rechtecke aufteilen möchte!

    Wenn ich nun mit der Maus auf ein Rechteck klicke soll es sich entweder schwarz(falls weiss) oder weiss(falls schwarz) färben! Jedoch bekomm ich die zuweisung bzw. übergabe mit dem Array nich hin..kann mich jemand anstubsen??


    Update:
    [
    spoiler]

    [autoit]

    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <GDIPlus.au3>
    #include <WinAPI.au3>
    #include <Misc.au3>
    #include <Array.au3>
    Opt("GUICoordMode", 1)
    Opt("MouseCoordMode", 2)
    Opt("PixelCoordMode", 2)
    Local $hDLL = DllOpen("user32.dll")
    $Form1 = GUICreate("Form1", 292, 372, 281, 172)
    $Graphic1 = GUICtrlCreateGraphic(16, 24, 250, 250, BitOR($GUI_SS_DEFAULT_GRAPHIC, $SS_WHITERECT, $SS_SUNKEN))
    $Input1 = GUICtrlCreateInput("", 22, 304, 40, 21, $ES_CENTER, BitOR($WS_EX_CLIENTEDGE, $WS_EX_STATICEDGE))
    $Input2 = GUICtrlCreateInput("", 72, 304, 40, 21, $ES_CENTER, BitOR($WS_EX_CLIENTEDGE, $WS_EX_STATICEDGE))
    $UpDwn1 = GUICtrlCreateUpdown($Input1)
    $UpDwn2 = GUICtrlCreateUpdown($Input2)
    $Label1 = GUICtrlCreateLabel("X-Anzahl", 20, 288, 45, 17)
    $Label2 = GUICtrlCreateLabel("Y-Anzahl", 70, 288, 45, 17)
    GUISetState(@SW_SHOW)
    GUICtrlSetFont($Label1, 8, 400, 5)
    GUICtrlSetFont($Label1, 8, 400, 5)
    GUICtrlSetData($Input1, 5)
    GUICtrlSetData($Input2, 5)
    $cX = GUICtrlRead($Input1)
    $cY = GUICtrlRead($Input2)
    $cK = $cX * $cY
    $width = 250
    $height = 250
    Dim $acK[$cK + 1][4]
    $acK[0][0] = 'links oben X,Y'
    $acK[0][1] = 'rechts unten X,Y'
    $acK[0][2] = 'width/height'
    $acK[0][3] = 'black = 1'
    For $i = 1 To $cK
    $acK[$i][2] = 0
    Next

    [/autoit][autoit][/autoit][autoit]

    _GDIPlus_Startup()
    $hGraphic = _GDIPlus_GraphicsCreateFromHWND($Form1)

    [/autoit][autoit][/autoit][autoit]

    _calc()

    [/autoit][autoit][/autoit][autoit]

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    _END()
    Case $GUI_EVENT_PRIMARYDOWN
    $pos = MouseGetPos()
    $var = PixelGetColor($pos[0], $pos[1])
    $cK = $cX * $cY
    For $i = 1 To $cK
    $lo = StringSplit($acK[$i][0], ',')
    $ru = StringSplit($acK[$i][1], ',')
    $wh = StringSplit($acK[$i][2], ',')
    If _WinAPI_PtInRectEx($pos[0] - 16, $pos[1] - 24, $lo[1], $lo[2], $ru[1], $ru[2]) = True Then
    If $acK[$i][3] = 0 Then
    $acK[$i][3] = 1
    Else
    $acK[$i][3] = 0
    EndIf
    EndIf
    Next
    _draw()
    EndSwitch
    ;X und Y Anzahl/Kästchen begrenzen
    If GUICtrlRead($Input1) >= 26 Then
    GUICtrlSetData($Input1, 25)
    EndIf
    If GUICtrlRead($Input2) >= 26 Then
    GUICtrlSetData($Input2, 25)
    EndIf
    If GUICtrlRead($Input1) <= 0 Then
    GUICtrlSetData($Input1, 1)
    EndIf
    If GUICtrlRead($Input2) <= 0 Then
    GUICtrlSetData($Input2, 1)
    EndIf
    ;Wenn sich Anzahl Kästchen ändert
    If GUICtrlRead($Input1) <> $cX Or GUICtrlRead($Input2) <> $cY Then
    $cX = GUICtrlRead($Input1)
    $cY = GUICtrlRead($Input2)
    _WinAPI_RedrawWindow($Form1)
    _calc()
    EndIf
    WEnd

    [/autoit][autoit][/autoit][autoit]

    Func _calc()
    $wK = $width / $cX
    $hK = $height / $cY
    $cK = $cX * $cY
    Dim $xK[$cX + 1]
    Dim $yK[$cY + 1]
    Dim $acK[$cK + 1][4]
    $acK[0][0] = 'links oben X,Y'
    $acK[0][1] = 'rechts unten X,Y'
    $acK[0][2] = 'width/height'
    $acK[0][3] = 'black = 1'
    $a = 1
    For $i = 1 To $cX
    $xK[$i] = ($i * $wK) - $wK
    For $j = 1 To $cY
    $yK[$j] = ($j * $hK) - $hK
    $acK[$a][0] = $xK[$i] & ',' & $yK[$j]
    $acK[$a][1] = $xK[$i] + $wK & ',' & $yK[$j] + $hK
    $acK[$a][2] = $wK & ',' & $hK
    $acK[$a][3] = 0
    If $a < $cK Then
    $a = $a + 1
    EndIf
    Next
    Next
    _draw()
    EndFunc ;==>_calc
    Func _draw()
    _WinAPI_RedrawWindow($Form1)
    For $i = 1 To $cK
    $lo = StringSplit($acK[$i][0], ',')
    $wh = StringSplit($acK[$i][2], ',')
    If $acK[$i][3] = 0 Then
    _GDIPlus_GraphicsDrawRect($hGraphic, $lo[1], $lo[2], $wh[1], $wh[2])
    Else
    _GDIPlus_GraphicsFillRect($hGraphic, $lo[1], $lo[2], $wh[1], $wh[2])
    EndIf
    Next
    EndFunc ;==>_draw

    [/autoit][autoit][/autoit][autoit]

    ; Func _WinAPI_PtInRectEx()
    ; ($iX, $iY) - x, y position of the point to check
    ; ($iLeft, $iTop) - x, y position of the top left corner of rectangle
    ; ($iRight, $iBottom) - x, y position of the bottom right corner of rectangle
    Func _WinAPI_PtInRectEx($iX, $iY, $iLeft, $iTop, $iRight, $iBottom)
    Local $aResult
    Local $tRect = DllStructCreate($tagRECT)
    DllStructSetData($tRect, "Left", $iLeft)
    DllStructSetData($tRect, "Top", $iTop)
    DllStructSetData($tRect, "Right", $iRight)
    DllStructSetData($tRect, "Bottom", $iBottom)
    $aResult = DllCall("User32.dll", "int", "PtInRect", "ptr", DllStructGetPtr($tRect), "int", $iX, "int", $iY)
    If @error Then Return SetError(@error, 0, False)
    Return $aResult[0] <> 0
    EndFunc ;==>_WinAPI_PtInRectEx
    Func _END()
    ;~ _GDIPlus_PenDispose($pBlack)
    ;~ _GDIPlus_PenDispose($pWhite)
    _GDIPlus_GraphicsDispose($hGraphic)
    _GDIPlus_Shutdown()
    Exit
    EndFunc ;==>_END

    [/autoit]

    [/spoiler]


    Habs nu so gelöst.. :D

  • Array, X & Y Koordinaten Mitte finden

    • Morrison
    • 15. Februar 2012 um 21:25

    Ich hab jetzt was zu "Skelettierung" von Zeichen gefunden! Jedoch kenn ich mich mit C nich so aus..wie würd des denn in Autoit aussehen???

    Link

  • _GDIPlus_GraphicsDrawStringEx / Buchstaben zentrieren??

    • Morrison
    • 5. Februar 2012 um 11:59

    Ja, das sieht schon sehr gut aus, aber bei manchen Schriftarten wird das "$tagRECT" nicht richtig berechnet!! Da wird die Schrift abgeschnitten, bei manchen unten bei manchen rechts..werd mal gucken..kenn die Befehle nicht. Bsp. Schriftart "vladimir.ttf" oder "kunstler.ttf"
    Ich werd mir die GetTextMetrics und GetGlyphOutline bzw. OUTLINETEXTMETRIC nochmal angucken..da stand iwas vonwegen den "Italic" Schriften..das der eine Buchstabe schon unter einem anderen anfängt..usw.!
    Kann man das "$tagRECT" nicht mithilfe der Schwarzwerte im Bild berechnen?? Das wär doch dann genau!?! 8)

    Danke für die Antworten!

  • _GDIPlus_GraphicsDrawStringEx / Buchstaben zentrieren??

    • Morrison
    • 3. Februar 2012 um 08:42

    Hallo,

    hab versucht jetzt das "$tagRECT" neu zu berechnen, das ist aber trotzdem nicht mittig!! :huh:

    ..und weiss jemand wie ich des ganze schneller berechnen kann???

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>
    #include <ButtonConstants.au3>
    #include <ComboConstants.au3>
    #include <EditConstants.au3>
    #include <File.au3>
    #include <Fontconstants.au3>
    #include <GDIPlus.au3>
    #include <GuiButton.au3>
    #include <GUIConstantsEx.au3>
    #include <GuiListView.au3>
    #include <ListviewConstants.au3>
    #include <ProgressConstants.au3>
    #include <RegFunc.au3>
    #include <StaticConstants.au3>
    #include <UpDownConstants.au3>
    #include <WindowsConstants.au3>
    Opt("GUIOnEventMode", 1)
    Opt("PixelCoordMode", 0)
    ;Data
    $dString = 'a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,ä,ö,ü'
    $aString = StringSplit($dString, ',')
    Local $data[3][$aString[0] + 1]
    Local $rLinks, $rRechts, $rOben, $rUnten, $rWidth, $rHeight
    For $i = 1 To $aString[0]
    $data[0][$i] = $i
    $data[1][$i] = StringUpper($aString[$i])
    $data[2][$i] = StringLower($aString[$i])
    Next
    $cDataCount = 1 ;Letter Stellenzähler
    $data[0][0] = (UBound($data, 2) - 1)
    ;Fonts
    $FontList = _FileListToArray(@WindowsDir & '\Fonts', '*.ttf', 1);Schriftarten aus Windows Fonts Ordner holen
    $var = _GetRegValues('HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts');Schriftartennamen aus Windows Registry holen
    Dim $aItems[($FontList[0] + 1)]
    $x = 1
    #region ### START Koda GUI section ### Form=C:\Users\IBM\Desktop\AU3_OCR_new\Form1.kxf
    $msg = GUICreate("Form1", 620, 245, 215, 124)
    $Datei = GUICtrlCreateMenu("&Datei")
    $MenuItem1 = GUICtrlCreateMenuItem("Optionen" & @TAB & "", $Datei)
    $MenuItem2 = GUICtrlCreateMenuItem("Exit" & @TAB & "", $Datei)
    $Hilfe = GUICtrlCreateMenu("&Hilfe")
    $listview = GUICtrlCreateListView("Nr.|Datei|Name", 277, 12, 335, 170)
    $gWin1 = GUICtrlCreateGraphic(11, 66, 100, 100, $SS_WHITERECT)
    $gWin2 = GUICtrlCreateGraphic(171, 66, 100, 100, $SS_WHITERECT)
    $SchriftG = GUICtrlCreateInput('32', 123, 106, 35, 20)
    $updwnSGR = GUICtrlCreateUpdown($SchriftG)
    $bUp = GUICtrlCreateButton("Up", 123, 66, 35, 35, -1, $WS_EX_CLIENTEDGE)
    $bDown = GUICtrlCreateButton("Dwn", 123, 131, 35, 35, -1, $WS_EX_CLIENTEDGE)
    $bStart = GUICtrlCreateButton("Start", 26, 190, 80, 25, -1, $WS_EX_STATICEDGE)
    $bAbbruch = GUICtrlCreateButton("Abbruch", 176, 190, 80, 25, -1, $WS_EX_STATICEDGE)
    $bDaten = GUICtrlCreateButton("Alle Daten", 352, 188, 190, 30)
    $Progress1 = GUICtrlCreateProgress(21, 172, 240, 10, -1, $WS_EX_STATICEDGE)
    GUISetState(@SW_SHOW)
    #endregion ### END Koda GUI section ###
    _GUICtrlListView_SetColumnWidth($listview, 0, 28)
    _GUICtrlListView_SetColumnWidth($listview, 1, 40)
    _GUICtrlListView_SetColumnWidth($listview, 2, 180)
    GUISetOnEvent($GUI_EVENT_CLOSE, "SpecialEvents")
    GUICtrlSetOnEvent($bStart, "button")
    GUICtrlSetOnEvent($bUp, "UP")
    GUICtrlSetOnEvent($bDown, "DOWN")
    GUICtrlSetOnEvent($listview, "HandleClicks")
    GUICtrlSetOnEvent($updwnSGR, "SchriftGR")
    ;GUI Liste schreiben
    For $a = 1 To UBound($var)
    If StringRight($var[$a - 1][2], 3) = 'ttf' Then
    If StringInStr($var[$a - 1][0], 'Bold', 1) = False And StringInStr($var[$a - 1][0], 'Italic', 1) = False _
    And StringInStr($var[$a - 1][0], 'MT Extra', 1) = False Then
    $nName = StringReplace($var[$a - 1][0], '(TrueType)', '', 1)
    $aItems[$x] = GUICtrlCreateListViewItem($x & '|' & $var[$a - 1][2] & '|' & $nName, $listview)
    GUICtrlSetOnEvent($aItems[$x], "HandleClicks")
    $x = $x + 1
    EndIf
    EndIf
    Next
    _GUICtrlListView_SetSelectionMark($listview, 0)
    $sTrim = _GUICtrlListView_GetSelectionMark($listview)
    _GUICtrlListView_ClickItem($listview, 0, "left", False, 1)
    While 1
    $rAktList = GUICtrlRead($listview)
    $sgr = GUICtrlRead($SchriftG)
    WEnd
    ;Funktionen
    ;SpecialEvents
    Func SpecialEvents()
    Select
    Case @GUI_CtrlId = $GUI_EVENT_CLOSE
    cleanup()
    Exit
    EndSelect
    EndFunc ;==>SpecialEvents
    ;HandleClicks
    Func HandleClicks()
    $aktSel = GUICtrlRead(GUICtrlRead($listview))
    $aList = StringSplit($aktSel, '|')
    $sTrim = StringTrimRight($aList[3], 1)
    ;_ArrayDisplay($aList)
    Drawing()
    EndFunc ;==>HandleClicks
    ;button()
    Func button()
    ;$rInput1 = GUICtrlRead($iLetter)
    MsgBox(0, 'Schriftart', GUICtrlRead(GUICtrlRead($listview)), 2)
    Drawing()
    EndFunc ;==>button
    ;UP()
    Func UP()
    If $cDataCount < $aString[0] Then
    $cDataCount = $cDataCount + 1
    EndIf
    Drawing()
    EndFunc ;==>UP
    ;DOWN()
    Func DOWN()
    If $cDataCount >= 2 Then
    $cDataCount = $cDataCount - 1
    EndIf
    Drawing()
    EndFunc ;==>DOWN
    Func SchriftGR()
    $sgr = GUICtrlRead($SchriftG)
    If $sgr <= 8 Then
    GUICtrlSetData($SchriftG, 8)
    EndIf
    If $sgr >= 99 Then
    GUICtrlSetData($SchriftG, 99)
    EndIf
    Drawing()
    EndFunc ;==>SchriftGR
    Func Drawing()
    Local $iRectWidth, $iRectHeight, $aCtrlPos1
    GUICtrlSetColor($gWin1, 0)
    GUICtrlSetColor($gWin2, 0)
    $rInput = $aString[$cDataCount]
    $rInput1 = StringUpper($rInput)
    $rInput2 = StringLower($rInput)
    $sgr = GUICtrlRead($SchriftG)
    ; Größe des Graphic-Controls ermitteln (Noch 100x100, aber wer weiß, wann sich das ändert)
    $aCtrlPos1 = ControlGetPos($msg, '', $gWin1)
    $aCtrlPos2 = ControlGetPos($msg, '', $gWin2)
    $iRectWidth = $aCtrlPos1[2]
    $iRectHeight = $aCtrlPos1[3]
    ; DC vom Graphics-Control holen
    $hDC1 = _WinAPI_GetDC(GUICtrlGetHandle($gWin1))
    $hDC2 = _WinAPI_GetDC(GUICtrlGetHandle($gWin2))
    ; Font erstellen
    ;$iDeviceCapY = _WinAPI_GetDeviceCaps($hDC1, $__WINAPICONSTANT_LOGPIXELSX)
    ;MsgBox(0, '', $iDeviceCapY)
    $hFont = _WinAPI_CreateFont($sgr, 0, 0, 0, $FW_NORMAL, False, False, False _
    , $DEFAULT_CHARSET, $OUT_DEFAULT_PRECIS, $CLIP_DEFAULT_PRECIS, $DEFAULT_QUALITY, $DEFAULT_PITCH, $sTrim)
    ; Font mit DC verbinden
    _WinAPI_SelectObject($hDC1, $hFont)
    _WinAPI_SelectObject($hDC2, $hFont)
    ;Font zeichnen
    $tPoint1 = _WinAPI_GetTextExtentPoint32($hDC1, $rInput1)
    $tPoint2 = _WinAPI_GetTextExtentPoint32($hDC2, $rInput2)
    $tRect = DllStructCreate($tagRECT)
    ;~ $tRect1 = _WinAPI_DrawText($hDC1, $rInput1, $tRect, $DT_CALCRECT)
    ;~ $tRect2 = _WinAPI_DrawText($hDC1, $rInput1, $tRect, $DT_CALCRECT)
    DllStructSetData($tRect, 'left', ($iRectWidth / 2) - (DllStructGetData($tPoint1, 'x') / 2))
    DllStructSetData($tRect, 'top', ($iRectHeight / 2) - (DllStructGetData($tPoint1, 'y') / 2))
    DllStructSetData($tRect, 'right', DllStructGetData($tRect, 'left') + DllStructGetData($tPoint1, 'x'))
    DllStructSetData($tRect, 'bottom', DllStructGetData($tRect, 'top') + DllStructGetData($tPoint1, 'y'))
    ; Text auf Graphics-Control zeichnen
    _WinAPI_DrawText($hDC1, $rInput1, $tRect, BitOR($DT_VCENTER, $DT_CENTER, $DT_NOCLIP))
    _WinAPI_DrawText($hDC2, $rInput2, $tRect, BitOR($DT_VCENTER, $DT_CENTER, $DT_NOCLIP))

    [/autoit] [autoit][/autoit] [autoit]

    GetRect($gWin1)
    ;~ MsgBox(0, '', 'Links: ' & $rLinks & @CRLF & 'Rechts: ' & $rRechts & @CRLF & 'Oben: ' & $rOben & @CRLF & 'Unten: ' & $rUnten _
    ;~ & @CRLF & 'Breite: ' & $rWidth & @CRLF & 'Höhe: ' & $rHeight)
    ;~
    $tRect1 = DllStructCreate($tagRECT)
    DllStructSetData($tRect1, 'left', 50 - ($rWidth / 2))
    DllStructSetData($tRect1, 'top', 50 - ($rHeight / 2))
    DllStructSetData($tRect1, 'right', 50 + ($rWidth / 2))
    DllStructSetData($tRect1, 'bottom', 50 + ($rHeight / 2))
    GUICtrlSetColor($gWin1, 0)
    _WinAPI_DrawText($hDC1, $rInput1, $tRect1, BitOR($DT_VCENTER, $DT_CENTER, $DT_NOCLIP))
    GetRect($gWin2)
    ;~ MsgBox(0, '', 'Links: ' & $rLinks & @CRLF & 'Rechts: ' & $rRechts & @CRLF & 'Oben: ' & $rOben & @CRLF & 'Unten: ' & $rUnten _
    ;~ & @CRLF & 'Breite: ' & $rWidth & @CRLF & 'Höhe: ' & $rHeight)
    $tRect2 = DllStructCreate($tagRECT)
    DllStructSetData($tRect2, 'left', 50 - ($rWidth / 2))
    DllStructSetData($tRect2, 'top', 50 - ($rHeight / 2))
    DllStructSetData($tRect2, 'right', 50 + ($rWidth / 2))
    DllStructSetData($tRect2, 'bottom', 50 + ($rHeight / 2))
    GUICtrlSetColor($gWin2, 0)
    _WinAPI_DrawText($hDC2, $rInput2, $tRect2, BitOR($DT_VCENTER, $DT_CENTER, $DT_NOCLIP))

    [/autoit] [autoit][/autoit] [autoit]

    ; DC wieder freigeben, Font löschen & von Strukturen reservierten Speicher freigeben.
    _WinAPI_ReleaseDC(GUICtrlGetHandle($gWin1), $hDC1)
    _WinAPI_ReleaseDC(GUICtrlGetHandle($gWin2), $hDC2)
    _WinAPI_DeleteObject($hFont)
    $tPoint1 = 0
    $tPoint2 = 0
    $tRect1 = 0
    $tRect2 = 0
    EndFunc ;==>Drawing
    Func GetRect($gWin)
    ;reelle Größe des Fonts messen
    Local $aCoords[100][100]
    For $iX = 0 To 99
    For $iY = 0 To 99
    $iPixelColor = PixelGetColor($iX, $iY, GUICtrlGetHandle($gWin))
    If Dec($iPixelColor) < Dec('999999') Then
    $rLinks = 100 - $iX
    ExitLoop
    EndIf
    Next
    Next
    For $iY = 0 To 99
    For $iX = 0 To 99
    $iPixelColor = PixelGetColor($iX, $iY, GUICtrlGetHandle($gWin))
    If Dec($iPixelColor) < Dec('999999') Then
    $rUnten = 100 - $iY
    ExitLoop
    EndIf
    Next
    Next
    For $iX = 99 To 0 Step -1
    For $iY = 99 To 0 Step -1
    $iPixelColor = PixelGetColor($iX, $iY, GUICtrlGetHandle($gWin))
    If Dec($iPixelColor) < Dec('999999') Then
    $rRechts = $iX
    ExitLoop
    EndIf
    Next
    Next
    For $iY = 99 To 0 Step -1
    For $iX = 99 To 0 Step -1
    $iPixelColor = PixelGetColor($iX, $iY, GUICtrlGetHandle($gWin))
    If Dec($iPixelColor) < Dec('999999') Then
    $rOben = $iY
    ExitLoop
    EndIf
    Next
    Next
    $rWidth = 100 - ($rRechts + $rLinks)
    $rHeight = 100 - ($rOben + $rUnten)
    Return
    EndFunc ;==>GetRect
    Func cleanup()
    ;~ _GDIPlus_FontDispose($hFont)
    ;~ _GDIPlus_FontFamilyDispose($hFamily)
    ;~ _GDIPlus_StringFormatDispose($hFormat)
    ;~ _GDIPlus_BrushDispose($hBrush)
    ;~ _GDIPlus_GraphicsDispose($hGraphic)
    ;~ _GDIPlus_Shutdown()
    EndFunc ;==>cleanup
    ;Ende
    cleanup()
    Exit

    [/autoit]
  • _GDIPlus_GraphicsDrawStringEx / Buchstaben zentrieren??

    • Morrison
    • 31. Januar 2012 um 07:08

    Ja, perfekt!

    Wenn man mir jetzt noch sagt wie ich das auf zwei "GUICtrlCreateGraphic" Elemente in einem Fenster zeichne bin ich der glücklichste Mensch der Welt! :thumbup:

  • _GDIPlus_GraphicsDrawStringEx / Buchstaben zentrieren??

    • Morrison
    • 30. Januar 2012 um 19:58

    Hiho!

    Also jetzt ist des Problem mit dem "$tRect = DllStructCreate($tagRECT)"!!

    Leider stimmen die Abmessungen nicht, vllt. kennt sich da jemand mit aus..mit _WinAPI_GetTextExtentPoint32 usw.

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>
    #include <ButtonConstants.au3>
    #include <ComboConstants.au3>
    #include <EditConstants.au3>
    #include <File.au3>
    #include <Fontconstants.au3>
    #include <GDIPlus.au3>
    #include <GUIConstantsEx.au3>
    #include <GuiListView.au3>
    #include <ListviewConstants.au3>
    #include <ProgressConstants.au3>
    #include <RegFunc.au3>
    #include <StaticConstants.au3>
    #include <UpDownConstants.au3>
    #include <WindowsConstants.au3>
    Opt("GUIOnEventMode", 1)
    ;OnAutoItExitRegister('cleanup')

    [/autoit] [autoit][/autoit] [autoit]

    ;Data
    $dString = 'a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,ä,ö,ü,'
    $aString = StringSplit($dString, ',')
    Local $data[3][$aString[0] + 1]
    For $i = 1 To $aString[0]
    $data[0][$i] = $i
    $data[1][$i] = StringUpper($aString[$i])
    $data[2][$i] = StringLower($aString[$i])
    Next
    $data[0][0] = (UBound($data, 2) - 1)
    ;_ArrayDisplay($data, -1, -1, 1)
    $cDataCount = 1 ;Letter Stellenzähler
    $capi = 0 ;Gross- und Kleinschreibung
    $FontList = _FileListToArray(@WindowsDir & '\Fonts', '*.ttf', 1);Schriftarten aus Windows Fonts Ordner holen
    If @error = 1 Then
    MsgBox(0, "", "No Folders Found.")
    cleanup()
    Exit
    EndIf
    If @error = 4 Then
    MsgBox(0, "", "No Files Found.")
    cleanup()
    Exit
    EndIf
    $var = _GetRegValues('HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts');Schriftartennamen aus Windows Registry holen
    Dim $aItems[($FontList[0] + 1)]
    $x = 1
    Local $hGUI, $hGraphic, $hBrush, $hFormat, $hFamily, $hFont, $tLayout, $aInfo

    [/autoit] [autoit][/autoit] [autoit]

    #Region ### START Koda GUI section ### Form=C:\Users\IBM\Desktop\Form1.kxf
    $msg = GUICreate("Schriftarten Tool", 587, 245, 215, 124)
    $MenuItem2 = GUICtrlCreateMenu("Datei")
    $MenuItem4 = GUICtrlCreateMenuItem("Optionen", $MenuItem2)
    $MenuItem3 = GUICtrlCreateMenuItem("Exit", $MenuItem2)
    $MenuItem1 = GUICtrlCreateMenu("Hilfe")
    $listview = GUICtrlCreateListView("Nr.|Datei|Name", 277, 12, 305, 158, -1, BitOR($WS_EX_CLIENTEDGE,$WS_EX_STATICEDGE,$LVS_EX_FULLROWSELECT))
    $gWin1 = GUICtrlCreateGraphic(11, 70, 100, 100, $SS_WHITERECT)
    $gWin2 = GUICtrlCreateGraphic(171, 70, 100, 100, $SS_WHITERECT)
    $bUp = GUICtrlCreateButton("Up", 123, 70, 35, 35, -1, $WS_EX_CLIENTEDGE)
    $bDown = GUICtrlCreateButton("Dwn", 123, 135, 35, 35, -1, $WS_EX_CLIENTEDGE)
    $SchriftG = GUICtrlCreateInput('32', 123, 110, 35, 20)
    $updwnSGR = GUICtrlCreateUpdown($SchriftG)
    $bStart = GUICtrlCreateButton("Start", 25, 190, 80, 25, -1, $WS_EX_STATICEDGE)
    GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
    $bAbbruch = GUICtrlCreateButton("Abbruch", 177, 190, 80, 25, -1, $WS_EX_STATICEDGE)
    GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
    $Progress1 = GUICtrlCreateProgress(21, 175, 240, 10, -1, $WS_EX_STATICEDGE)
    $bFontDir = GUICtrlCreateButton(@WindowsDir & '\Fonts', 61, 2, 160, 20)
    $Combo1 = GUICtrlCreateCombo("", 41, 27, 200, 25, BitOR($CBS_DROPDOWN,$CBS_AUTOHSCROLL))
    $bAllData = GUICtrlCreateButton("Alle Daten", 330, 180, 190, 25)
    GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###
    _GUICtrlListView_SetColumnWidth($listview, 0, 28)
    _GUICtrlListView_SetColumnWidth($listview, 1, 40)
    _GUICtrlListView_SetColumnWidth($listview, 2, 130)
    GUISetOnEvent($GUI_EVENT_CLOSE, "SpecialEvents")
    GUICtrlSetOnEvent($bStart, "button")
    GUICtrlSetOnEvent($bUp, "UP")
    GUICtrlSetOnEvent($bDown, "DOWN")

    [/autoit] [autoit][/autoit] [autoit]

    ;GUI Liste schreiben
    For $a = 1 To UBound($var)
    If StringRight($var[$a - 1][2], 3) = 'ttf' Then
    If StringInStr($var[$a - 1][0], 'Bold', 1) = False And StringInStr($var[$a - 1][0], 'Italic', 1) = False And StringInStr($var[$a - 1][0], 'MT Extra', 1) = False Then
    $aItems[$x] = GUICtrlCreateListViewItem($x & '|' & $var[$a - 1][2] & '|' & $var[$a - 1][0], $listview)
    GUICtrlSetOnEvent($aItems[$x], "HandleClicks")
    $x = $x + 1
    EndIf
    EndIf
    Next
    _GUICtrlListView_SetSelectionMark($listview, 0)
    $sTrim = _GUICtrlListView_GetSelectionMark($listview)
    _GUICtrlListView_ClickItem($listview, 0, "left", False, 1)

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    While 1
    $rAktList = GUICtrlRead($listview)
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    ;Funktionen
    ;SpecialEvents
    Func SpecialEvents()
    Select
    Case @GUI_CtrlId = $GUI_EVENT_CLOSE
    cleanup()
    Exit
    EndSelect
    EndFunc ;==>SpecialEvents
    ;HandleClicks
    Func HandleClicks()
    $aktSel = GUICtrlRead(GUICtrlRead($listview))
    $aList = StringSplit($aktSel, '|')
    $sTrim = StringTrimRight($aList[3], 11)
    Drawing()
    EndFunc ;==>HandleClicks
    ;button()
    Func button()
    ;$rInput1 = GUICtrlRead($iLetter)
    MsgBox(0, 'Schriftart', GUICtrlRead(GUICtrlRead($listview)), 2)
    Drawing()
    EndFunc ;==>button
    ;UP()
    Func UP()
    If $cDataCount < $aString[0] Then
    $cDataCount = $cDataCount + 1
    EndIf
    ;GUICtrlSetData($iLetter, $new)
    Drawing()
    EndFunc ;==>UP
    ;DOWN()
    Func DOWN()
    If $cDataCount >= 2 Then
    $cDataCount = $cDataCount - 1
    EndIf
    ;GUICtrlSetData($iLetter, $new)
    Drawing()
    EndFunc ;==>DOWN
    Func SchriftGR()
    $sgr = GUICtrlRead($SchriftG)
    If $sgr <= 8 Then
    GUICtrlSetData($SchriftG, 8)
    EndIf
    If $sgr >= 60 Then
    GUICtrlSetData($SchriftG, 60)
    EndIf
    Drawing()
    EndFunc ;==>SchriftGR
    Func Drawing()
    ;~ GUICtrlSetColor($gWin1, 0)
    ;~ $rInput1 = 'A' ;GUICtrlRead($iLetter)
    ;~ $sgr = GUICtrlRead($SchriftG)
    ;~ _GDIPlus_Startup()
    ;~ $hGraphic = _GDIPlus_GraphicsCreateFromHWND($msg)
    ;~ $hBrush = _GDIPlus_BrushCreateSolid(0xFF000000)
    ;~ $hFormat = _GDIPlus_StringFormatCreate()
    ;~ $hFamily = _GDIPlus_FontFamilyCreate($sTrim)
    ;~ $hFont = _GDIPlus_FontCreate($hFamily, $sgr, 0, 2)
    ;~ $tLayout = _GDIPlus_RectFCreate(0, 0, 100, 100)
    ;~ $aInfo = _GDIPlus_GraphicsMeasureString($hGraphic, $rInput1, $hFont, $tLayout, $hFormat)
    ;~ $iWidth = Ceiling(DllStructGetData($aInfo[0], "Width"))
    ;~ $iHeight = Ceiling(DllStructGetData($aInfo[0], "Height"))
    ;~ cleanup()
    ;~ _GDIPlus_Startup()
    ;~ $hWind = WinGetHandle($oForm)
    ;~ $hGraphic = _GDIPlus_GraphicsCreateFromHWND($hWind)
    ;~ $hBitmap = _GDIPlus_BitmapCreateFromGraphics($iX, $iY, $hGraphic)
    ;~ $hBackbuffer = _GDIPlus_ImageGetGraphicsContext($hBitmap)
    ;~ _GDIPlus_GraphicsClear($hBackbuffer, 0xFFFFFFFF)
    ;~ $hGraphic = _GDIPlus_GraphicsCreateFromHWND($msg)
    ;~ $hBrush = _GDIPlus_BrushCreateSolid(0xFF000000)
    ;~ $hFormat = _GDIPlus_StringFormatCreate()
    ;~ $hFamily = _GDIPlus_FontFamilyCreate($sTrim)
    ;~ $hFont = _GDIPlus_FontCreate($hFamily, $sgr, 0, 2)
    ;~ $tLayout = _GDIPlus_RectFCreate(50 - ($iWidth / 2), 50 - ($iHeight / 2), 100, 100)
    ;~ $aInfo = _GDIPlus_GraphicsMeasureString($hGraphic, $rInput1, $hFont, $tLayout, $hFormat)
    ;~ _GDIPlus_GraphicsDrawStringEx($hGraphic, $rInput1, $hFont, $aInfo[0], $hFormat, $hBrush)

    [/autoit] [autoit][/autoit] [autoit]

    Local $iRectWidth, $iRectHeight, $aCtrlPos1
    GUICtrlSetColor($gWin1, 0)
    GUICtrlSetColor($gWin2, 0)
    $rInput = 'A' ;GUICtrlRead($iLetter)
    $rInput1 = StringUpper($rInput)
    $rInput2 = StringLower($rInput)
    $sgr = GUICtrlRead($SchriftG)
    ; Größe des Graphic-Controls ermitteln (Noch 100x100, aber wer weiß, wann sich das ändert)
    $aCtrlPos1 = ControlGetPos($msg,'',$gWin1)
    $aCtrlPos2 = ControlGetPos($msg,'',$gWin2)
    $iRectWidth = $aCtrlPos1[2]
    $iRectHeight = $aCtrlPos1[3]
    ; DC vom Graphics-Control holen
    $hDC1 = _WinAPI_GetDC(GUICtrlGetHandle($gWin1))
    $hDC2 = _WinAPI_GetDC(GUICtrlGetHandle($gWin2))
    ; Font erstellen
    ;$iDeviceCapY = _WinAPI_GetDeviceCaps($hDC1, $__WINAPICONSTANT_LOGPIXELSX)
    ;MsgBox(0, '', $iDeviceCapY)
    $hFont = _WinAPI_CreateFont($sgr, 0, 0, 0, $FW_NORMAL, False, False, False _
    , $DEFAULT_CHARSET, $OUT_DEFAULT_PRECIS, $CLIP_DEFAULT_PRECIS, $DEFAULT_QUALITY, $DEFAULT_PITCH, $sTrim)
    ; Font mit DC verbinden
    _WinAPI_SelectObject($hDC1, $hFont)
    _WinAPI_SelectObject($hDC2, $hFont)
    ; Textgröße ermitteln
    $tPoint1 = _WinAPI_GetTextExtentPoint32($hDC1, $rInput1)
    $tPoint2 = _WinAPI_GetTextExtentPoint32($hDC2, $rInput2)
    $tRect = DllStructCreate($tagRECT)
    DllStructSetData($tRect, 'left', ($iRectWidth / 2) - (DllStructGetData($tPoint1, 'x') / 2))
    DllStructSetData($tRect, 'top', ($iRectHeight / 2) - (DllStructGetData($tPoint1, 'y') / 2))
    DllStructSetData($tRect, 'right', DllStructGetData($tRect, 'left') + DllStructGetData($tPoint1, 'x'))
    DllStructSetData($tRect, 'bottom', DllStructGetData($tRect, 'top') + DllStructGetData($tPoint1, 'y'))
    DllStructSetData($tRect, 'left', ($iRectWidth / 2) - (DllStructGetData($tPoint2, 'x') / 2))
    DllStructSetData($tRect, 'top', ($iRectHeight / 2) - (DllStructGetData($tPoint2, 'y') / 2))
    DllStructSetData($tRect, 'right', DllStructGetData($tRect, 'left') + DllStructGetData($tPoint2, 'x'))
    DllStructSetData($tRect, 'bottom', DllStructGetData($tRect, 'top') + DllStructGetData($tPoint2, 'y'))
    ; Text auf Graphics-Control zeichnen
    _WinAPI_DrawText($hDC1,$rInput1, $tRect, BitOR($DT_VCENTER, $DT_CENTER))
    _WinAPI_DrawText($hDC2,$rInput2, $tRect, BitOR($DT_VCENTER, $DT_CENTER))
    ; DC wieder freigeben, Font löschen & von Strukturen reservierten Speicher freigeben.
    _WinAPI_ReleaseDC(GUICtrlGetHandle($gWin1), $hDC1)
    _WinAPI_ReleaseDC(GUICtrlGetHandle($gWin2), $hDC2)
    _WinAPI_DeleteObject($hFont)
    $tPoint1 = 0
    $tPoint2 = 0
    $tRect = 0
    EndFunc ;==>Drawing
    ; Clean up resources
    Func cleanup()
    _GDIPlus_FontDispose($hFont)
    _GDIPlus_FontFamilyDispose($hFamily)
    _GDIPlus_StringFormatDispose($hFormat)
    _GDIPlus_BrushDispose($hBrush)
    _GDIPlus_GraphicsDispose($hGraphic)
    _GDIPlus_Shutdown()
    EndFunc ;==>cleanup
    ;Ende
    cleanup()
    Exit

    [/autoit]
  • _GDIPlus_GraphicsDrawStringEx / Buchstaben zentrieren??

    • Morrison
    • 28. Januar 2012 um 17:42

    Hallo,

    danke für die Antwort! Das mit dem berechnen habbich nicht hinbekommen! ?( Vllt. nen Beispiel dazu??

    Hab in diesem Forum was von _WinAPI_GetTextExtentPoint32 gefunden. Scheint der richtige Befehl zu sein, oder??

    Hab jetzt

    $foo = _WinAPI_GetTextExtentPoint32($msg, $rInput)
    $x = DllStructGetData($foo,"X")
    $y = DllStructGetData($foo,"Y")
    ConsoleWrite($x & @TAB & $y & @CRLF)

    hinzugefügt, bekomm als Ergebnis aber nur Nullen!! Wieso??

    Tja, bin halt Anfänger! :S

  • _GDIPlus_GraphicsDrawStringEx / Buchstaben zentrieren??

    • Morrison
    • 28. Januar 2012 um 01:34

    Hallo,

    in dieser GUI werden installierte Schriftarten angezeigt, aber ich bekomms nicht hin das die versch. Buchstaben in den versch. Schriftarten im Ausgabefenster zentriert sind!

    Wie bekomme ich jeden Buchstaben in die Mitte des Fensters??

    *Zeile mit _GDIPlus_RectFCreate!?!

    Spoiler anzeigen
    [autoit]

    #include <File.au3>
    #include <Array.au3>
    #include <RegFunc.au3>
    #include <ListviewConstants.au3>
    #include <GuiListView.au3>
    #include <WindowsConstants.au3>
    #include <UpDownConstants.au3>
    #include <EditConstants.au3>
    #include <GDIPlus.au3>
    #include <GUIConstantsEx.au3>
    Opt("GUIOnEventMode", 1)
    ;Data
    $dString = 'a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z'
    $aString = StringSplit($dString, ',')
    Local $data[2][$aString[0] + 1]
    For $i = 1 to $aString[0]
    $data[0][$i] = $aString[$i]
    $data[1][$i] = $i
    Next
    $data[0][0] = (UBound($data, 2) - 1)
    ;_ArrayDisplay($data, -1, -1, 1)
    $cDataCount = 1 ;Letter Stellenzähler
    $capi = 0 ;Gross- und Kleinschreibung
    $FontList = _FileListToArray(@WindowsDir & '\Fonts', '*.ttf', 1);Schriftarten aus Windows Fonts Ordner holen
    If @error = 1 Then
    MsgBox(0, "", "No Folders Found.")
    cleanup()
    Exit
    EndIf
    If @error = 4 Then
    MsgBox(0, "", "No Files Found.")
    cleanup()
    Exit
    EndIf
    $var = _GetRegValues('HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts');Schriftartennamen aus Windows Registry holen
    Dim $aItems[($FontList[0] + 1)]
    $x = 1
    Local $hGUI, $hGraphic, $hBrush, $hFormat, $hFamily, $hFont, $tLayout, $aInfo
    ;Arrays anzeigen
    ;~ _ArrayDisplay($FontList, "$FileList")
    ;~ _ArrayDisplay($var)
    ;GUI erstellen
    $msg = GUICreate("Installierte Schriftarten", 400, 500)
    $listview = GUICtrlCreateListView("Nr.|Datei|Name", 10, 10, 380, 150, $LVS_SINGLESEL)
    $button = GUICtrlCreateButton("OK", 20, 170, 70, 20)
    $gWin = GUICtrlCreateGraphic(20, 200, 100, 100)
    $iLetter = GUICtrlCreateInput ("a", 100, 170, 20, 20, $ES_CENTER)
    GUICtrlCreateLabel('Schriftgrösse: ', 140, 170, 65, 20)
    $SchriftG = GUICtrlCreateInput('12', 210, 170, 36, 20)
    $updwnSGR = GUICtrlCreateUpdown($SchriftG)
    $gross = GUICtrlCreateButton('', 121, 170, 10, 10)
    $klein = GUICtrlCreateButton('', 121, 180, 10, 10)
    $bUp = GUICtrlCreateButton('Up', 121, 200, 24, 50)
    $bDown = GUICtrlCreateButton('Dwn', 121, 250, 24, 50)
    GUICtrlSetBkColor($gWin, 0xffffff)
    GUICtrlSetBkColor($klein, 0x00ff00)
    GUICtrlSetBkColor($gross, 0x8B0000)
    GUICtrlSetColor($gWin, 0)
    GUICtrlSetLimit($iLetter, 1)
    GUICtrlSetLimit($listview, 1)
    GUISetState(@SW_SHOW)
    GUISetOnEvent($GUI_EVENT_CLOSE, "SpecialEvents")
    GUICtrlSetOnEvent($button, "button")
    GUICtrlSetOnEvent($bUp, "UP")
    GUICtrlSetOnEvent($bDown, "DOWN")
    GUICtrlSetOnEvent($gross, "gross")
    GUICtrlSetOnEvent($klein, "klein")
    GUICtrlSetOnEvent($updwnSGR, "SchriftGR")
    _GUICtrlListView_SetSelectionMark($listview, 1)
    $sTrim = _GUICtrlListView_GetSelectionMark($listview)
    ;GUI Liste schreiben
    For $a = 1 To UBound($var)
    If StringRight($var[$a - 1][2], 3) = 'ttf' Then
    $aItems[$x] = GUICtrlCreateListViewItem($x & '|' & $var[$a - 1][2] & '|' & $var[$a - 1][0], $listview)
    GUICtrlSetOnEvent($aItems[$x], "HandleClicks")
    $x = $x + 1
    EndIf
    Next

    [/autoit] [autoit][/autoit] [autoit]

    Drawing()

    [/autoit] [autoit][/autoit] [autoit]

    ;GUI loop
    While 1
    $rAktList = GUICtrlRead($listview)
    WEnd
    ;Funktionen
    ;SpecialEvents
    Func SpecialEvents()
    Select
    Case @GUI_CtrlId = $GUI_EVENT_CLOSE
    cleanup()
    Exit
    EndSelect
    EndFunc
    ;HandleClicks
    Func HandleClicks()
    $aktSel = GUICtrlRead(GUICtrlRead($listview))
    $aList = StringSplit($aktSel,'|')
    $sTrim = StringTrimRight($aList[3], 11)
    Drawing()
    EndFunc
    ;button()
    Func button()
    $rInput = GUICtrlRead($iLetter)
    MsgBox(0, 'Schriftart', GUICtrlRead(GUICtrlRead($listview)), 2)
    Drawing()
    EndFunc
    ;UP()
    Func UP()
    If $cDataCount < $aString[0] Then
    $cDataCount = $cDataCount + 1
    EndIf
    If $capi = 0 Then
    $new = StringLower($aString[$cDataCount])
    Else
    $new = StringUpper($aString[$cDataCount])
    EndIf
    GUICtrlSetData($iLetter, $new)
    Drawing()
    EndFunc
    ;DOWN()
    Func DOWN()
    If $cDataCount >= 2 Then
    $cDataCount = $cDataCount - 1
    EndIf
    If $capi = 1 Then
    gross()
    EndIf
    If $capi = 0 Then
    $new = StringLower($aString[$cDataCount])
    Else
    $new = StringUpper($aString[$cDataCount])
    EndIf
    GUICtrlSetData($iLetter, $new)
    Drawing()
    EndFunc
    Func gross()
    $capi = 1
    $rInput = GUICtrlRead($iLetter)
    $new = StringUpper($rInput)
    GUICtrlSetData($iLetter, $new)
    GUICtrlSetBkColor($gross, 0x00ff00)
    GUICtrlSetBkColor($klein, 0x8B0000)
    Drawing()
    EndFunc
    Func klein()
    $capi = 0
    $rInput = GUICtrlRead($iLetter)
    $new = StringLower($rInput)
    GUICtrlSetData($iLetter, $new)
    GUICtrlSetBkColor($klein, 0x00ff00)
    GUICtrlSetBkColor($gross, 0x8B0000)
    Drawing()
    EndFunc
    Func SchriftGR()
    $sgr = GUICtrlRead($SchriftG)
    If $sgr <= 2 Then
    GUICtrlSetData($SchriftG, 2)
    EndIf
    If $sgr >= 80 Then
    GUICtrlSetData($SchriftG, 80)
    EndIf
    Drawing()
    EndFunc
    Func Drawing()
    GUICtrlSetColor($gWin, 0)
    $rInput = GUICtrlRead($iLetter)
    $sgr = GUICtrlRead($SchriftG)
    _GDIPlus_Startup()
    $hGraphic = _GDIPlus_GraphicsCreateFromHWND($msg)
    $hBrush = _GDIPlus_BrushCreateSolid(0xFF000000)
    $hFormat = _GDIPlus_StringFormatCreate()
    _GDIPlus_StringFormatSetAlign($hFormat, 1)
    $hFamily = _GDIPlus_FontFamilyCreate($sTrim)
    $hFont = _GDIPlus_FontCreate($hFamily, $sgr, 0, 2)
    $tLayout = _GDIPlus_RectFCreate(0, 50 - ($sgr / 2), 100, 100)
    $aInfo = _GDIPlus_GraphicsMeasureString($hGraphic, $rInput, $hFont, $tLayout, $hFormat)
    _GDIPlus_GraphicsDrawStringEx($hGraphic, $rInput, $hFont, $aInfo[0], $hFormat, $hBrush)
    EndFunc
    ; Clean up resources
    Func cleanup()
    _GDIPlus_FontDispose($hFont)
    _GDIPlus_FontFamilyDispose($hFamily)
    _GDIPlus_StringFormatDispose($hFormat)
    _GDIPlus_BrushDispose($hBrush)
    _GDIPlus_GraphicsDispose($hGraphic)
    _GDIPlus_Shutdown()
    EndFunc
    ;Ende
    cleanup()
    Exit

    [/autoit]

    Wer sonst noch Tipps zur Verbesserung hat, her damit! :D

    Danke!

    Edit: Hab jetzt die Zeilen

    $tLayout = _GDIPlus_RectFCreate(0, 50 - ($sgr / 2), 100, 100)

    _GDIPlus_StringFormatSetAlign($hFormat, 1)

    eingefügt, aber nicht alle Schriftarten passen!! Ist das normal??

  • GUISetOnEvent / Buttons funktionieren nicht! / On click change

    • Morrison
    • 26. Januar 2012 um 21:21

    Huh, ich schussl..danke!! :whistling:

  • GUISetOnEvent / Buttons funktionieren nicht! / On click change

    • Morrison
    • 26. Januar 2012 um 20:59

    Hallo,

    habe eine kleine GUI wo alle installierten Schriftarten aufgelistet werden. Nun möchte ich durch anklicken einer Schriftart in diese Schriftart ändern. Des funzt noch nicht. Und die Buttons "Up" und "Dwn" gehen auch nicht!! Diese sollen das Alphabet bzw. den Buchstaben ändern!

    Wer hatn Tipp oder ne Lösung für mich?? Danke!

    Spoiler anzeigen
    [autoit]

    #include <File.au3>
    #include <Array.au3>
    #include <GuiListView.au3>
    #include <GUIConstantsEx.au3>
    #include <ListviewConstants.au3>
    #include <GuiListView.au3>
    #include <WindowsConstants.au3>
    #include <RegFunc.au3>
    #include <UpDownConstants.au3>
    #include <EditConstants.au3>
    #include <GDIPlus.au3>
    Opt("GUIOnEventMode", 1)

    [/autoit] [autoit][/autoit] [autoit]

    ;Data
    $dString = 'a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z'
    $aString = StringSplit($dString, ',')
    Local $data[2][$aString[0] + 1]
    For $i = 1 to $aString[0]
    $data[0][$i] = $aString[$i]
    $data[1][$i] = $i
    Next
    $data[0][0] = (UBound($data, 2) - 1)
    ;_ArrayDisplay($data, -1, -1, 1)
    $cDataCount = 1
    ;Schriftarten aus Windows Fonts Ordner holen
    $FontList = _FileListToArray(@WindowsDir & '\Fonts', '*.ttf', 1)
    ;Fehlerabfrage
    If @error = 1 Then
    MsgBox(0, "", "No Folders Found.")
    Exit
    EndIf
    If @error = 4 Then
    MsgBox(0, "", "No Files Found.")
    Exit
    EndIf
    ;
    $var = _GetRegValues('HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts')
    ;Deklarationen
    Dim $aItems[($FontList[0] + 1)]
    $x = 1
    ;Arrays anzeigen
    ;~ _ArrayDisplay($FontList, "$FileList")
    ;~ _ArrayDisplay($var)
    ;GUI erstellen
    $msg = GUICreate("Installierte Schriftarten", 400, 500)
    $listview = GUICtrlCreateListView("Nr.|Datei|Name", 10, 10, 380, 150, $LVS_SINGLESEL)
    $button = GUICtrlCreateButton("OK", 20, 170, 70, 20)
    $gWin = GUICtrlCreateGraphic(20, 200, 100, 100)
    GUICtrlSetBkColor($gWin, 0xffffff)
    GUICtrlSetColor($gWin, 0)
    $iLetter = GUICtrlCreateInput ("A", 100, 170, 20, 20, $ES_CENTER)
    GUICtrlSetLimit($iLetter, 1)
    GUICtrlSetLimit($listview, 1)
    $bUp = GUICtrlCreateButton('Up', 121, 200, 24, 50)
    $bDown = GUICtrlCreateButton('Dwn', 121, 250, 24, 50)
    GUISetState(@SW_SHOW)
    GUISetOnEvent($GUI_EVENT_CLOSE, "SpecialEvents")
    GUICtrlSetOnEvent($button, "button")
    GUISetOnEvent($bUp, "UP")
    GUISetOnEvent($bDown, "DOWN")
    ;GUI Liste schreiben
    For $a = 1 To UBound($var)
    If StringRight($var[$a - 1][2], 3) = 'ttf' Then
    $aItems[$x] = GUICtrlCreateListViewItem($x & '|' & $var[$a - 1][2] & '|' & $var[$a - 1][0], $listview)
    GUICtrlSetOnEvent($aItems[$x], "HandleClicks")
    $x = $x + 1
    EndIf
    Next
    drawtype()
    ;GUI loop
    While 1
    $rAktList = GUICtrlRead($listview)
    WEnd
    ;Funktionen
    ;SpecialEvents
    Func SpecialEvents()
    Select
    Case @GUI_CtrlId = $GUI_EVENT_CLOSE
    Exit
    EndSelect
    EndFunc
    ;HandleClicks
    Func HandleClicks()
    $aktSel = GUICtrlRead(GUICtrlRead($listview))
    $aList = StringSplit($aktSel,'|')
    $sTrim = StringTrimRight($aList[3], 11)
    EndFunc
    ;button()
    Func button()
    $rInput = GUICtrlRead($iLetter)
    MsgBox(0, 'Schriftart', GUICtrlRead(GUICtrlRead($listview)), 2)
    drawtype()
    EndFunc
    ;UP()
    Func UP()
    If $cDataCount < $aString[0] Then
    $cDataCount = $cDataCount + 1
    EndIf
    GUICtrlSetData($iLetter, $aString[$cDataCount])
    drawtype()
    EndFunc
    ;DOWN()
    Func DOWN()
    If $cDataCount >= 2 Then
    $cDataCount = $cDataCount - 1
    EndIf
    GUICtrlSetData($iLetter, $aString[$cDataCount])
    drawtype()
    EndFunc
    ;drawtype()
    Func drawtype()
    $rInput = GUICtrlRead($iLetter)
    ; Draw a string
    _GDIPlus_Startup()
    GUICtrlSetColor($gWin, 0)
    $hGraphic = _GDIPlus_GraphicsCreateFromHWND($msg)
    _GDIPlus_GraphicsDrawString($hGraphic, $rInput, 40, 40, 'Arial', 20)
    EndFunc
    ;Ende
    Exit

    [/autoit]

    Dateien

    FontList.au3 3,32 kB – 253 Downloads
  • Fenster von _ArrayDisplay() schliessen

    • Morrison
    • 10. November 2011 um 15:30

    Danke!

    Habs so übernommen und mit WinClose (WinGetTitle("[active]")) realisiert!! 8)

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™