Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi dynamische Bitmaps (TImage) auf festen "Untergrund" (https://www.delphipraxis.net/52414-dynamische-bitmaps-timage-auf-festen-untergrund.html)

delphin 29. Aug 2005 20:59


dynamische Bitmaps (TImage) auf festen "Untergrund"
 
Hallo,

ich lade zur Programmlaufzeit mehrere kleine Bitmaps in TImages, die ich momentan als Parent des Hauptformulars "Form1" abgeleitet und demnach auch dort abgelegt habe.

Delphi-Quellcode:
ImageArray[i]:=TImage.Create(Self);
ImageArray[i].Parent := Form1;
ImageArray[i].Autosize:=true;
ImageArray[i].Picture.LoadFromFile('Bild'+IntToStr(i)+'.bmp');
ImageArray[i].Transparent:=true;
ImageArray[i].tag:=i;
Das Erkennen und Verschieben der Bildchen zur Laufzeit klappt problemlos über:

Delphi-Quellcode:
iImageArray[i].OnMouseDown:= MyMouseDown;
iImageArray[i].OnMouseMove:= MyMouseMove;
iImageArray[i].OnMouseUp:= MyMouseUp;
Verschiebe ich aber eines der Bilder außerhalb der Form, scrollt mir Windows automatisch den oberen bzw. linken Fensterrand - und damit auch meine Werkzeugleiste (Panel) - außerhalb des sichtbaren Bereiches. Wie kann ich das verhindern ?

Ich suche also ein "Zeichenfeld", dass mir meine Bitmaps nur in einem festen Bereich darstellt und auch scrollt, ohne die ganz Form zu "zerstören".
Wenn ich meine Bitmaps auf ein ExtraPanel zeichne:
Delphi-Quellcode:
ImageArray[i].Parent := ExtraPanel;
funktioniert die Sache zwar wie gewünscht, aber der Bildaufbau dauert viel zu lang und flackert ungemein beim Verschieben eines Imagefeldes.

Wer kann da helfen? Schonmal Danke im Voraus!
Gruß Gerd

100nF 29. Aug 2005 21:18

Re: dynamische Bitmaps (TImage) auf festen "Untergrund&
 
Zitat:

aber der Bildaufbau dauert viel zu lang und flackert ungemein beim Verschieben eines Imagefeldes.
schon mal DoubleBuffered auf true gesetzt? könnte evtl. helfen

gruss
urbanbruhin

Khabarakh 29. Aug 2005 21:48

Re: dynamische Bitmaps (TImage) auf festen "Untergrund&
 
Du benutzt die Komponente TImage zum Anzeigen - diese ist aber einfach nicht zum Verschieben gedacht und entwickelt. Die Lösung ist, die Unterobjekte auf eine gemeinsame, in der Größe feste Canvas zu bringen, z.B. die der Form. Die Unterobjekte (bzw. ihr Bitmap) speicherst du in der Klasse TBitmap (der Name legt es schon nahe). Im OnPaint der Form kopierst du nun jedes Bitmap per TCanvas.Draw auf deren Canvas. Zusammen mit DoubleBuffered sollte es kein Flimmern mehr geben, Bitmapteile über außerhalb der Form-Canvas werden einfach abgeschnitten.

=> Hier im Forum suchenOffScreenBitmap

delphin 29. Aug 2005 22:14

Re: dynamische Bitmaps (TImage) auf festen "Untergrund&
 
Also erstmal Danke für Eure Tipps.

Zum Tipp von urbanbruhin:
habe im OnCreate-Ereignis des Forumlars

Delphi-Quellcode:
Panel1.DoubleBuffered:=true;       // verhindert flackeren beim Grafikverschieben
gesetzt und es flackert deutlich weniger.

Zu der Antwort von Khabarakh:
Ich denke nach dem vielen Tests des heutigen Tages, dass das Panel doch der richtige Untergrund zum Darstellen, Erkennen und Verschieben einzelner Image-Objecte ist.

Ich möchte - und zwar nur in einem festen Teil meines Formulars - ein Gesamtbild darstellen, was aus mehreren Einzelbildern (Images) besteht, die ich einzeln erkennen und verschieben will.

Wenn ich die einzelnen Teile (Images) z.B. in eine Paintbox ??? über BitBlt() kopiere, dann geht das wohl schneller, aber wie erkenne ich dann im fertigen Gesamtbild das Einzelobjekt wieder ?

Denn wenn ich die Sache richtig verstanden habe, kann eine Paintbox auch kein Parent von TImage werden und demzufolge würde auf ihr auch nicht die "Objekterkennung" der einzelnen Bilderpuzzel (Images) funktionieren, oder etwa doch ? :gruebel:


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:40 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz