Seite 1 von 1
DrawText wieder löschen?!
Verfasst: 03.11.2004 10:40
von Lukaso
Hallo,
ich habe ein Fenster wo ich Draw Text anwende, damit Zeichne ich die Zeit aufs Fenster, in der Repeatschleife wird das immer wieder aufgerufen, nur ist das Problem, dass er die alten DrawTexts's nicht löscht, gibts da nen Befehl?
Danke
Lukaso
Verfasst: 03.11.2004 11:18
von bobobo
Du kannst beim Aufruf von drawtext den hintergrund NICHT transparent
schalten (drawingmode(0)) und damit bei einem erneuten Aufruf von
drawtext einen vorhandenen übermalen. Dafür müssen die Hintergründe
natürlich passend gewählt werden und die Texte ungefähr die gleichen
Ausdehnungen (Ich hatte das mal durch anhängen von Leerzeichen
erreicht).
ODER so
Du kannst den vorhandenen Text erstmal durch eine Box mit der
Hintergrundfarbe übertünchen um danach einen neuen Tex per drawtext
draufmalen.
Verfasst: 03.11.2004 11:43
von Lukaso
@bobobo
Danke für deine Hilfe!
Aber naja, gibt es da nix einfacheres, dass Problem ist, dass mein Fenster nen Hintergrundbild hat. Da ist drawingmode(1) pflicht! Ich bräuchte so ne art ClearScreen() fürs Fenster

Oder noch besser: Ein befehl um das Hintergrundbild zu Refrashen, damit es wieder vorm DrawText ist
MFG Lukaso
Verfasst: 03.11.2004 12:00
von Danilo
Lukaso hat geschrieben:Ich bräuchte so ne art ClearScreen() fürs Fenster

Oder noch besser: Ein befehl um das Hintergrundbild zu Refrashen, damit es wieder vorm DrawText ist

hWnd ist Deine WindowID(). Der 2. Parameter bei InvalidateRect
ist eine RECT-Struktur, wo Du sagen kannst welcher Bereich
neu gezeichnet werden muß. 0 = das ganze Fenster.
Vielleicht solltest Du hier ein ImageGadget nehmen und
darauf den Text zeichnen. Vom Fensterhintergrund müsstest
Du dann noch ein Bild anlegen, mit dem Bereich wo das
ImageGadget ist, dann sieht man das Gadget nicht (ist ja
nicht transparent).
Verfasst: 03.11.2004 12:25
von Lukaso
@Danilo
Danke damit funktionierts!
@all
Habe noch eine Frage: Kann ich sagen ich welches Fenster ich etwas Zeichnen will, wenn ich Jetzt nen ChildWindow öffne, habe ich das Problem, dass er das dann nicht ins MainWindow wie ich es will zeichnet, sondern in das Offene Childwindow!
MFG Lukaso
Verfasst: 03.11.2004 12:39
von Danilo
Lukaso hat geschrieben:@all
Habe noch eine Frage: Kann ich sagen ich welches Fenster ich etwas Zeichnen will, wenn ich Jetzt nen ChildWindow öffne, habe ich das Problem, dass er das dann nicht ins MainWindow wie ich es will zeichnet, sondern in das Offene Childwindow!
UseWindow() vorm zeichnen nehmen, oder noch besser mit
ImageGadget.

Verfasst: 03.11.2004 13:23
von Lukaso
@Danilo
Ich bin jetzt mal erlich, Irgendwie habe ich das oben mit dem "ImageGadget" nicht richtig verstanden

Verfasst: 03.11.2004 22:08
von Danilo
Lukaso hat geschrieben:@Danilo
Ich bin jetzt mal erlich, Irgendwie habe ich das oben mit dem "ImageGadget" nicht richtig verstanden

Zeig mal einen Mini-Code wo man das HintergrundBild sieht
und wie Du auf das Fenster zeichnest.
Verfasst: 03.11.2004 22:23
von Ynnus
Anstatt direkt auf das Fenster zu malen meint Danilo, solltest du ein ImageGadget erstellen und auf dieses Image zeichnen. Dann wird es von PureBasic automatisch aktualisiert, muss nicht mehr neugezeichnet werden und kann einfach mit Drawing-Befehlen übermalt werden.

Verfasst: 03.11.2004 23:12
von Lukaso
Meinste sowas in der art?
Code: Alles auswählen
icon = CatchImage(0, ?icon)
icon_play = CatchImage(1, ?icon_play)
DataSection
icon: IncludeBinary "images/icon.bmp"
icon_play: IncludeBinary "images/icon_play.bmp"
EndDataSection
Global tickertext.s
Procedure ticker(auf_gadget)
font_tmp = LoadFont(#PB_Any, "Verdana", 7, #PB_Font_Bold)
Repeat
pix = 1
Repeat
image_tmp = CopyImage(auf_gadget, #PB_Any)
StartDrawing(ImageOutput())
Locate(ImageWidth() - pix, 22)
pix + 1
DrawingFont(UseFont(font_tmp))
FrontColor(255, 255, 255)
If pix > ImageWidth() + TextLength(tickertext)
StopDrawing()
Break
EndIf
DrawingMode(1)
tickertext = "LUKASO - TEST - TEST"
DrawText(tickertext)
StopDrawing()
If image_old <> 0
FreeImage(image_old)
EndIf
SetGadgetState(auf_gadget, UseImage(image_tmp))
image_old = image_tmp
Delay(20)
ForEver
ForEver
EndProcedure
If OpenWindow(0, 0, 0, 32, 40, #PB_Window_BorderLess | #PB_Window_ScreenCentered, "ImageGadget TICKER")
If CreateGadgetList(WindowID(0))
ImageGadget(1, 0, 0, ImageWidth(), ImageHeight(), icon)
th = CreateThread(@ticker(), 1)
Repeat
Until WaitWindowEvent()=#PB_Event_CloseWindow
EndIf
EndIf
Mir wird hier geholfen:
http://robsite.de/php/pureboard/viewtopic.php?p=6867 