G15 LCD Fernsteuern mit Acitve-X

  • Du kannst den Bereich mit einem Rechteck schwarz übermalen :

    Spoiler anzeigen
    [autoit]

    Func _CreateLCDRectBlack($iX,$iY,$iW,$iH,$hBitmap = 0,$iFill = 0,$hPen = 0)
    Local $hWnd, $hImage, $hGraphics, $hBrush, $x, $y, $hRet
    If Not $hBitmap Then
    $hWnd = GUICreate("")
    $hBitmap = _WinAPI_CreateCompatibleBitmap(_WinAPI_GetDC($hWnd), 160, 43)
    EndIf
    $hImage = _GDIPlus_BitmapCreateFromHBITMAP($hBitmap)
    $hGraphics = _GDIPlus_ImageGetGraphicsContext($hImage)

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

    If $iFill Then
    $hBrush = _GDIPlus_BrushCreateSolid(0xFF000000)
    _GDIPlus_GraphicsFillRect($hGraphics,$iX,$iy,$iW,$iH,$hBrush)
    Else
    If $hPen = 0 Then $hPen = _GDIPlus_PenCreate(0xFF000000,1)
    _GDIPlus_GraphicsDrawRect($hGraphics,$iX,$iY,$iW,$iH,$hPen)
    EndIf
    $hRet = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage)
    GUIDelete($hWnd)
    _GDIPlus_ImageDispose($hImage)
    _WinAPI_DeleteObject($hBitmap)
    Return $hRet
    EndFunc

    [/autoit]


    (Wahrscheinlich, kann es nicht testen :) )

  • ja habs grad selbst rausgetüdelt, hatte iwie das 2te Beispiel komplett vergessen

    jetzt bin ich meiner Lösung schon näher :)

  • Hi,
    DANKE GTASpider :)

    Mn kann echt so einiges machen mit dienen Funktionen, echt toll :thumbup:

    Wenn ich jetzt einzelne Bereiche leeren will, soll ich dann einfach alles clearen und z.B. alles neu hinschreiben oder ist es auch möglich einzelne Bereiche zu clearen?
    So gehts ja auch :), thx

    • Offizieller Beitrag

    Hallo

    Hab dir mal ne funtkion geschrieben und werde diese wenn ich mal ZEit finde auch in die AvLCD.au3 einbinden, gute idee ;)

    Spoiler anzeigen
    [autoit]

    #include<AvLCD.au3>

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

    _StartLCD("AutoIt Test")

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

    $hText = _CreateLCDRect(2, 16, 154, 10); Progressbar Rand
    $hText = _CreateLCDRect(4, 18, Round(151 * 50 / 100), 7, $hText, 1) ;Progressbar
    $hText = _CreateLCDText("Blabla...", $hText, -2, 2)
    $hText = _CreateLCDText("50%", $hText, 128, 2)
    $hText = _CreateLCDText("jaja, dass hier ist ein etwas länger",$hText,0, 26, "Arial", 7)
    _ShowBitmap($hText)
    MsgBox(0, "", "Klicke auf OK um die Progressbar zu löschen")
    $hText = _DeleteLCDSection($hText,2,16,155,11)
    _ShowBitmap($hText)
    MsgBox(0, "", "Klicke auf OK wenn du es dir angeguckt hast!")

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

    Func OnAutoItExit()
    _CloseLCD()
    EndFunc ;==>OnAutoItExit

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

    Func _DeleteLCDSection($hBitmap, $iX = 0,$iY = 0, $iW = 160, $iH = 43)
    If Not $hBitmap Then Return SetError(1,0,0)
    $hImage = _GDIPlus_BitmapCreateFromHBITMAP($hBitmap)
    $hGraphics = _GDIPlus_ImageGetGraphicsContext($hImage)
    _GDIPlus_GraphicsFillRect($hGraphics, $iX, $iY, $iW, $iH)
    $hRet = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage)
    _GDIPlus_ImageDispose($hImage)
    _WinAPI_DeleteObject($hBitmap)
    Return $hRet
    EndFunc

    [/autoit]

    Wenn du die Funktion einfach leer lest (also _DeleteLCDSection($hBitmap)) wird alles gelöscht.

    Mfg Spider

  • ist die UDF denn nun Vista Kompatibel, oder nicht?
    Edit: OK habs bei meinem bruder getestet (hab ja keine g15 ;( (brauch ich auch nich :D :P )) es läuft bei ihm und er hat vista und g15 v2.

    Einmal editiert, zuletzt von twister (30. Juli 2008 um 22:43)

  • Soweit ich das alles verstanden habe kann man das Volume Rad nicht benutzen richtig?
    könnte man das noch einbauen oder geht das nicht?

  • Ich habe ein Problem entdeckt.
    Wenn ich sowas mache:

    Spoiler anzeigen
    [autoit]


    Dim $i = 0
    While 1
    $i += $i
    $hbmp = _CreateLCDText($i, 0, 0, 33, "Arial", 7)
    _ShowBitmap($hBMP)
    Wend

    [/autoit]


    Dann benötigt das viel Speiche aber ich muss es so machen.
    Woran liegt das und wie kann man das ändern?

  • genau das ist auch mein problem würde mich sehr über ne lösung freuen
    und noch ne kleine frage kan man das mit dem volume rad auch irgentwie so etwas mit den g tasten machen???
    hoffe auf antwort^^

    mfg holy

    ps. gta ich bin dein größter fan^^

    • Offizieller Beitrag

    Hallo

    Nein andy, daran liegt das ja eben nicht. Das Objekt wird ja sowieso schon nach dem erstellen gelöscht (am ende jeder Funktion)
    Das muss irgendwas anderes sein, aber ich komm einfach nicht dahinter?!

    @holyholy: Hm - Ich glaube das ist nicht möglich, weil die Tasten ja direkt von Logitech Abgefangen werden. :(

    Mfg Spider

  • @eagle: Füge einfach ein _WinAPI_DeleteObject($hbmp) in deine Schleife mit ein :)

    mhh also bei mir hilf das nix

    mfg holy

    ps. aber tozdem danke

    ps.2

    @holyholy: Hm - Ich glaube das ist nicht möglich, weil die Tasten ja direkt von Logitech Abgefangen werden.

    mhhh ich habe sowas aber schon mal in nem g15 forum gesehen nur in c++

    Einmal editiert, zuletzt von holyholy (31. August 2008 um 16:11)

  • OK, 1. Lass das drin. In _ShowBitmap wird das ja NICHT gelöscht.
    2. In _CreateLCDText wird nicht korrekt alles aufgeräumt. So sollte es korrekt sein.:

    Spoiler anzeigen
    [autoit]

    Func _CreateLCDText($sText, $hBitmap = 0, $iX = 0, $iY = 0, $sFont = "Arial", $iSize = 8, $iStyle = 0)
    ;$iStyle: 0 - Normal weight or thickness of the typeface ;1 - Bold typeface ;2 - Italic typeface ;4 - Underline ;8 - Strikethrough
    Local $hWnd, $hImage, $hGraphics, $hBrush, $hFormat, $hFont, $hFamily, $tLayout, $hRet

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

    If Not $hBitmap Then
    $hWnd = _WinAPI_GetDC(0)
    $hBitmap = _WinAPI_CreateCompatibleBitmap($hWnd, 160, 43)
    EndIf
    $hImage = _GDIPlus_BitmapCreateFromHBITMAP($hBitmap)
    $hGraphics = _GDIPlus_ImageGetGraphicsContext($hImage)

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

    $hBrush = _GDIPlus_BrushCreateSolid(0xFFFFFFFF)
    $hFormat = _GDIPlus_StringFormatCreate()
    $hFamily = _GDIPlus_FontFamilyCreate($sFont)
    $hFont = _GDIPlus_FontCreate($hFamily, $iSize, $iStyle)
    $tLayout = _GDIPlus_RectFCreate($iX, $iY, 160, 43)
    _GDIPlus_GraphicsDrawStringEx($hGraphics, $sText, $hFont, $tLayout, $hFormat, $hBrush)
    $hRet = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage)
    _WinAPI_ReleaseDC(0,$hWnd)
    _GDIPlus_BrushDispose($hBrush)
    _GDIPlus_StringFormatDispose($hFormat)
    _GDIPlus_FontFamilyDispose($hFamily)
    _GDIPlus_FontDispose($hFont)
    _GDIPlus_GraphicsDispose($hGraphics)
    _GDIPlus_BitmapDispose($hImage)
    _WinAPI_DeleteObject($hBitmap)
    Return $hRet
    EndFunc ;==>_CreateLCDText

    [/autoit]
  • Einmal editiert, zuletzt von holyholy (31. August 2008 um 16:39)

  • Also dein Testskript (ohne die Ausgabe auf LCD, wg keiner G15) bleibt bei mir bei etwa 10000 K im Taskmanager stehen :)

    Spoiler anzeigen
    [autoit]

    _GDIPlus_Startup()
    Dim $i = 0
    While 1
    $i += $i
    $hbmp = _CreateLCDText($i, 0, 0, 33, "Arial", 7)
    ;~ _ShowBitmap($hBMP)
    _WinAPI_DeleteObject($hbmp)
    Sleep(1)
    Wend
    _GDIPlus_Shutdown()

    [/autoit]

    //Edit: Dann ist es ja gut :)
    //Edit 3: Auch die anderen _Create... müssen auf Speicherbereinigung angepasst werden !!!

  • Riesen Dank!
    Jetzt funktioniert alles!

    //Edit: muss mich korrigieren: es geht besser, aber die auslastung erhöht sich noch aber nicht mehr so stark
    //Edit: nach einiger Zeit kommt ne Fehlermeldung dass der die Bitmap nicht erzeugen konnte oder so dann hängt sich alles auf

    2 Mal editiert, zuletzt von eagle (1. September 2008 um 18:48)

  • mhh kanst du auch eine funktion für die beleuchtung machen?
    und vieleicht eine die das applet in den vordergrund holt

    Einmal editiert, zuletzt von holyholy (2. September 2008 um 15:34)