Seltsames Verhalten von ClipRect
-
Hallo,
Ich habe eine Form mit TImage mit alClient gebaut. Die Form wird zur Entwurfzeit gespeichert. Lass ich das Prog laufen, geht alles. Wenn ich aber die Form mit der Maus vergrößere, bleibt das ClipRect vom Canvas auf der designen Größe und nur ein Teil der Zeichnung ist zu sehen. ( Canvas->Height wurde richtig aktualisiert!!) Mit der Maus verkleinern geht, und auch wieder vergrößern bis maximal zur designden Größe.
Ich hab mich erstmal dadurch gerettet, dass ich die Form überdimensional groß zur Entwurfszeit gestaltet habe. Beim Konstruktor verkleinere ich es dann aufs Wunschmaß.
Als weiterer Hinweis kann dienen: die zugeodnete (alRight) gesamte Scrollbar blinkt. Beim vergrößern der Form mit der Maus bleibt der blinkende Bereich auf der bisherigen Größe stehen - genauso wie der ClipRect von Canvas.Liegts vieleicht am BCB2009?
Schon mal Danke.
-
-
VergissEs schrieb:
http://www.c-plusplus.net/forum/viewtopic-var-t-is-235678.html
Lieb von Dir, aber das ist nicht mein Fall.
Mein Bild wird sehrwohl gestretched, aber es wir nur innerhalb des ClipRect gezeichnet. Das Bild selbst wird so gezeichnet, als würde es den ganzen Canvas füllen.
Es ist die Frage, warum bei Resizen der Form zwar der Canvas angepasst wird (alClient), aber sein ClipRect nicht über die Entwurfsgrenze hinaus vergrößert wird.Gruß Rudi
-
Kann ich auf Anhieb nicht reproduzieren.
Kannst du entweder ein Beispielprojekt oder reproduzierbare Schritte angeben?
-
VergissEs schrieb:
Der Canvas zeichnet auf einem Bitmap das die Größe erhällt vom TImages. Wenn sich nachträglich die Größe verändet nachdem du schon darauf gezeichnet hast musst du die Bitmapgröße händisch anpassen.
Img_Stat->Picture->Bitmap->Width Img_Stat->Picture->Bitmap->Height
Das ist aber dein Problem, das sich das Bitmap auf das TImage zeichnet sich nicht automatisch mit dem TImage vergrößert.
Und ja gestretched wird natürlich nach der Größe des TImage nur da ist noch das kleinere Bitmap als Zeichenfläche vorhanden somit sieht es "Abgeschnitten" aus.
-
audacia schrieb:
Kann ich auf Anhieb nicht reproduzieren.
Kannst du entweder ein Beispielprojekt oder reproduzierbare Schritte angeben?//--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include "Unit4.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm4 *Form4; //--------------------------------------------------------------------------- __fastcall TForm4::TForm4(TComponent* Owner) : TForm(Owner) { Image1->Align = alClient; } //--------------------------------------------------------------------------- void __fastcall TForm4::btnZeichneClick(TObject *Sender) { Image1->Canvas->Brush->Color = clRed; Image1->Canvas->FillRect(Image1->Canvas->ClipRect); } //--------------------------------------------------------------------------- void __fastcall TForm4::FormResize(TObject *Sender) { //Image1->Picture->Bitmap->Width = Image1->Width; //Image1->Picture->Bitmap->Height = Image1->Height; } //---------------------------------------------------------------------------
Bitte einmal so starten wie gepostet und am Fenster ziehen.
Dann im FormResize die // entfernen und den unterschied feststellen
-
Hallo,
ich hab die beiden Zeilen aus deinem FormResize Vorschlag eingebaut. Jetzt gehts.
Bleibt aber immernoch die Frage: Warum werden die Bitmap-Dimensionen angepasst, wenn ich innerhalb der Entwurfszeitgrenzen die Form verkleinere und wieder vergößere, aber nicht darüber hinaus.
Dann hab ich immernoch das Problem mit der Scrollbar (alRight). Wenn ich das Formular öffne, blinkt sie. Wenn ich das Formular vergrößere, dann bleibt der blinkende Bereich bei der Entwurfszeitgröße. Da kann ich zoomen und zurück, scrollen rauf und runder, der blinkende Bereich bleibt in der Länge gleich, scrollt aber mit.
Danke schon mal für diesen Tipp.
Rudi
-
rudiM schrieb:
Hallo,
Bleibt aber immernoch die Frage: Warum werden die Bitmap-Dimensionen angepasst, wenn ich innerhalb der Entwurfszeitgrenzen die Form verkleinere und wieder vergößere, aber nicht darüber hinaus.TImage erstellt beim ersten Zugriff auf Canvas das Bitmap und verwendet die Größe des TImage als Bitmapgröße. Wenn das TImage verkleinert wird, bleibt nach wie vor die Größe des Bitmap bestehen nur dein "Sichtbereich" wird kleiner.
Es gibt auch noch die Möglichkeit bevor man auf das Canvas zeichnet das Bild zu löschen per Image1->Picture = NULL;
Bei nächsten Zugriffe auf den Canvas, wenn man das "malen" los legt wird das Bitmap mit der TImagegröße erstellt.Zu deiner blinkenden Scrollbar kann ich leider nicht nachvollziehen
-
Hallo VergissEs,
die Erklärung ist logisch, es ist aber nicht das was ich von einer VCL erwarten würde. Erwarten würde ich, wenn die Image resized wird, dass das zugehörige Bitmap auch angepasst wird. Naja, wenns auch so funktioniert, und warum soll man es den Entwicklern zu leicht machen, gut dass es dich und das Forum gibt