Probleme beim zeichnen auf ein Panel
Hallo Leute,
Ich hab ein kleines Problem: Ich möchte ein Modales Fenster aufrufen, worauf ein TPanel liegt. Auf diesem TPanel möchte ich ein TBitmap zeichnen lassen. Also habe ich eine Procedure (ZeichneBMP) geschrieben die im wesentlichen so aussieht :
Delphi-Quellcode:
Als DestHandle übergebe ich das Panel-Handle.
Procedure ZeichneBMP(DestHandle : HWND; drawRect : TRect; Bitmap : graphics.TBitMap);
Begin BitBlt(getDC(DestHandle), 0,0, Bitmap.Width, Bitmap.Height, Bitmap.Canvas.Handle, 0, 0, SRCCOPY); end; Die Funktion rufe ich im OnPaint auf. So weit so gut, funktioniert ja auch, wenn ich die Form nachträglich in der grösse verändere. Also dafür sorge das das OnPaint nochmal ausgeführt wird. Es sieht so aus als ob mein bmp zuerst gezeichnet wird und dann erst das Panel als solches, mein bmp wird also überzeichnet. :shock: Klar ich könnte jetzt ein wenig rumtricksen und den Funktionsaufruf ins OnResize und im OnConstrainedResize ein Refresh legen. :gruebel: Aber das wäre eben nur getrickst. Also wenn jemand 'ne gute Idee hat wäre ich echt dankbar. Grüsse, Sar |
Re: Probleme beim zeichnen auf ein Panel
Ein Panel ist eben nicht zum Zeichnen da :wink: .
Spricht etwas gegen TPaintbox? [add]
Delphi-Quellcode:
[/add]
procedure TForm1.FormPaint(Sender: TObject);
var DC: HDC; begin DC := GetDC(Panel1.Handle); BitBlt(DC, 0,0, Image1.Picture.Bitmap.Width, Image1.Picture.Bitmap.Height, Image1.Picture.Bitmap.Canvas.Handle, 0, 0, SRCCOPY); ReleaseDC(Panel1.Handle, DC); end; |
Re: Probleme beim zeichnen auf ein Panel
Klar ist ein Panel nicht zum Zeichnen da, aber manchmal
kann man es sich leider nicht aussuchen... Klar gebe ich den DC wieder frei, ist kein muss sondern NUR eine Speichersauerei, hab's in dem Beispiel nur mal weggelassen. Aber wichtiger: Warum funktioniert es bei Dir??? :wall: Ich hab eine Form mit einem Panel und einem TImage (vis = False) im FormPaint tue ich GENAU das selbe wie Du. Sollte dann auch nicht das selbe passieren?? :gruebel: Ich hab hier Delphi7 und winXP aber daran sollte es nu wirklich nicht liegen. :coder2: |
Re: Probleme beim zeichnen auf ein Panel
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Was bei deinem ersten Post nicht deutlich erkennbar ist: änderst du die Größe des Panels auch? Denn damit funktioniert es bei mir auch nicht. Ich hänge mal meine Beispiel-Echse an. links oben ist das Image, rechts daneben ein Panel mit fester Größe, drunter eines mit Align = alBottom. |
Re: Probleme beim zeichnen auf ein Panel
z.B. Wenn Du 'ne spezielle Komponente entwickeln willst. :wink:
Bei deiner exe Funktioniert es - hast ja auch nur im OnActivate 2x repaint drin (FormPaint gilt hir als repaint) und das OnShow mit OnActvate verlinkt - fazit alles wird dreimal gezeichnet. Wenn ich die repaints rausschmeisse hab ich wieder das selbe Problem. :coder: wenn du alles wieder rausschmeisst - bis auf FormPaint versteht sich - und nur im OnResize 2x repaint; reinhaust, dann funktioniert es. Ist aber ebenso nur getrickst - da sind wir wieder am Anfang. :wall: |
Re: Probleme beim zeichnen auf ein Panel
Bin mir jetzt nicht sicher, aber hat TCanvas nicht eine Methode um eine Grafik an einer bestimmten Stelle auszugeben? Dann müsstest du ja nur noch auf die Canvas-Eigenschaft vom Panel zugreifen. (Der hat doch eine, oder?)
|
Re: Probleme beim zeichnen auf ein Panel
und wie wärs wenn du von TPanel ableitest und Paint überschreibst?
Du hast auch nicht zufällig das OnPaint des Forms genommen? Das wäre nämlich mehr als falsch denn das Panel hat ein eigenes Handle und somit bekommt das Form nicht in jedem Fall ein Paint wenn auch das Panel ein Paint bekommt. |
Re: Probleme beim zeichnen auf ein Panel
Zitat:
@SirThornberry eigentlich will ich in garkein OnPaint - ich möchte im Prinzip ein Modales Fenster aufmachen - da einmal eine Funktion aufrufen die mir was auf ein Panel malt - und gut ist. Aber irgentwie bin ich da zu dämlich für. :cry: |
Re: Probleme beim zeichnen auf ein Panel
wenn du es möglichst einfach haben willst kannst du auch einfach ein TImage auf das Panel packen und darein dein bild laden.
|
Re: Probleme beim zeichnen auf ein Panel
hehe, danke. Aber soooo einfach mache ich mir das auch wieder nicht.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:37 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