Graphics::TBitmap* in einem TPanel 'scrollen'???
-
Morgähn Gemeinde,
Frage siehe Titel. Nur wie krieg ichs hin?
Also ein Bitmap in einem Bereich des Fensters nach links oder rechts 'laufen' zu lassen?
Panel hab ich, Bitmap hab ich. Nur wie bekomm ichs zusammen? Und wie bewege ich das Bitmap dann?grüssle
-
Hallo Smitty
ich benutze ein TImage und zwei TScrollbar (Horizontal und Vertikal)
Das TImage zeichne ich immer selbst und die beiden TScrollbars geben
mir z.B. Werte von 0...100 mittels Funktion OnScroll.Dann muss beim Zeichnen nur die Regler negativ angegeben werden:
Integer sH,sV,bmpBreite,bmpHoehe; TRect ARect; sH =ScrolH->Positin; // und akt. Reglerposition Horz sV =ScrolV->Position; // und akt. Reglerposition Vert //Graphics::TBitmap *bmp = new Graphics::TBitmap(); // BMP Image anlegen ... // bmp laden, erzeugen usw. bmpBreite=bmp->Width; bmpHoehe =bmp->Height; ARect=Rect(-sH, -sV, bmpBreite, bmpHoehe); // Abmessungen angeben bmp->Canvas->StretchDraw(ARect, bmp); Image->Picture->Bitmap=bmp; // und auf Image kopieren
Vorteil hierbei: Du kannst auch weitere Funktionen wie Zoomen usw.
mit reinpacken und die TScrollbars dafür auch benutzen.Gruss Stefan
-
jep, das mit dem TImage habe ich schon. Ist kein Problem das Image auf einem Panel zu verschieben. Nur beim erstellen desTImage habe ich Probleme.
Konstellation: TPanel, darauf ein TImage.
Das Bitmap wird erstellt. Ist in der Regel nur ein Text.Aber dann kommts: Zuweisen dieses bmp's zum TImage???
Versuche:
tempBMP = new Graphics::TBitmap; ... // hier wird das BMP erstellt int breit = tempBMP->Canvas->TextWidth(ms->Name); int hoch = tempBMP->Canvas->TextHeight(ms->Name); tempBMP->SetSize( breit, hoch ); tempBMP->Canvas->TextOutA( 0, 0, "Text" ); // soweit alles klar. Genau wie es sein soll // und jetzt diese BMP ins TImage. Und hier fangen die Probleme an ScrollImage->Picture->Bitmap->Width = tempBMP->Width; // nein ScrollImage->Picture->Bitmap->Height = tempBMP->Height; // nein ScrollImage->Picture->Bitmap = tempBMP; // nein
Habs auch schon mit ...->Assign(((Graphics::TBitmap*)tempBMP )); versucht, nix endet erfolgreich
Also: wie bekomme ich ein dyn. erstelltes BMP in ein im Designer erstelltes TImage, wobei das TImage danach die Grösse des BMP's haben sollte.
grüssle
-
Hei Smitty
verstehe das Problem nicht ganz; in meinem Beispiel
habe ich genau das beschrieben:Image ist ein im Desginer angelegtes TImage Element.
Das bmp ist ein Bitmap Object zur Laufzeit angelegt;
mit StretchDraw kannst Du es dann einer beliebigen Größe
zuordnen und dann mittels Image->Picture->Bitmap=bmp zuweisen.Die Größe des TImage verändern macht keinen Sinn; denn Dein
Fenster ist ja auch Größenänderungsfähig bzw. die Auflösung
(und damit mögliche Größe) eines Fensters auch. Durch das
Scrollen der Regler kannst Du dann die jeweilige Pos mit
OnScroll mitbekommen und umsetzten durch neuzeichnen.Gruss Stefan
-
Hallo
TScrollBox anstelle oder innerhalb des Panels benutzen.
bis bald
akari
-
@ Stefan7124
funktioniert nicht
Scrollen nicht mit ScrollBars, sondern mit Timer.
-> Bereich auf Formular, z. B. 300 x 20. Bitmap = 800 x 20. Timer Intervall = 20.
Jetzt soll das Bitmap wiederkehrend von rechts nach links durch den Bereich laufen. Sichtbar nur innerhalb des Bereichs, also nie das ganze Bitmap. Wenn Bitmap->Breite == Bereich->Links, dann das ganze von vorn.Werd jetzt noch etwas weitertesten, vllt. wirds ja noch was.
es grüssle
-
Hallo
Versuchs mal so:AnsiString MyText="Text"; Graphics::TBitmap *tempBMP = new Graphics::TBitmap(); tempBMP->Width=tempBMP->Canvas->TextWidth(MyText); tempBMP->Height=tempBMP->Canvas->TextHeight(MyText); tempBMP->Canvas->TextOutA( 0, 0, MyText ); ScrollImage->Picture->Bitmap->Width = tempBMP->Width; ScrollImage->Picture->Bitmap->Height = tempBMP->Height; ScrollImage->Picture->Bitmap = tempBMP; delete tempBMP;
wNw