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

Beiträge von Gofel

  • GDI Plus Bild aus dem Backbuffer zeichen

    • Gofel
    • 9. Juli 2015 um 19:48
    Zitat von CentuCore

    na anstelle von DrawString fügst du einfach jeden Zeichenbefehl ein den du willst ^^ und schon ist das "gebackbuffert".

    Ich mache schon den 2. Tag nichts anderes als von solchen Beispielen zu versuchen auf _GDIPlus_GraphicsDrawImageRect() umzustellen. :P
    Ich habe da entweder einen riesen Knoten im Kopf oder Transparente PNG lassen sich nicht mal ebend auf diese Weise in den Backbuffer schieben, ich erhalte immer eine leeres Bild.
    Daher meine Bitte mir möglichst meinen Code oben anzupassen.

  • GDI Plus Bild aus dem Backbuffer zeichen

    • Gofel
    • 9. Juli 2015 um 18:40
    Zitat von CentuCore

    Das ganze GUI-Zeugs mit dem Testen ist die Maus jz auf dem Button oder nicht ist einfach seeeehr umfangreich und kann sich mit solchen Tricks recht leicht umgehen lassen. Zudem sind dann solche "eigenen" Controls nicht so leicht zu automatisieren :D

    Das habe ich bisher mit einem Pseudo Control gelöst. Event auf leeres GUICtrlCreatePic(), selbe stelle mit GDI Plus übermalen.
    Dein Beispiel hilft mir leider nicht weiter, du backbufferst ein _GraphicsDrawString und nicht ein transparentes png, genau bei dieser Umstellung habe ich ja den Knoten im Kopf

    An UEZ´s Variante stört mich jetzt nur noch das man den Button darunter noch sieht, ich wollte mir halt eigene Controls basteln die auch mal ihr Aussehen ändern können (aus Play Button wird z.B. der Laden Button). Ein unötiges neuzeichnen ließe sich sicherlich auch anders im Code abfangen, aber dann bleibt immer noch der Fall das wenn ich viele dieser eigenen Controls gleichzeitig ändern will ein deutliches nacheinander zeichen zu sehen ist. Schöner wäre wenn alle gepuffert wären und gleichzeitig angezeigt werden, dann flackert es zumindest nur einmal kurz.

    Hier vielleicht mal ein Screenshot um sich das besser vorstellen zu können:

    beispiel.JPG

    Links ist eine Liste mit Spielen die ich habe, rechts werden die Artworks für das Spiel gesetzt. Wähle ich ein anderes Spiel bauen sich die Artworks und Sprachen Symbole (manchmal) merklich nacheinander auf. Klicke ich auf das gleiche Spiel nur in einer anderen Sprache wird womöglich wieder das selbe Cover Artwork angezeigt (weil ich für die englische und deutsche Variante eventuell das gleiche Bild hinterlegt habe). Leider Flackert dann wieder alles. Sollte das mit dem Backbuffer nicht klappen müsste ich erstmal die Checksummen der Bilder vergleichen und dann nur bei Bedarf neu zeichnen, was wieder neu Probleme aufwirft da sich die Bilder teilweise überlagern...
    Dem Problem wollte ich am liebsten mit einem "unbemerkten" neuzeichnen entgegen treten.

  • GDI Plus Bild aus dem Backbuffer zeichen

    • Gofel
    • 9. Juli 2015 um 15:53

    Ich weiß, gefühlt schon 100 mal behandelt, leider konnte mir bisher kein Beitrag im Forum so richtig weiterhelfen.

    Ich spiele grade etwas mit GDI Plus rum und versuche Buttons aus transparenten PNG Bilder zu erstellen. Ab und an kommt es beim neuzeichnen der png Bilder zu einem Flackern. Ich hörte von diesem Backbuffer, bekomme ihn aber einfach nicht umgesetzt.

    Hier mal ein Beispiel, $Pic bitte anpassen:

    AutoIt
    #include <GUIConstantsEx.au3>
    #include <GDIPlus.au3>
    
    
    Opt("GUIOnEventMode", 1) ;Gui on Event Mode
    
    
    
    
    Global $Pic = @ScriptDir & "\lib\gra\buttons\play.png"
    Global $hGUI_Main, $hGraphic, $hImage
    Global $hGUI_Main_Color = 0xF0F0F0
    
    
    
    
    ;------------------
    
    
    _Gui()
    _Draw()
    
    
    While 1
    	Sleep(500)
    	_Redraw()
    WEnd
    
    
    ;------------------
    
    
    
    
    Func _Gui()
    	$hGUI_Main = GUICreate("", 400 , 400, -1, -1)
    	GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")
    	GUISetState(@SW_SHOW, $hGUI_Main)
    EndFunc
    
    
    Func _Draw()
    
    
    	;Pic einmal normal zeichen
    	_GDIPlus_StartUp()
    	$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI_Main)
    	$hImage = _GDIPlus_ImageLoadFromFile($Pic)
    	_GDIPlus_GraphicsDrawImageRect( $hGraphic, $hImage, 0, 0, 400, 400)
    
    
    
    
    EndFunc
    
    
    Func _Redraw()
    
    
    	;Pinsel zum übermalen vorbereiten
    	$hBrush = _GDIPlus_BrushCreateSolid(0xFF000000 + $hGUI_Main_Color)
    	_GDIPlus_GraphicsFillRect($hGraphic, 0, 0, 400, 400, $hBrush)
    	;Übermalen
    	_GDIPlus_GraphicsDrawImageRect( $hGraphic, $hBrush, 0, 0, 400, 400)
    
    
    
    
    	;Bild in den Backbuffer laden und neu zeichen
    
    
    	;?????
    	_GDIPlus_GraphicsDrawImageRect( $hGraphic, $hImage, 0, 0, 400, 400)
    
    
    EndFunc
    
    
    Func _Exit()
    ;~ 	_GDIPlus_GraphicsDispose($backbuffer)
    ;~     _GDIPlus_BitmapDispose($bitmap)
    	Exit
    EndFunc
    Alles anzeigen


    Im eigentlichen Programm zeichne ich natürlich nicht alle 500ms neu, ist nur ein Beispiel.
    Kann mir bitte jemand auf die Sprünge helfen.

    Edit: Das Beispiel ist vielleicht etwas unglücklich gewählt, ein Schuh wird draus wenn es nicht jedes mal wieder neu in den Backbuffer galaden wird sondern nur aus dem Backbuffer neu gezeichnet wird.
    Mir geht es hauptsächlich um das WIE in den Backbuffer und WIE von dort aufs GUI zeichen.

  • Kopiergeschwindigkeit drosseln

    • Gofel
    • 23. November 2014 um 19:10

    Hatte heute keine Zeit zum schauen, aber danke für die Erklärung. So läßt sich eine schöne Lösung zum drosseln der Geschwindigkeit basteln.

    Edit: Ich wollte nur nochmal Rückmeldung geben, die von bbm1995 gepostete Funktion ist in mein Script eingebaut und läßt sich ganz fein über das Sleep regulieren. Kommentiert man das Sleep ganz aus ist die Kopiergeschwindigkeit gleichwertig zu einem FileCopy, schönes Ding!

  • Kopiergeschwindigkeit drosseln

    • Gofel
    • 22. November 2014 um 22:32

    Sehr schön, natürlich viel eleganter als mit Trim rumzueiern. leider versteh ich nicht warum es funktioniert :whistling:
    Die Schleife durchläuft:

    Code
    $ByteBlock = FileRead($OpenHandle, $BlockSize)

    $BlockSize ist doch aber eine Konstante, nach meinem Verständnis wird hier immer wieder der selbe Teil von $OpenHandle in $ByteBlock eingelesen.??

    Wie auch immer, sobald ich das verstehe verwende ich diese Variante. Danke auch dir.

  • Kopiergeschwindigkeit drosseln

    • Gofel
    • 21. November 2014 um 23:35

    Klingt interessant, hättest du ein Beispiel für mich wie man Daten schrittweise einliest?
    Ich hab nämlich keine Idee wie das gehen soll.

    Edit: Bisher hab ich das hier auf die Reihe bekommen:

    Code
    $File = @ScriptDir & "\a.mpg"
    $FileZiel = @ScriptDir & "\b.mpg"
    
    
    $oFile = FileOpen($File,4)
    $Line = FileRead($oFile)
    
    
    While 1
        $Block = StringLeft($Line, 1000000)
        If $Block = "" Then ExitLoop
        FileWrite( $FileZiel, $Block)
        $Line = StringTrimLeft($Line, 1000000)
        Sleep(1000)
    WEnd
    Alles anzeigen

    Ein normales Filemove dauert mit dieser Testdatei ca 3 Sekunden. Mit Filewrite schon ohne das Sleep ca 20 Sekunden. Sieht schrecklich ineffektiv aus, aber könnte genau das sein was ich in diesem Fall brauche. Ich probier das morgen mal im Netzwerk aus, danke

  • Kopiergeschwindigkeit drosseln

    • Gofel
    • 21. November 2014 um 22:52

    Hi,
    ich habe ein Script was fertige TV Aufnahmen vom TV-Server auf meinen Arbeitsrechner verschiebt sobald beide Rechner gleichzeitig an sind. Leider lastet das normale Filemove dabei das Netzwerk und (komischerweise) den Arbeitsrechner dermaßen aus das ein weiterarbeiten während des Kopierens fast unmöglich ist. Wenn sich wieder einmal, so wie jetzt, mehrere Gigabyte angesammelt haben ist hier erstmal für längere Zeit Pause angesagt.
    Daher die Frage, kennt jemand eine Möglichkeit die Kopiergeschwindigkeit zu drosseln?
    Wenn nicht per AutoIt, dann von mir aus auch über Batch. Ungerne nehme ich auch Hinweise über 3.Party Anwendungen entgegen in die ich mich erst wieder einarbeiten muss (rsysnc?).
    Danke

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™