AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

BitBlt-Komponente

Ein Thema von Bomberbb · begonnen am 3. Aug 2007 · letzter Beitrag vom 3. Aug 2007
Antwort Antwort
Bomberbb

Registriert seit: 23. Sep 2003
227 Beiträge
 
#1

BitBlt-Komponente

  Alt 3. Aug 2007, 09:34
Hallo, ich mochte eine neue Komponente erstellen, sie BitBlt von haus aus unterstützt.

Ich habe die Komponente nun von TCustomPanel abgeleitet und habe mir nun gedacht, ich könnte einen neuen Canvas erstellen, dan ich dann als Hauptzeichenfläche der Komponente registriere und dann am Ende der Procedure paint den origianl Canvas per BitBlt auf den neuen werfe. Aber ich bekomme es nicht hin, dass ich den neuen Canvas als Hauptcanvas registriere. Hat da jemeand eine Idee oder schon mal ws ähnliches gemacht???

Gruß
Bomber
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

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

Re: BitBlt-Komponente

  Alt 3. Aug 2007, 09:56
ich glaub du hast einen Denkfehler. Wenn du von TCustomPanel ableitest erstellst du mit dem instanzieren ein neues Fenster (was sich wie ein Panel zeichnet). Das Fenster hat eine Zeischenfläche und die kannst du nicht einfach austauschen.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#3

Re: BitBlt-Komponente

  Alt 3. Aug 2007, 10:17
Zitat von SirThornberry:
ich glaub du hast einen Denkfehler. Wenn du von TCustomPanel ableitest erstellst du mit dem instanzieren ein neues Fenster (was sich wie ein Panel zeichnet). Das Fenster hat eine Zeischenfläche und die kannst du nicht einfach austauschen.
Nein .. aber man kann auf ihr zeichen mit BitBlt.

gruss
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

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

Re: BitBlt-Komponente

  Alt 3. Aug 2007, 10:22
Genau, BitBlt kann man auf jedem HDC (unter anderem Canvas.Handle) verwenden
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Bomberbb

Registriert seit: 23. Sep 2003
227 Beiträge
 
#5

Re: BitBlt-Komponente

  Alt 3. Aug 2007, 10:27
Nun ich habe es momentan so:
Delphi-Quellcode:
var
  Zeichenflaeche:TCanvas;
  BitBltBitMap:BBitmap;

Procedure TPaintPanel.Paint;
Begin //----- Paint -----
  BitBltBitmap.width := Self.Width;
  BitBltBitmap.height := Self.Height;
  Zeichenflaeche := BitBltBitmap.canvas;
  
  If Assigned(fOnPaint) then
    fOnPaint(Self);

  BitBlt(Self.Canvas.Handle, 0, 0, Self.width, Self.height, BitBltBitmap.Canvas.Handle, 0, 0, SRCCOPY);
  Zeichenflaeche := Self.canvas;
End; //----- Paint -----
funktioniert so weit auch ganz gut. Finde nur das ist nicht ganz konsequent, da ich ja nun im Prog alle Aufrufe von Paintpanel1.canvas durch Paintpanel1.Zeichenflaeche ersetzen muss(und das sind einige)...
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#6

Re: BitBlt-Komponente

  Alt 3. Aug 2007, 11:20
Zitat von Bomberbb:
Nun ich habe es momentan so:
Delphi-Quellcode:
var
  Zeichenflaeche:TCanvas;
  BitBltBitMap:BBitmap;

Procedure TPaintPanel.Paint;
Begin //----- Paint -----
  BitBltBitmap.width := Self.Width;
  BitBltBitmap.height := Self.Height;
  Zeichenflaeche := BitBltBitmap.canvas;
  
  If Assigned(fOnPaint) then
    fOnPaint(Self);

  BitBlt(Self.Canvas.Handle, 0, 0, Self.width, Self.height, BitBltBitmap.Canvas.Handle, 0, 0, SRCCOPY);
  Zeichenflaeche := Self.canvas;
End; //----- Paint -----
funktioniert so weit auch ganz gut. Finde nur das ist nicht ganz konsequent, da ich ja nun im Prog alle Aufrufe von Paintpanel1.canvas durch Paintpanel1.Zeichenflaeche ersetzen muss(und das sind einige)...
Ich weiss nicht was du damit bezwecken willst.
Denke aber das es sinnvoller wäre wenn du dich ganz von canvas verabschiedest.

Sinnvoll wäre es wenn du unter verwendung von BITMAPINFO , CreateDIBSection, CreateCompatibleDC
ein temporäres Bitmap erstellst und dieses auf die komponente welche über ein reales Handle verfügt( Image kannst nicht verwenden)
mit BitBlt auf die komponente zeichnest.

Was du dann nur benötigst ist ein handle und ein DC welches du an BitBlt übergibst.
Das Handle mußt du natürlich über GetDC in ein DC konvertieren.

BitBlt(SourceDC, x, y, w, h,DestDC, 0, 0, SRCCOPY) gruss Emil
  Mit Zitat antworten Zitat
Bomberbb

Registriert seit: 23. Sep 2003
227 Beiträge
 
#7

Re: BitBlt-Komponente

  Alt 3. Aug 2007, 12:22
Auf den Canvas möchte ich eigendlich nich verzichten, da ich mit der neuen Klasse meine momentan im Programm befindlichen Paintboxen ersetzen will. Und da hatte ich einen riesigen Aufwand an Anpassungen...
  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 01:39 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