Problem mit setgadgetshape()
Übersicht

ManowarBetreff: Problem mit setgadgetshape() |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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. ![]() 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 |
||
![]() |
D2006Administrator |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 ![]() ![]() |
||
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Danke erstmal für die superschnelle Antwort ![]() 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 ![]() 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... ![]() 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 ![]() ![]() 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.... |
||
![]() |
D2006Administrator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ahh, jetzt hat's klick gemacht. ![]() 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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
*BLING*
Ok, jetzt ist mir ein Licht ![]() ![]() Herrjemine, manchmal denke ich doch, dass zuviel Kaffee und Kippen mich irgendwann fertig machen ![]() Muss ich doch glatt die olle Röhrenmurmel anschliessen und da testen.... Manowar, dank D2006 jetzt nicht mehr auf der Leitung stehend ![]() |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group