Einzelnen Beitrag anzeigen

Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.323 Beiträge
 
Delphi XE2 Professional
 
#1

PaintBox über Komponenten legen

  Alt 7. Okt 2008, 20:37
Hallo,

ich erzeuge zur Laufzeit eine PaintBox, die über allen
Komponenten, sprich im Vordergrund, auf der Form liegen
soll. Zur Laufzeit ist diese noch nicht sichbar.
(Visible = false)

Wenn sie angezeigt wird, dann liegt sie über allen
Komponenten, ausser über "bedienbare" Komponenten, wie
Button und CheckBox.

Wie bekomm ich die PaintBox auch über den Button und
CheckBox angezeigt?

Anbei mal etwas Code...

erzeugen:
Delphi-Quellcode:
procedure TMainForm.FormCreate(Sender: TObject);
begin
  //DoubleBuffered setzen
  MainForm.DoubleBuffered := true;

  //PaintBox erzeugen
  PaintBox := TPaintBox.Create(self);

  with PaintBox do
    begin
      //Parent setzen
      Parent := self;

      //Position und Größe definieren
      Left := 0;
      Top := 0;
      Height := MainForm.ClientHeight;
      Width := MainForm.ClientWidth;

      //nicht anzeigen
      Visible := false;

      //
      OnPaint := OnPaintPaintBox;
    end;
Die Paint-Procedure:
Delphi-Quellcode:
procedure TMainForm.OnPaintPaintBox(Sender: TObject);
var
  LogFont : TLogFont;
  Font_Winkel : TFont;

begin
  with PaintBox.Canvas do
    begin
      //Hintergrundfarbe setzen
      Brush.Color := clGray;

      //Hintergrund setzen
      FillRect(ClientRect);

      //Font definieren
      Font.Name := 'Arial';
      Font.Size := 100;
      Font.Color := clRed;

      //Extra-Font erzeugen
      Font_Winkel := TFont.Create;

      try
        //Font an Extra-Font übergeben
        Font_Winkel.Assign(Font);

        GetObject(Font_Winkel.Handle, SizeOf(LogFont), @LogFont);

        LogFont.lfEscapement := 320;
        LogFont.lfOrientation := 320;

        SetBkMode(Handle, TRANSPARENT);

        //Extra-Font an Font übergeben
        Font_Winkel.Handle := CreateFontIndirect(LogFont);
        Font.Assign(Font_Winkel);
      finally
        //Font löschen und freigeben
        FreeAndNil(Font_Winkel);
      end;

      //Textausgabe
      TextOut(50, 210, 'Text');
    end;
end;
  Mit Zitat antworten Zitat