Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - TForm OwnerDraw Resize Problem


partybear23 - Mo 26.05.08 11:21
Titel: TForm OwnerDraw Resize Problem
Hi,

hab ne Form, Borderstyle bsNone,
ich male dann bei OnPaint nen Rahmen drum und Titelleiste etc. pp.
Funzt super, nur wenn ich das Formular size siehts blöd aus,
kleiner kein Thema, aber größer sieht man dann die Rahmen:

Wie krieg ich das weg?
Habs mit Cliprect versucht, hat irgendwie nicht hingehauen.
Wenn ich das komplette Formular erst grau übermale sind Labels und Speedbuttons nicht mehr zu sehen.
Irgendwas bei OnResize hat auch nicht geholfen, mag mir wer helfen :)?


Danke i.V. und Gruß

pb



Edit: Danke Narses, merk ich mir fürs nächste Mal


partybear23 - Di 27.05.08 14:00

So damit ihr das Problem mal genauer versteht
hab ich nen Sample hochgeladen.


Gruß


Edit:

Mal noch der Code falls jemand keine Lust hat das zu laden.
Borderstyle= bsNone

Methode um Sizen zu können:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
procedure TForm1.WMNCHitTest(var msg: TWMNCHitTest);
var MPos: TPoint;
    Action: Integer;
begin
   inherited;

   MPos.X := Msg.XPos;
   MPos.Y := Msg.YPos;
   MPos := ScreenToClient(MPos);

   Action := 0;
   if (MPos.X > Self.Width - 10and (MPos.Y > 20then
      Inc(Action, 1);
   if MPos.Y > Self.Height - 10 then
      Inc(Action, 2);

   case Action of
      1: Msg.Result := htRight;
      2: Msg.Result := htBottom;
      3: Msg.Result := htBottomRight;
   end;
end;



Und die Zeichenroutine:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
procedure TForm1.FormPaint(Sender: TObject);
begin
      canvas.Rectangle(0,0, width, height);
end;

procedure TForm1.FormResize(Sender: TObject);
begin
    formpaint(self);
end;


Moderiert von user profile iconNarses: Code- durch Delphi-Tags ersetzt


Lannes - Di 27.05.08 21:01

Hallo,

versuchs mal damit:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
procedure TForm1.FormPaint(Sender: TObject);
begin
  Canvas.Rectangle(0,0, width, height);
end;

procedure TForm1.FormResize(Sender: TObject);
begin
  //formpaint(self);
  invalidate;
end;


partybear23 - Di 27.05.08 22:17

Vielen vielen Dank, du bist mein Held! :idea: :zustimm:

Klappt ausgezeichnet, dass es so eine Methode gibt, wusste ich nicht.


Gruß pb