ich habe in einer kleinen Komponente den Befehl Parent.PaintTo verwendendet. Unter Linux macht es alles so wie ich mir das vorstelle. Als ich es dann unter Windows probiert habe musste ich feststellen das es da wohl Unterschiede gibt und je nach Widget ein anderes Ergebnis raus kommt. Konkret habe ich nun festgestellt das unter Linux nur der Clientbereich eines Formulares gezeichnet wird während unter Windows die Titelleiste und der Rand mit gezeichnet werden.
Das sieht dann so aus: Ich habe dann den Canvas von einem Panel mit paintto gezeichnet da hier keine Titelleiste vorhanden ist. Leider bleibt hier das Zielcanvas leer (unter Linux geht es). Gibt es eine Möglichkeit unter Windows painto so zu verwenden das das Ergebnis wie unter Linux ist?
Hier noch mein kleiner Test:
Code: Alles auswählen
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls, ExtCtrls,
Selector;
type
{ TForm1 }
TForm1 = class(TForm)
Button1: TButton;
Panel1: TPanel;
procedure Button1Click(Sender: TObject);
procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);
procedure FormCreate(Sender: TObject);
procedure FormPaint(Sender: TObject);
procedure Panel1Paint(Sender: TObject);
private
bmp : tbitmap;
public
end;
var
Form1: TForm1;
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.FormPaint(Sender: TObject);
begin
canvas.Draw(0,50,bmp);
canvas.Brush.Color:=cllime;
canvas.Rectangle(120,40,220,150);
end;
procedure TForm1.Panel1Paint(Sender: TObject);
begin
{
with Panel1 do
begin
canvas.Draw(0,50,bmp);
canvas.Brush.Color:=cllime;
canvas.Rectangle(120,40,220,150);
end;
}
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
paintto(Canvas,0,0);
//Panel1.PaintTo(Panel1.Canvas,0,0);
//Panel1.PaintTo(Canvas,0,0);
end;
procedure TForm1.FormClose(Sender: TObject; var CloseAction: TCloseAction);
begin
bmp.Free;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
bmp := tbitmap.Create;
bmp.SetSize(100,100);
bmp.Canvas.Brush.Color:=clred;
bmp.Canvas.Rectangle(0,0,100,100);
panel1.Visible:=false;
end;
end.
Bernd
Edit: Rechtschreibfehler verbessert.