_GDIPlus_GraphicsDrawCurve ohne 'Abrundungen'
-
Schmunke -
31. Januar 2020 um 20:00 -
Erledigt
-
-
Danke für die Demo 'falsche Darstellung / korrekte Darstellung'. Klappt bei mir jetzt auch.
-
Mars - ich habe jetzt mal dein Beispiel mit dem routierenden Text probiert ...
Sieht gut aus ... aber leider verschwindet der Text, sobald ich eine MsgBox auf das Fenster lege.
Die MsgBox wird aufgerufen, wenn ich das Programm durch Klicken auf das Kreuz beende.
Nach dem verschieben der MsgBox ist der Text leider weg.
Hier mal nen Screenshot dazu
-
- Offizieller Beitrag
1 mal mit dem Mouseover und 1 mal direkt nach dem Mouseover.
Was bitte verstehst du unter "Mouseover"? Ich habe Tooltip und MsgBox drübergelegt - hat keinen Einfluß, der Text bleibt.
-
BugFix ... hhmmm .... sowas hat den Info-Text erzeugt.
1 Sek. stehen lassen und dann einen weiteren ToolTip erzeugt - nur kürzer.
Das das Win 7 ist macht nicht den Unterschied, oder ?
Spoiler anzeigen
ToolTip($sText, 10, ($wAktReg * 35) + 15, $sTitle, 1)Sleep($sSec * 1000)
aber danke, das du nochmal nachgeschaut hast ...
-
- Offizieller Beitrag
Das das Win 7 ist macht nicht den Unterschied, oder ?
Ich verwende auch Win7, daran kann es nicht liegen.
-
Das ist wirklich seltsames Verhalten. Bei mir kann ich anstellen was ich will (msgboxen, tooltips, sonstiges) und der Text bleibt immer erhalten (Das liegt möglicherweise an irgendwelchen Windows-Updates, ich kann mich nämlich erinnern vor langer langer Zeit immer damit gekämpft zu haben das plötzlich Teile aus dem GFX/DC eines Fensters plötzlich "verschwunden" sind weil etwas davorlag. Aber das ist so lange her das ich kaum noch weiß warum das passiert ist). Was nicht abgedeckt ist in meinem Beispiel ist WM_PAINT (dafür braucht man einen weiteren Backbuffer der immer das letzte gerenderte Bild enthält. Den kann man dann Eventdriven ins GUI zeichnen ohne das etwas fehlt) und einige andere WMs. Falls es WM_PAINT ist sollte das Problem leicht zu beheben sein, falls nicht muss weiter gebohrt werden bis man weiß was der Verursacher ist.
Schau mal ob das Problem hier immernoch auftritt, ich kann es bei mir leider nicht reproduzieren...
Code
Alles anzeigen#include <GDIPlus.au3> Opt('GUIOnEventMode', 1) Global Const $sTitle = 'Test' Global Const $iW = 400 Global Const $iH = 400 Global $bExit = False _GDIPlus_Startup() Global $hGUI = GUICreate($sTitle, $iW, $iH + 30) Global $hGFX = _GDIPlus_GraphicsCreateFromHWND($hGUI) Global $hBMP = _GDIPlus_BitmapCreateFromGraphics($iW, $iH, $hGFX) Global $hBMP2 = _GDIPlus_BitmapCreateFromGraphics($iW, $iH, $hGFX) Global $hBUF = _GDIPlus_ImageGetGraphicsContext($hBMP) Global $hBUF2 = _GDIPlus_ImageGetGraphicsContext($hBMP2) Global $hFAM = _GDIPlus_FontFamilyCreate('Arial') Global $hFON = _GDIPlus_FontCreate($hFAM, 35, 0, 2) Global $hFOR = _GDIPlus_StringFormatCreate() Global $hBRU = _GDIPlus_BrushCreateSolid(0xFF303030) Global $hMAT = _GDIPlus_MatrixCreate() Global $hSLI = GUICtrlCreateSlider(10, $iH + 5, $iW - 20, 20) _GDIPlus_GraphicsSetTextRenderingHint($hBUF, 4) GUISetOnEvent(-3, EVENT, $hGUI) GUIRegisterMsg(0xF, WM_PAINT) OnAutoItExitRegister('Xit') GUISetState(@SW_SHOW, $hGUI) While Not $bExit And Sleep(10) _GDIPlus_GraphicsClear($hBUF, 0xFFE0E0E0) ; Clear BUF Local $tRect = _GDIPlus_RectFCreate(200, 200) Local $alpha = GUICtrlRead($hSLI) * 360/100 _GDIPlus_MatrixTranslate($hMAT, -200, -200, True) ; MatrixRotate geht immer um den Ursprung. Ist der Text bei (x,y)=(200,200), muss die Matrix dementsprechend verschoben werden. _GDIPlus_MatrixRotate($hMAT, $alpha, True) ; Rotation um irgendeinen Winkel _GDIPlus_MatrixTranslate($hMAT, 200, 200, True) ; Matrix zurückverschieben _GDIPlus_GraphicsSetTransform($hBUF, $hMAT) ; Matrix anwenden _GDIPlus_GraphicsDrawStringEx($hBUF, 'Kraft[N]', $hFON, $tRect, $hFOR, $hBRU) ; Text zeichnen _GDIPlus_MatrixTranslate($hMAT, -200, -200, True) ; Rücktransformation damit man danach noch andere sachen Zeichnen kann _GDIPlus_MatrixRotate($hMAT, -$alpha, True) _GDIPlus_MatrixTranslate($hMAT, 200, 200, True) _GDIPlus_GraphicsSetTransform($hBUF, $hMAT) ; Matrix anwenden Jetzt ist wieder alles beim alten. _GDIPlus_GraphicsDrawStringEx($hBUF, 'Kraft[N]', $hFON, $tRect, $hFOR, $hBRU) ; Text zeichnen (der hier wird jetzt statisch sein und kann sich nicht drehen) _GDIPlus_GraphicsDrawImageRect($hBUF2, $hBMP, 0, 0, $iW, $iH) ; Ziel in hBUF2 speichern _GDIPlus_GraphicsDrawImageRect($hGFX, $hBMP2, 0, 0, $iW, $iH) ; hBUF2 zeichnen WEnd Func WM_PAINT() ; Zeichnet hBUF2 in dem sich ansich immer ein fertig gerendertes Bild befinden sollte... _GDIPlus_GraphicsDrawImageRect($hGFX, $hBMP2, 0, 0, $iW, $iH) EndFunc Func EVENT() Switch @GUI_CtrlId Case -3 $bExit = True EndSwitch EndFunc Func Xit() _GDIPlus_MatrixDispose($hMAT) _GDIPlus_BrushDispose($hBRU) _GDIPlus_StringFormatDispose($hFOR) _GDIPlus_FontDispose($hFON) _GDIPlus_FontFamilyDispose($hFAM) _GDIPlus_GraphicsDispose($hBUF2) _GDIPlus_BitmapDispose($hBMP2) _GDIPlus_GraphicsDispose($hBUF) _GDIPlus_BitmapDispose($hBMP) _GDIPlus_GraphicsDispose($hGFX) _GDIPlus_Shutdown() EndFunc
M
-
-