![]() |
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:
Das Erkennen und Verschieben der Bildchen zur Laufzeit klappt problemlos über:
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;
Delphi-Quellcode:
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 ?
iImageArray[i].OnMouseDown:= MyMouseDown;
iImageArray[i].OnMouseMove:= MyMouseMove; iImageArray[i].OnMouseUp:= MyMouseUp; 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:
funktioniert die Sache zwar wie gewünscht, aber der Bildaufbau dauert viel zu lang und flackert ungemein beim Verschieben eines Imagefeldes.
ImageArray[i].Parent := ExtraPanel;
Wer kann da helfen? Schonmal Danke im Voraus! Gruß Gerd |
Re: dynamische Bitmaps (TImage) auf festen "Untergrund&
Zitat:
gruss urbanbruhin |
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.
=> ![]() |
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:
gesetzt und es flackert deutlich weniger.
Panel1.DoubleBuffered:=true; // verhindert flackeren beim Grafikverschieben
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 23:23 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz