Problem mit setgadgetshape()

Übersicht BlitzBasic BlitzPlus

Neue Antwort erstellen

 

Manowar

Betreff: Problem mit setgadgetshape()

BeitragMi, Mai 07, 2008 14:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo zusammen,

ich habe in diesem Forum schon sehr viele gute Tipps gelesen, dafür mal vorab ein grosses Lob und Danke.

Bisher konnte ich auch alle meine Probleme mit Hilfe der Suchfunktion lösen, aber bei dem Phänomen hier steh ich seit Tagen auf dem Schlauch.

Testcode:

Code: [AUSKLAPPEN]


window = CreateWindow("",0,0,1024,768,0,5)
canvas = CreateCanvas(0,0,1280,1280,window)

SetBuffer CanvasBuffer(canvas)

Oval 50,50,500,500,1

SetGadgetShape canvas,0,0,1024,1024

While WaitEvent(1)<>$803 And KeyHit(1)=0
Wend
End



Folgendes Problem:

Ich habe auf meinem TFT-Display die Auflösung 1280x1024, wenn ich das Fenster mit obigem Code in 1024x768 zeichnen lasse, ist alles soweit in Ordnung. Der Kreis ist rund, wie er auch sein sollte.

Ändere ich jetzt meine Display-Auflösung auf 1024x768 und führe obigen Code aus, so wird der Kreis zum Ei. Shocked

Die Geometrie vom Canvas bzw. die Skalierung scheint nicht mehr zu stimmen, sobald die Fenstergrösse und die Desktop-Grösse identisch sind.

Wo liegt mein Denkfehler bzw.Verständnisfehler, oder kann ich die Skalierung anders lösen, damit die Geometrie GARANTIERT erhalten bleibt?

Danke schon mal,

Manowar

D2006

Administrator

BeitragMi, Mai 07, 2008 15:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Erstelle ein Panel vor dem Canvas, was genauso groß ist. Beim Canvas gibst du nun als Parent das Canvas statt dem Fenster an. Und SetGadgetShape machst du nun mit dem Panel, statt mit dem Canvas.

Nachteil: Das Canvas muss nun immer die maximal mögliche Größe haben. Sprich bei einer kleineren Auflösung wird der gewünschte Effekt funktionieren. Bei ner größeren sieht man dann den Rand des Canvas.

Oder willst du schon, dass der Kreis verleinert wird und bloß das Seitenverhältnis erhalten bleibt? 1280x1024 ist ja 5:4 und 1024x768 ist 4:3, deshalb die anderen Seitenverhältnisse.

Das könntest du lösen, in dem du vorher einfach die Desktopgröße abfragst und entsprechend das Canvas bei der Erstellung richtig dimensionierst. ClientWidth Desktop (analog bei Height) sollten dir da helfen.
Intel Core i5 2500 | 16 GB DDR3 RAM dualchannel | ATI Radeon HD6870 (1024 MB RAM) | Windows 7 Home Premium
Intel Core 2 Duo 2.4 GHz | 2 GB DDR3 RAM dualchannel | Nvidia GeForce 9400M (256 MB shared RAM) | Mac OS X Snow Leopard
Intel Pentium Dual-Core 2.4 GHz | 3 GB DDR2 RAM dualchannel | ATI Radeon HD3850 (1024 MB RAM) | Windows 7 Home Premium
Chaos Interactive :: GoBang :: BB-Poker :: ChaosBreaker :: Hexagon :: ChaosRacer 2
 

Manowar

BeitragMi, Mai 07, 2008 16:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke erstmal für die superschnelle Antwort Very Happy


D2006 hat Folgendes geschrieben:
Erstelle ein Panel vor dem Canvas, was genauso groß ist. Beim Canvas gibst du nun als Parent das Canvas statt dem Fenster an. Und SetGadgetShape machst du nun mit dem Panel, statt mit dem Canvas.


Also so denk ich mal:

Code: [AUSKLAPPEN]


window = CreateWindow("",0,0,1024,768,0,5)
panel=CreatePanel(0,0,1280,1280,window)          ;<-----Panel eingefügt
canvas = CreateCanvas(0,0,1280,1280,panel)

SetBuffer CanvasBuffer(canvas)

Oval 50,50,500,500,1

SetGadgetShape panel,0,0,1024,1024

While WaitEvent(1)<>$803 And KeyHit(1)=0
Wend
End



Wenn das Panel verkleinert wird, sollte sich das darauf liegende Canvas auch mit verkleinern?
Mir schiebts den Kreis nämlich jetzt links oben raus Confused

Zitat:


Nachteil: Das Canvas muss nun immer die maximal mögliche Größe haben. Sprich bei einer kleineren Auflösung wird der gewünschte Effekt funktionieren. Bei ner größeren sieht man dann den Rand des Canvas.



Japp, so ists auch gedacht:

1. Canvas zeichnen mit 1280x1280.
2. Kreis reinzeichnen mit 500 Durchmesser
3. Canvas stauchen auf 1024x1024, damit es ins Fenster passt, intern hat es immer noch 1280x1280
(x= 0 bis 1279, y=0 bis 1279)

Zitat:

Oder willst du schon, dass der Kreis verleinert wird und bloß das Seitenverhältnis erhalten bleibt? 1280x1024 ist ja 5:4 und 1024x768 ist 4:3, deshalb die anderen Seitenverhältnisse.


Hier liegt auch irgendwo der Wurm oder mein Denkfehler:
Ich erstelle das Fenster bei einer Desktopauflösung meines Displays von 1280x1024. OK.
Das Fenster hat die Grösse 1024x768, füllt also nicht den ganzen Bildschirm aus und die Geometrie des Kreises passt. Auch noch ok.
Nun ändere ich nur die Desktopauflösung auf 1024x768, Fenster ist jetzt also bildschirmfüllend dargestellt.
Und nun ist der Kreis ein Ei und ich versteh nicht weshalb, da sich ja am Seitenverhältnis des Fensters nix geändert hat... Sad

Zitat:

Das könntest du lösen, in dem du vorher einfach die Desktopgröße abfragst und entsprechend das Canvas bei der Erstellung richtig dimensionierst. ClientWidth Desktop (analog bei Height) sollten dir da helfen.


Habe mich da beim Programm mit dem Grafikaufbau wahrscheinlich selber irgendwie überrumpelt, leider MUSS ich die Grafik in grossem Canvas zeichnen und dann erst stauchen. Geht echt nicht anders, da sonst meine ganzen Mauspositionsabfragen nicht mehr passen.... resizeimage() kann ich nicht anwenden...

Vielleicht hast du ja noch ne Idee.

Nochmals thx,

Manowar, der heute tierisch auf der Leitung steht....

D2006

Administrator

BeitragMi, Mai 07, 2008 16:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Ahh, jetzt hat's klick gemacht. Wink

Das liegt an deinem TFT. Der kann halt nur 1280x1024 nativ darstellen. Wenn du nun 1024x768 einstellst, sieh es nicht nur scheiße aus, dass Bild wird trotzdem über die ganzen 1280x1024 Bildpunkte des Monitors gestreckt. Ergebnis: Das Seitenverhältnis des Bildes haut nicht mehr. Das erkennst du auch daran, dass so ziemlich alles schmaler ist als sonst. Also auch die ganze Schrift.

Dagegen kannst du nix machen. Sollte jemand ein altes, kleines TFT haben mit 1024x768 als native Auflösung, dass sieht er das ganz normal. Also ist dort der Kreis rund.
Intel Core i5 2500 | 16 GB DDR3 RAM dualchannel | ATI Radeon HD6870 (1024 MB RAM) | Windows 7 Home Premium
Intel Core 2 Duo 2.4 GHz | 2 GB DDR3 RAM dualchannel | Nvidia GeForce 9400M (256 MB shared RAM) | Mac OS X Snow Leopard
Intel Pentium Dual-Core 2.4 GHz | 3 GB DDR2 RAM dualchannel | ATI Radeon HD3850 (1024 MB RAM) | Windows 7 Home Premium
Chaos Interactive :: GoBang :: BB-Poker :: ChaosBreaker :: Hexagon :: ChaosRacer 2
 

Manowar

BeitragMi, Mai 07, 2008 16:49
Antworten mit Zitat
Benutzer-Profile anzeigen
*BLING*

Ok, jetzt ist mir ein Licht Idea aufgegangen. Daher: Embarassed und *kopfklatsch*

Herrjemine, manchmal denke ich doch, dass zuviel Kaffee und Kippen mich irgendwann fertig machen Shocked

Muss ich doch glatt die olle Röhrenmurmel anschliessen und da testen....

Manowar,

dank D2006 jetzt nicht mehr auf der Leitung stehend Wink

Neue Antwort erstellen


Übersicht BlitzBasic BlitzPlus

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group