Seite 1 von 1

Inhalt des Grafik-Fensters wird ausradiert

Verfasst: 22.03.2006 15:06
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 ?

Verfasst: 22.03.2006 15:25
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:

Verfasst: 22.03.2006 22:05
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 :(

Verfasst: 22.03.2006 22:37
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

Verfasst: 23.03.2006 10:20
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?

Verfasst: 23.03.2006 11:05
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

Verfasst: 23.03.2006 14:24
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:

Verfasst: 23.03.2006 14:40
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.