Einzelnen Beitrag anzeigen

Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#1

[TBitmap32] - Transparent zeichnen

  Alt 9. Dez 2007, 10:59
Hi DP,
ich habe folgendes Problem:
Es gibt verschiedene Bitmaps:
  • Ein Hintergrundbitmap
  • Eine "Datenbitmap"
  • Eine Bufferbitmap
Ich zeichne das Fenster daraufhin transparent. Soweit alles okay.
Jetzt steht in der Datenbitmap nur eine Tabelle mit verschiedenen Texten ohne einen Hintergrund.
Wenn ich jetzt die Datenbitmap dann auf die Bufferbitmap zeichne, überzeichnet er entweder die Hintergrundbitmap an der Stelle, oder er zeichnet gar nichts:
Delphi-Quellcode:
bBuffer.SetSize(bTimeTable.Width, bTimeTable.Height); // Bufferbitmapgröße = Hintergrundbitmapgröße
BitBlt(bBuffer.Canvas.Handle, 0, 0, Width, Height, bTimeTable.Canvas.Handle, 0, 0, SRCCOPY); // Hintergrund auf Buffer zeichnen

// Entweder habe ich das so getestet
BitBlt(bBuffer.Canvas.Handle, 30, 39, table.Width, table.Height, table.ImageHandle, 0, 0, SRCCOPY); // Er überzeichnet alles an der Stelle
// Oder
table.DrawTo(bBuffer, 30, 39); // Er zeichnet gar nichts (Hinweis: table ist kein TBitmap32!)

// Das hier dient zum erstellen eines Transparenten Fensters
Size.cx := Width;
Size.cy := Height;
UpdateLayeredWindow(Handle, 0, nil, @Size, bBuffer.Handle, @P, 0, @BlendF, ULW_ALPHA);
Ein kleiner Hinweis: Das Objekt "table" ist keine TBitmap32, sondern ein von TObject geerbetes TTimeTable:
Delphi-Quellcode:
procedure TTimeTable.DrawTo(Dst: TBitmap32; DstX, DstY: Integer);
begin
  bBitmap.DrawTo(Dst, DstX, DstY);
end;
Was kann man da tun?
Achso ein paar Hinweise:
  • table.bBitmap.CombineMode = cmBlend oder cmMerge
  • table.bBitmap.DrawMode = dmBlend oder dmCustom oder dmTransparent oder dmOpaque
  • Alle anderen TBitmaps32.CombineMode = cmBlend
  • Alle anderen TBitmaps32.DrawMode = dmBlend

Ehrlich gesagt weiß ich nicht weiter xD

MfG
xZise

[edit]Ich habe es geschafft. Leider sehr unschön
Ich habe einfach ein Hintergrundpixel denn ich einfach kopiere (auf das Datenbitmap),
aber jetzt sieht die Schrift darauf nicht sehr toll aus (Siehe Anhang)
Ich zeichne dass mit "Rendertext".[/edit]

[edit]
Info für mich selbst:
Zeichne nur einmal die Schrift[/edit]
Miniaturansicht angehängter Grafiken
timetabtop_135.png  
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat