DrawText wieder löschen?!

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
Lukaso
Beiträge: 720
Registriert: 08.09.2004 18:51
Wohnort: Oberkirch
Kontaktdaten:

DrawText wieder löschen?!

Beitrag 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 :allright:

Lukaso
Nextgen Guild Wars Fanseite: Guild Wars Tactics (Pseudo-Admin + Developer)
"Das Fluchen ist die einzige Sprache, die jeder Programmierer beherrscht." - Unbekannter Autor
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3873
Registriert: 13.09.2004 17:48
Kontaktdaten:

Beitrag 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.
‮pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Benutzeravatar
Lukaso
Beiträge: 720
Registriert: 08.09.2004 18:51
Wohnort: Oberkirch
Kontaktdaten:

Beitrag 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 :allright: Oder noch besser: Ein befehl um das Hintergrundbild zu Refrashen, damit es wieder vorm DrawText ist ;)


MFG Lukaso
Nextgen Guild Wars Fanseite: Guild Wars Tactics (Pseudo-Admin + Developer)
"Das Fluchen ist die einzige Sprache, die jeder Programmierer beherrscht." - Unbekannter Autor
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Beitrag von Danilo »

Lukaso hat geschrieben:Ich bräuchte so ne art ClearScreen() fürs Fenster :allright: Oder noch besser: Ein befehl um das Hintergrundbild zu Refrashen, damit es wieder vorm DrawText ist ;)

Code: Alles auswählen

InvalidateRect_(hWnd,0,1)
UpdateWindow_(hWnd)
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).
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
Benutzeravatar
Lukaso
Beiträge: 720
Registriert: 08.09.2004 18:51
Wohnort: Oberkirch
Kontaktdaten:

Beitrag 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
Nextgen Guild Wars Fanseite: Guild Wars Tactics (Pseudo-Admin + Developer)
"Das Fluchen ist die einzige Sprache, die jeder Programmierer beherrscht." - Unbekannter Autor
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Beitrag 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. ;)
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
Benutzeravatar
Lukaso
Beiträge: 720
Registriert: 08.09.2004 18:51
Wohnort: Oberkirch
Kontaktdaten:

Beitrag von Lukaso »

@Danilo
Ich bin jetzt mal erlich, Irgendwie habe ich das oben mit dem "ImageGadget" nicht richtig verstanden :roll: :roll:
Nextgen Guild Wars Fanseite: Guild Wars Tactics (Pseudo-Admin + Developer)
"Das Fluchen ist die einzige Sprache, die jeder Programmierer beherrscht." - Unbekannter Autor
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Beitrag von Danilo »

Lukaso hat geschrieben:@Danilo
Ich bin jetzt mal erlich, Irgendwie habe ich das oben mit dem "ImageGadget" nicht richtig verstanden :roll: :roll:
Zeig mal einen Mini-Code wo man das HintergrundBild sieht
und wie Du auf das Fenster zeichnest.
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
Benutzeravatar
Ynnus
Beiträge: 855
Registriert: 29.08.2004 01:37
Kontaktdaten:

Beitrag 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. ;)
Benutzeravatar
Lukaso
Beiträge: 720
Registriert: 08.09.2004 18:51
Wohnort: Oberkirch
Kontaktdaten:

Beitrag 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 :allright:
Nextgen Guild Wars Fanseite: Guild Wars Tactics (Pseudo-Admin + Developer)
"Das Fluchen ist die einzige Sprache, die jeder Programmierer beherrscht." - Unbekannter Autor
Antworten