AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Probleme beim zeichnen auf ein Panel
Thema durchsuchen
Ansicht
Themen-Optionen

Probleme beim zeichnen auf ein Panel

Offene Frage von "SarDGer"
Ein Thema von SarDGer · begonnen am 24. Aug 2005 · letzter Beitrag vom 24. Aug 2005
Antwort Antwort
SarDGer

Registriert seit: 19. Mai 2005
55 Beiträge
 
Delphi 7 Professional
 
#1

Probleme beim zeichnen auf ein Panel

  Alt 24. Aug 2005, 10:18
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:
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;
Als DestHandle übergebe ich das Panel-Handle.
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.

Klar ich könnte jetzt ein wenig rumtricksen und den Funktionsaufruf ins OnResize und im
OnConstrainedResize ein Refresh legen.
Aber das wäre eben nur getrickst. Also wenn jemand 'ne gute Idee hat wäre ich echt dankbar.

Grüsse,
Sar
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#2

Re: Probleme beim zeichnen auf ein Panel

  Alt 24. Aug 2005, 10:25
Ein Panel ist eben nicht zum Zeichnen da .
Spricht etwas gegen TPaintbox?

[add]
  1. Musst du den DC nicht mit MSDN-Library durchsuchenReleaseDC wieder freigeben?
  2. Bei mir funktioniert alles perfekt .
Delphi-Quellcode:
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;
[/add]
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
SarDGer

Registriert seit: 19. Mai 2005
55 Beiträge
 
Delphi 7 Professional
 
#3

Re: Probleme beim zeichnen auf ein Panel

  Alt 24. Aug 2005, 11:12
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???

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??

Ich hab hier Delphi7 und winXP aber daran sollte es nu wirklich nicht liegen.
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#4

Re: Probleme beim zeichnen auf ein Panel

  Alt 24. Aug 2005, 11:38
Zitat von SarDGer:
Klar ist ein Panel nicht zum Zeichnen da, aber manchmal
kann man es sich leider nicht aussuchen...
Und wann wäre das .

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.
Angehängte Dateien
Dateityp: zip panelpaint_203.zip (259,6 KB, 19x aufgerufen)
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
SarDGer

Registriert seit: 19. Mai 2005
55 Beiträge
 
Delphi 7 Professional
 
#5

Re: Probleme beim zeichnen auf ein Panel

  Alt 24. Aug 2005, 12:50
z.B. Wenn Du 'ne spezielle Komponente entwickeln willst.

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.

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.
  Mit Zitat antworten Zitat
tigerman33

Registriert seit: 30. Jul 2005
Ort: München
423 Beiträge
 
Delphi 2005 Professional
 
#6

Re: Probleme beim zeichnen auf ein Panel

  Alt 24. Aug 2005, 13:34
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?)
Christian
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Probleme beim zeichnen auf ein Panel

  Alt 24. Aug 2005, 13:37
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.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
SarDGer

Registriert seit: 19. Mai 2005
55 Beiträge
 
Delphi 7 Professional
 
#8

Re: Probleme beim zeichnen auf ein Panel

  Alt 24. Aug 2005, 14:15
Zitat:
Dann müsstest du ja nur noch auf die Canvas-Eigenschaft vom Panel zugreifen. (Der hat doch eine, oder?)
Hat das Panel leider nicht

@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.
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#9

Re: Probleme beim zeichnen auf ein Panel

  Alt 24. Aug 2005, 14:17
wenn du es möglichst einfach haben willst kannst du auch einfach ein TImage auf das Panel packen und darein dein bild laden.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
SarDGer

Registriert seit: 19. Mai 2005
55 Beiträge
 
Delphi 7 Professional
 
#10

Re: Probleme beim zeichnen auf ein Panel

  Alt 24. Aug 2005, 14:21
hehe, danke. Aber soooo einfach mache ich mir das auch wieder nicht.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:20 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