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

Beiträge von KaFu

  • Schriftart von Labels bekommen

    • KaFu
    • 21. Januar 2011 um 08:45

    HalliHallo :)

    diese Frage bezieht sich genau auf das Problem, welches ich gerade versuche im Englischen Forum zu lösen. Die hervorragende Extended Message Box UDF von Melba23 funktioniert tadellos unter Vista und Win7. Unter XP bekomme ich es aber nicht hin, den Default Font auszulesen. Woran liegt das? Ich denke genau an der Art und Weise wie ProgAndy oben in seiner Funktion die $PointSize berechnet. Die Funktion _WinAPI_MulDiv() gibt nur ganze Zahlen zurück, Fonts erlauben aber auch eine dezimale Größenangabe, und unter XP ist der Default Font (auf meinem Rechner) Tahoma/8.5...

    Spoiler anzeigen
    [autoit]


    #include-once
    #include<WindowsConstants.au3>
    #include<WinAPI.au3>

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

    ; http://www.autoit.de/index.php?page…4016#post134016
    ; ProgAndy

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

    ; #FUNCTION# ====================================================================================================================
    ; Name...........: _GUICtrlGetFont
    ; Description ...: gets the font of a GUI Control
    ; Syntax.........: _GUICtrlGetFont( [$hWnd] )
    ; Parameters ....: $hWnd - [optional] ControlID or Handle of the control. Default is last created GUICtrl... (-1)
    ; Return values .: Success - Array with options of font:
    ; [0] - Fontsize
    ; [1] - Font weight (400 = normal).
    ; [2] - italic:2 underlined:4 strike:8 char format (styles added together, 2+4 = italic and underlined).
    ; [3] - The name of the font to use.
    ; [4] - Font quality to select (PROOF_QUALITY=2 is default in AutoIt).
    ; Failure - 0, @error set to nonzero
    ; Author ........: Prog@ndy
    ; Modified.......:
    ; Remarks .......:
    ; Related .......:
    ; Link ..........;
    ; Example .......;
    ; ===============================================================================================================================
    Func _GUICtrlGetFont($hWnd = -1)
    ; Author: Prog@ndy
    Local $hFONT
    Switch IsHWnd($hWnd)
    Case True
    $hFONT = _SendMessage($hWnd, $WM_GETFONT)
    Case Else
    $hFONT = GUICtrlSendMsg($hWnd, $WM_GETFONT, 0, 0)
    $hWnd = GUICtrlGetHandle($hWnd)
    EndSwitch
    If Not $hFONT Then Return SetError(1, 0, 0)
    Local $tFONT = DllStructCreate($tagLOGFONT)
    Local $aReturn = DllCall('gdi32.dll', 'int', 'GetObjectW', 'ptr', $hFONT, 'int', DllStructGetSize($tFONT), 'ptr', DllStructGetPtr($tFONT))
    If @error Or $aReturn[0] = 0 Then Return SetError(2, 0, 0)
    Local $hDC = _WinAPI_GetDC($hWnd)
    ConsoleWrite(DllStructGetData($tFONT, 'Height') & @crlf)
    Local $PointSize = -1 * _WinAPI_MulDiv(DllStructGetData($tFONT, 'Height'), 72, _WinAPI_GetDeviceCaps($hDC, 90)) ; $LOGPIXELSY
    _WinAPI_ReleaseDC($hWnd, $hDC)

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

    Local $aReturn[5] = [$PointSize, DllStructGetData($tFONT, 'Weight'), _
    2 * (True = DllStructGetData($tFONT, 'Italic')) + 4 * (True = DllStructGetData($tFONT, 'Underline')) + 8 * (True = DllStructGetData($tFONT, 'StrikeOut')), _
    DllStructGetData($tFONT, 'FaceName'), DllStructGetData($tFONT, 'Quality')]
    Return $aReturn
    EndFunc ;==>_GUICtrlGetFont

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

    ;-----------------------------------------------------------------

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

    #include<Array.au3>
    GUICreate("bla")

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

    GUICtrlCreateLabel("test", 10, 10, 100, 100)

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

    $label = GUICtrlCreateLabel("test", 10, 50, 100, 100)
    GUICtrlSetFont($label, 8)

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

    GUISetState()

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

    $font = _GUICtrlGetFont($label)
    _ArrayDisplay($font)

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

    GUICtrlSetFont($label, 8.5)
    $font = _GUICtrlGetFont($label)
    _ArrayDisplay($font)

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

    GUICtrlSetFont($label, 10.5)
    $font = _GUICtrlGetFont($label)
    _ArrayDisplay($font)

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

    GUICtrlSetFont($label, 11)
    $font = _GUICtrlGetFont($label)
    _ArrayDisplay($font)

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

    GUICtrlSetFont($label, 11.5)
    $font = _GUICtrlGetFont($label)
    _ArrayDisplay($font)

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

    ConsoleWrite(_WinAPI_MulDiv(Abs(-10), 72, 96) & @crlf)
    ConsoleWrite(_WinAPI_MulDiv(Abs(-11), 72, 96) & @crlf)

    [/autoit]

    Ich hab mich schon durch MSDN gewühlt und bin dann bei einer ähnlichen Lösung wie oben dargestellt stecken geblieben.
    http://msdn.microsoft.com/en-us/library/ms901140.aspx

    Ich befürchte die Antwort liegt in diesem Satz versteckt: "The font mapper transforms this value into device units and matches its absolute value against the character height of the available fonts."

    GUICtrlSetFont($label, 8, 400, 0, "Tahoma") sieht eindeutig anders aus wie
    GUICtrlSetFont($label, 8.5, 400, 0, "Tahoma")

    Der Rückgabewert von LOGFONT für den ersten Fall ist -10, für den zweiten Fall -11... wobei gilt:
    _WinAPI_MulDiv(Abs(-10), 72, 96) = 8
    _WinAPI_MulDiv(Abs(-11), 72, 96) = 8

    Hat vielleicht jemand eine schlaue Idee dazu 8|?( :wacko: ;( ?

    Gruß

  • Falsche Schnittpunktberechnung

    • KaFu
    • 9. Januar 2011 um 19:15
    Zitat von AspirinJunkie


    Ich denke die Zeile sollte eher If Abs((Execute($sF1) - Execute($sF2))) < 0.1 Then heißen - oder?


    Jau :). Ist schon > 10 Jahre her, dass ich mich mit Funktionen beschäftigt habe (bei Vektorfeldern oder Transformationen kann ich mich gerade so noch an die Namen erinnern :cursing: ), spannend sich mal wieder damit zu beschäftigen.

  • Falsche Schnittpunktberechnung

    • KaFu
    • 9. Januar 2011 um 18:38

    Hmmm, die allermeisten Schnittpunkte liegen bei solchen Funktionen nicht bei ganzen Zahlen?

    [autoit]


    #include <Array.au3>

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

    $sF1 = "$x ^2"
    $sF2 = "3 * $x + 1"

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

    $iStart = -1000
    $iEnd = 1000
    Global $aSchnittpunkt[1]
    $aSchnittpunkt[0] = 0

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

    For $x = $iStart To $iEnd Step 0.1
    ConsoleWrite($x & @tab & Execute($sF1) & @tab & Execute($sF2) & @crlf)
    If (Execute($sF1) - Execute($sF2)) < 0.1 Then
    ReDim $aSchnittpunkt[UBound($aSchnittpunkt) + 1]
    $aSchnittpunkt[UBound($aSchnittpunkt) - 1] = Execute($sF1)
    $aSchnittpunkt[0] = UBound($aSchnittpunkt) - 1
    EndIf
    Next

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

    _ArrayDisplay($aSchnittpunkt)

    [/autoit]
  • Besserer ListView Check

    • KaFu
    • 7. Januar 2011 um 22:01
    Zitat von Raupi

    KaFu $LVN_ITEMCHANGED war keine Option, die Notify wird zu oft ausgelöst. ;)


    Per $LVN_HOTTRACK das Item in eine globale Variable schreiben und diese dann im $LVN_KEYDOWN Event verwenden ;)?

    Zitat von UEZ

    Hi KaFu, nett, dass du dein Wissen auch hier teilst! :thumbup:


    Deine und eukalyptus Postings im internationalen Forum haben mich her gelockt :thumbup:...

  • Besserer ListView Check

    • KaFu
    • 7. Januar 2011 um 21:32

    Listviews sind sehr großzügig was Notifications angeht :)...

    [autoit]

    #include <GuiConstantsEx.au3>
    #include <GuiListView.au3>
    #include <GuiImageList.au3>
    #include <WindowsConstants.au3>

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

    Opt('MustDeclareVars', 1)

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

    $Debug_LV = False ; Check ClassName being passed to ListView functions, set to True and use a handle to another control to see it work

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

    Global $hListView

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

    _Main()

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

    Func _Main()

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

    Local $GUI, $hImage
    $GUI = GUICreate("(UDF Created) ListView Create", 200, 300)

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

    $hListView = _GUICtrlListView_Create($GUI, "", 2, 2, 394, 268)
    _GUICtrlListView_SetExtendedListViewStyle($hListView, BitOR($LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT, $LVS_EX_SUBITEMIMAGES))
    GUISetState()

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

    GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")

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

    ; Load images
    $hImage = _GUIImageList_Create()
    _GUIImageList_Add($hImage, _GUICtrlListView_CreateSolidBitMap($hListView, 0xFF0000, 16, 16))
    _GUIImageList_Add($hImage, _GUICtrlListView_CreateSolidBitMap($hListView, 0x00FF00, 16, 16))
    _GUIImageList_Add($hImage, _GUICtrlListView_CreateSolidBitMap($hListView, 0x0000FF, 16, 16))
    _GUICtrlListView_SetImageList($hListView, $hImage, 1)

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

    ; Add columns
    _GUICtrlListView_InsertColumn($hListView, 0, "Column 1", 100)

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

    ; Add items
    _GUICtrlListView_AddItem($hListView, "Row 1: Col 1", 0)
    _GUICtrlListView_AddItem($hListView, "Row 2: Col 1", 1)
    _GUICtrlListView_AddItem($hListView, "Row 3: Col 1", 2)

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

    ; Loop until user exits
    Do
    Until GUIGetMsg() = $GUI_EVENT_CLOSE
    GUIDelete()
    EndFunc ;==>_Main

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

    Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
    #forceref $hWnd, $iMsg, $iwParam
    Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndListView, $tInfo
    $hWndListView = $hListView
    If Not IsHWnd($hListView) Then $hWndListView = GUICtrlGetHandle($hListView)

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

    $tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
    $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
    $iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
    $iCode = DllStructGetData($tNMHDR, "Code")

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

    Local $tInfo = DllStructCreate($tagNMLISTVIEW, $ilParam)
    Local $iItem = DllStructGetData($tInfo, "Item")
    Local $iSubItem = DllStructGetData($tInfo, "SubItem")
    Local $iNewState = DllStructGetData($tInfo, "NewState")
    Local $iOldState = DllStructGetData($tInfo, "OldState")
    Local $iChanged = DllStructGetData($tInfo, "Changed")
    Local $iActionX = DllStructGetData($tInfo, "ActionX")
    Local $iActionY = DllStructGetData($tInfo, "ActionY")
    Local $iParam = DllStructGetData($tInfo, "Param")

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

    Switch $hWndFrom
    Case $hWndListView
    Switch $iCode
    Case $LVN_ITEMACTIVATE ; Doubleclick
    ; $tagNMITEMACTIVATE
    ConsoleWrite("$LVN_ITEMACTIVATE" & @CRLF)
    $tINFO = DllStructCreate($tagNMITEMACTIVATE, $ilParam)

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

    Case $LVN_KEYDOWN ; A key has been pressed
    ConsoleWrite("$LVN_KEYDOWN" & @CRLF)
    ; No return value
    Case $NM_CLICK ; Sent by a list-view control when the user clicks an item with the left mouse button
    ConsoleWrite("$NM_CLICK" & @CRLF)

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

    Case $LVN_ITEMCHANGED ; An item has changed
    ConsoleWrite("LVN_ITEMCHANGED" & @tab & "Item: " & $iItem & @tab & "SubItem: " & $iSubItem & @tab & "NewState: " & $iNewState & @tab & "OldState: " & $iOldState & @tab & "Changed: " & $iChanged & @tab & "ActionX: " & $iActionX & @tab & "ActionY: " & $iActionY & @tab & "Param: " & $iParam & @crlf)

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

    Case $LVN_HOTTRACK
    ConsoleWrite("LVN_HOTTRACK" & @tab & "Item: " & $iItem & @tab & "SubItem: " & $iSubItem & @tab & "NewState: " & $iNewState & @tab & "OldState: " & $iOldState & @tab & "Changed: " & $iChanged & @tab & "ActionX: " & $iActionX & @tab & "ActionY: " & $iActionY & @tab & "Param: " & $iParam & @crlf)

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

    ; No return value
    EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
    EndFunc ;==>WM_NOTIFY

    [/autoit]
  • Suche günstigen V-Server mit mehreren IP´s

    • KaFu
    • 7. Januar 2011 um 09:02

    Wie technisch versiert bist du denn :)?

    Nachdem ich bei 1&1 rausgeflogen bin (die hatten mir ein AV Paket mit untergeschoben, und als ich das per Hotline gekündigt hatte, haben die gleich meine ganze Homepage incl. Backup gecanceled (wohl eher aus Dummheit denn aus Absicht, naja...)), habe ich zu meinem Domain-Register gewechselt. Domains hoste ich bei denen schon seit 5-6 Jahren, ist aber ein eher kleiner Laden.

    Ich habe mich für einen managed Server entschieden (das Aufsetzen eines unmanaged v-Servers bei 1&1 war zwar sehr lehrreich, aber das ganze nochmal zu machen hatte ich keinen Bock :whistling: ). Dessen Einstellungen waren am Anfang weniger als optimal, eher grotten-schlecht. Aber nach dem Austausch von 10-15 Emails hatte ich auch das im Griff (der Support reagiert doch sehr schnell).

    Wenn du genug Ahnung (und Zeit und Lust) hast für einen unmanaged Server, dann ist der sehr zu empfehlen, für einen unmanaged Server nur eingeschränkt, war doch auch wiedermal ein echter K(r)ampf das Ding einzustellen.

    https://www.regfish.de/cloud/

  • Globale Variablen - besser vermeiden

    • KaFu
    • 4. Januar 2011 um 12:26

    Bei der Programmierung von SMF stolpere ich auch immer mal wieder über globale Variablen. Ich habe mir daher angewöhnt sämtliche Variablen schön lange und möglichst beschreibend zu benennen... und am Ende bügle ich einmal mit den Obfuscator Optionen "/sf /sv /om /cs=0 /cn=0" drüber :)...

  • USB

    • KaFu
    • 2. Januar 2011 um 20:34

    Hallo,

    im internationalen Forum gibt es dazu glaube ich zwei passende UDFs:

    RegisterDeviceNotifications von jaberwocky6669 und
    Safely Eject a USB Drive von wraithdu

    Es sollte möglich sein per "RegisterDeviceNotifications" auf DEVICEARRIVAL zu horchen und im Fall der Fälle dann einfach das USB Drive mit "Safely Eject a USB Drive" wieder auszuwerfen :).

    Gruß

  • Komplexeres? schnelles durchsuchen größerer Arrays

    • KaFu
    • 2. Januar 2011 um 19:33

    jchd hat zu diesem Thema eine sehr schnelle Lösung mittels SQLite im englischen Forum gepostet.

  • Exchange Variables UDF Beta

    • KaFu
    • 2. Januar 2011 um 19:02

    Hallo eukalyptus,

    hab nen zweiten kleinen Bug gefunden :). Das zweite Element meines 2D Arrays ist ein Dateiname. Dieser kann natürlich auch in Unicode sein. Unicode wird aber anscheinend vom Array Wrapper irgendwie verbaselt. Meine temporäre Lösung: Ich wandele die Strings (Array-Elemente) im Sender nach ANSI um und im Empfänger dann wieder nach UNICODE.

    [autoit]

    Func _UNICODE2ANSI($sString = "")
    ; Convert UTF8 to ANSI to insert into DB

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

    ; http://www.autoitscript.com/forum/index.ph…ndpost&p=614497
    ; ProgAndy
    ; Make ANSI-string representation out of UTF-8

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

    Local Const $SF_ANSI = 1
    Local Const $SF_UTF8 = 4
    Return BinaryToString(StringToBinary($sString, $SF_UTF8), $SF_ANSI)
    EndFunc ;==>_UNICODE2ANSI

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

    Func _ANSI2UNICODE($sString = "")
    ; Extract ANSI and convert to UTF8 to display

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

    ; http://www.autoitscript.com/forum/index.ph…ndpost&p=614497
    ; ProgAndy
    ; convert ANSI-UTF8 representation to ANSI/Unicode

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

    Local Const $SF_ANSI = 1
    Local Const $SF_UTF8 = 4
    Return BinaryToString(StringToBinary($sString, $SF_ANSI), $SF_UTF8)
    EndFunc ;==>_ANSI2UNICODE

    [/autoit]

    Gruß

  • Exchange Variables UDF Beta

    • KaFu
    • 1. Januar 2011 um 18:48

    Hallo eukalyptus,

    vielen Dank für diese UDF Sammlung :). Ich verwende sie jetzt wie hier besprochen um Bitmaps von einem an ein anderes Script zu übertragen, funktioniert tadellos :).

    Ein Bug ist mir jetzt aber aufgefallen. Ich übertrage eine Liste an zu bearbeitenden Elementen als 2D Array per _ExchangeVariables_SetVariable(). Wenn ich mir im Zielprogramm das empfangene Array nun per _ArrayDisplay() anschaue, enthält das allerletzte Element am Ende immer noch den Delimiter.

    Ich denke das müsste in der Funktion __ExchangeVariables_StringToArray($sString) behoben werden. Da ich immer nur 2D Arrays übertrage, habe ich einen Workaround eingefügt. Statt

    [autoit]

    Case 2
    Local $aReturn[$aDim[1] + 1][$aDim[2] + 1]
    For $1 = 0 To $aDim[1]
    For $2 = 0 To $aDim[2]
    $aReturn[$1][$2] = __ExchangeVariables_StringToVariant(StringTrimLeft($aSplit[$iCnt], 2), StringLeft($aSplit[$iCnt], 2))
    $iCnt += 1
    Next
    Next
    Return $aReturn

    [/autoit]

    steht bei mir nun

    [autoit]

    Case 2
    Local $aReturn[$aDim[1] + 1][$aDim[2] + 1]
    For $1 = 0 To $aDim[1]
    For $2 = 0 To $aDim[2]
    $aReturn[$1][$2] = __ExchangeVariables_StringToVariant(StringTrimLeft($aSplit[$iCnt], 2), StringLeft($aSplit[$iCnt], 2))
    $iCnt += 1
    Next
    Next
    $aReturn[$aDim[1]][$aDim[2]] = StringReplace(StringStripWS(StringReplace($aReturn[$aDim[1]][$aDim[2]],"|",""),2),Chr(1),"")
    Return $aReturn

    [/autoit]

    dann funktioniert die Übertragung reibungslos. Bin mir nicht sicher, an welcher Stelle das Problem grundsätzlich zu lösen wäre :)...

    Vielen Dank für deine tolle Arbeit und ein frohes neues Jahr :)!

  • C#-DLL in AutoIt einbinden

    • KaFu
    • 17. Dezember 2010 um 21:24

    Hatte ich auch schon dran gedacht, aber doudou meinte das würde nicht funktionieren, daher hab ichs auch nicht ausprobiert :whistling: ...

  • C#-DLL in AutoIt einbinden

    • KaFu
    • 17. Dezember 2010 um 20:39

    Hallo Forum :),

    ich bin durch einen Artikel im autoitscript.com Forum auf dieses Posting gestoßen. Hintergrund ist, dass ich schon seit geraumer Zeit auf der Suche nach einer Möglichkeit bin, über das IExtractImage Interface Vorschau-Bilder aus dem Explorer auszulesen. Nun habe ich auf espend.de eine entsprechende c# dll gefunden. Leider scheint das Tool aber bei dieser dll nicht zu funktionieren ;( , es werden keine zu exportierenden Funktionen gefunden. Mag da vielleicht mal jemand reinschauen, der ein wenig mehr Ahnung davon hat :S?

    Gruß
    Karsten

  • Another AutoIt PreProcessor

    • KaFu
    • 21. April 2010 um 19:32

    Hiho Eukalyptus, hast mich endlich dazu gebracht mich hier auch anzumelden :). Vielen Dank für den netten PreProcessor, werd mal versuchen SMF mit ner vernünftigen Kombo an switches compiled zu bekommen. Ein kleiner Punkt ist mir bisher aufgefallen, $CmdLineRaw darf auch nicht umbenannt werden.

    Gruß nach Wien :)...

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™