Inhalt des Grafik-Fensters wird ausradiert

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
dibro
Beiträge: 143
Registriert: 11.03.2006 12:52
Computerausstattung: Win 10 64 bit
Wohnort: Solingen

Inhalt des Grafik-Fensters wird ausradiert

Beitrag von dibro »

Hi,
ich probier immer noch mit den Beispielen rum.
Da gibt es die Datei(en) 2DDrawing in den Examples, und zwar bei der PBDemo etwas anders, als bei 3.94.
Schiebt man ein anderes Fenster über das Ausgabewindow der Demo, und zieht dann das Fenster darunter weg, ist der Inhalt auf der Überlappung gelöscht. Auf meinem Dell wird der Inhalt sogar gelöscht, wenn ich das Fenster seitlich über den Bildschirmrand hinausschiebe. Ich habe das Problem nämlich auch bei meinem eigenen Versuch und weiß nicht wie ich es wegkriege. Was mich auch ein bisschen stutzig macht, ist dass die Ergebnisse auf unterschiedlichen Rechnern voneinander abweichen (beide XP SP2, aber natürlich unterschiedliche Grafikkarten). Probleme habe ich außerdem mit den Beispielen im Einsteigertutorium von bluespeed mit den 10 Lektionen, die Lektion 3 lässt meinen Dell total abstürzen, da hilft nicht mal der Affengriff, nur noch ausschalten.
Nach dem nächsten booten will XP dann Bill anrufen und über einen fatalen Fehler von PB berichten :D
Irgendwie scheinen die Grafikfunktionen noch nicht sauber zu funktionieren.
Benutzt man da besser die Windows API ?
Gruß aus Solingen, PB 6.0 Win 10 Pro
Benutzeravatar
Green Snake
Beiträge: 1394
Registriert: 22.02.2005 19:08

Beitrag von Green Snake »

nene, die grafik funktionen funzen schon :allright:

direkt aufs fenster zeichnen ist *meiner meinung nach* keine besonders gute, und auch keine saubere mathode.

am besten in ein imagegadget zeichnen, oder die #WM_Paint nachricht abfangen, und dann nochmals zeichnen :allright:
-.-"
Benutzeravatar
dibro
Beiträge: 143
Registriert: 11.03.2006 12:52
Computerausstattung: Win 10 64 bit
Wohnort: Solingen

Beitrag von dibro »

Ich hab die Beispiele ja nicht geschrieben, sondern will die ja nur nachvollziehen und das kann ich ja wohl nicht, wenn der dell abstürzt :cry:
Und auch wenn ich die Fenster verschiebe hab ich die Erscheinungen bei den genannten Beispielen. Außerdem hab ich PB ja erst ein paar Tage.
Hier mal ein Beispiel mit dem ich versuche zu rechnen. Die Optiongadgets werden erst dargestellt, wenn ich das Fenster verschiebe. Und wenn ich es teilweise über dem Rand hinausschiebe, erscheint in rechten oberen Gadget ein graue Balken.
Was ist denn da faul?

If OpenWindow(0, 280, 130, 260, 210, #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar , "Window(0)")
If CreateGadgetList(WindowID())
ButtonGadget(0, 20, 170, 90, 30, "Berechnen")
ButtonGadget(1, 150, 170, 90, 30, "Ende")
Frame3DGadget(50, 10, 10, 240, 150, "Rechner")
StringGadget(10, 20, 35, 90, 30, "5",#PB_String_Numeric)
StringGadget(11, 150, 35, 90, 30, "6",#PB_String_Numeric)
StringGadget(12, 85, 120, 90, 30,"", #PB_String_Numeric | #PB_String_ReadOnly)
TextGadget(30, 150, 40, 20, 20,"")
OptionGadget(20, 40, 80, 30, 30, " + ")
OptionGadget(21, 90, 80, 30, 30, " - ")
OptionGadget(22, 140, 80, 30, 30, " x ")
OptionGadget(23, 190, 80, 30, 30, " / ")

EndIf
CloseGadgetList()
SetGadgetState(20,1)

Repeat
EventID = WindowEvent()
If EventID
If #PB_EventGadget
If EventGadgetID()=0
If GetGadgetState(20)
ergebnis = Val(GetGadgetText(10)) + Val(GetGadgetText(11)):EndIf
If GetGadgetState(21)
ergebnis = Val(GetGadgetText(10)) - Val(GetGadgetText(11)):EndIf
If GetGadgetState(22)
ergebnis = Val(GetGadgetText(10)) * Val(GetGadgetText(11)):EndIf
If GetGadgetState(23) And Val(GetGadgetText(11))>0
ergebnis = Val(GetGadgetText(10)) / Val(GetGadgetText(11)):EndIf
EndIf
If EventGadgetID()=1
End
EndIf
EndIf
EndIf
SetGadgetText(12,Str(ergebnis))
Until EventID = #PB_Event_CloseWindow
EndIf

Noch ne dumme Frage: Wie poste ich den Kode, so dass er ordentlich aussieht ? Einfach einkopieren is nix gut :(
Gruß aus Solingen, PB 6.0 Win 10 Pro
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

> Was ist denn da faul?

1. Was macht das TextGadget(30...)? Das sorgt nämlich für den grauen Balken.

2. Nimm anstelle des WindowEvent() ein WaitWindowEvent()

3. Das SetGadgetText(12,Str(ergebnis)) ist an dieser Stelle suboptimal platziert. Setze es lieber hinter jedes ergebnis = (...)

> Noch ne dumme Frage: Wie poste ich den Kode, so dass er ordentlich
> aussieht ?

Dafür gibt's Code-Tags. Achte mal beim nächsten Post auf die Buttons
oberhalb des Eingabefensters. Dort befindet sich ein Button mit der
Aufschrift "Code". Den 2 Mal drücken und Deinen Code zwischen die
beiden Tag packen, fertig! ;-)

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
dibro
Beiträge: 143
Registriert: 11.03.2006 12:52
Computerausstattung: Win 10 64 bit
Wohnort: Solingen

Beitrag von dibro »

Mensch bin ich blöd . Das TextGadget(30, ) hatte ich doch glatt vergessen.
Das war der eigentliche Fehler. Und das SetGadgetText hinter die If-Abfrage ist natürlich besser, jetzt flackert das Ergebnis nicht mehr.
Vielleicht lerne ich das doch noch <)
Danke für die Unterstützung :allright:
Wenn ich nochmal fragen darf: Wie mache ich das ganze jetzt mit .f-Variablen?
Gruß aus Solingen, PB 6.0 Win 10 Pro
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

> Wie mache ich das ganze jetzt mit .f-Variablen?

bei

Code: Alles auswählen

ergebnis = ...
nimmst Du anstelle von Val() einfach ValF().
Die Variable 'ergebnis' deklarierst
Du ebenfalls als Float: ergebnis.f = ...

Das ganze sieht dann so aus:

Code: Alles auswählen

ergebnis.f = ValF(GetGadgetText(10)) + ValF(GetGadgetText(11)):EndIf 
Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
dibro
Beiträge: 143
Registriert: 11.03.2006 12:52
Computerausstattung: Win 10 64 bit
Wohnort: Solingen

Beitrag von dibro »

Ja danke. Das mit dem ValF ist nicht das Problem. Wie gebe ich die Floatzahl ins Gadget ein, entweder es lässt nur Zahlen zu und dann keinen DezPunkt, oder gar ein Komma, oder alle Zeichen und dann muss ich wohl abfangen und konvertieren. Außerdem hätte ich die Zahlen bei der Eingabe gern rechts ausgerichtet. Gibt es da ein Flag? In der Hilfe habe ich nichts gefunden.

Jetzt auch mal die ultimative Lobhudelei :D
Ich find, das ist ein tolles Forum, hier kriegt man auch Antwort und nicht nur so'n Gelabere wie "...Man eh, die Frage ist vor 50 jahren schon mal gestellt und 2500 mal beantwortet worden..." oder so, (von intoleranten Besserwissis).
Als Newbie steht man vor so vielen Problemen und findet nicht immer alles, was irgendwo geschrieben steht. Deshalb bin ich für jede Antwort dankbar :allright:
Gruß aus Solingen, PB 6.0 Win 10 Pro
Benutzeravatar
HeX0R
Beiträge: 3042
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3
Kontaktdaten:

Beitrag von HeX0R »

dibro hat geschrieben:...Wie gebe ich die Floatzahl ins Gadget ein...

Code: Alles auswählen

SetGadgetText(12, StrF(ergebnis))
musst halt das #PB_String_Numeric-Flag entfernen, sonst kannst keine Floats anzeigen.
Antworten