Rajzolás tabsheet-re

Rajzolás tabsheet-re
2009-07-15T09:29:25+02:00
2009-07-17T13:31:36+02:00
2022-11-14T07:25:39+01:00
ZsZs
Sziasztok!

Futásidőben létrehozott tabsheet-ekre szeretnék rajzolni.
Két problémám is van.
1. A TTabSheet-nek nincs Canvas-a. Arra gondoltam, hogy lérehozok egy TBitmap-et (arra tudok rajzolni) és azt rakom rá a tabsheet-re. Hogy lehet a sheet-re "rászögelni" a bitmapet, úgy mintha annak lenne egy clientre állított align tulajdonsága?
2. Ha maradandó akar az ember alkotni, akkor úgy tudom a Form OnPaint() eljárásában kell ezt megtenni (s előtte meghívn az Invalidate-t).

Soha nem rajzoltam még nemhogy egy tabsheetre, de még formra sem, most viszont kellene...

Hogyan rajzolhatok egy sheetre?
(C++ Builderben dolgozom, de a Delphi-s megoldások is érdekelnek.)

Köszi,
ZsZs.
Mutasd a teljes hozzászólást!
A TTabSheet-nek nincs Canvas-a

Már hogyne volna! Csak meg kell írni:
.... var Form1: TForm1; //eddig van a letezo kod. TabSheet_Canvas: TCanvas; p: TPoint; implementation {$R *.DFM} procedure TForm1.FormCreate(Sender: TObject); begin TabSheet_Canvas := TCanvas.Create; TabSheet_Canvas.Handle := GetDC( TabSheet1.Handle ); end; procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin ReleaseDC( TabSheet1.Handle, TabSheet_Canvas.Handle ); end; procedure TForm1.TabSheet1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin p := Point( X, Y ); end; procedure TForm1.TabSheet1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin if ssLeft in Shift then begin MoveToEx( TabSheet_Canvas.Handle, p.x, p.y, nil ); LineTo( TabSheet_Canvas.Handle, X, Y ); p := Point( x, y ); end; end;

Így tudsz rajzolni az egérrel a tabsheetre.
Mutasd a teljes hozzászólást!

  • Tegyél egy TPaintBox-t a tabsheet-re, annak állítsd be az align-ját alClient-re, és rajzoljál rá a saját Onpaint eseményben.
    Mutasd a teljes hozzászólást!

  • procedure TForm1.Button1Click(Sender: TObject); var FRect: TRect; begin FRect := PageControl1.TabRect(0); PageControl1.Canvas.Brush.Color := clNavy; PageControl1.Canvas.FillRect(FRect); end;
    Mutasd a teljes hozzászólást!
  • A TTabSheet-nek nincs Canvas-a

    Már hogyne volna! Csak meg kell írni:
    .... var Form1: TForm1; //eddig van a letezo kod. TabSheet_Canvas: TCanvas; p: TPoint; implementation {$R *.DFM} procedure TForm1.FormCreate(Sender: TObject); begin TabSheet_Canvas := TCanvas.Create; TabSheet_Canvas.Handle := GetDC( TabSheet1.Handle ); end; procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin ReleaseDC( TabSheet1.Handle, TabSheet_Canvas.Handle ); end; procedure TForm1.TabSheet1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin p := Point( X, Y ); end; procedure TForm1.TabSheet1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin if ssLeft in Shift then begin MoveToEx( TabSheet_Canvas.Handle, p.x, p.y, nil ); LineTo( TabSheet_Canvas.Handle, X, Y ); p := Point( x, y ); end; end;

    Így tudsz rajzolni az egérrel a tabsheetre.
    Mutasd a teljes hozzászólást!
  • Ezt kifelejtettem:
    procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin ReleaseDC( TabSheet1.Handle, TabSheet_Canvas.Handle ); FreeAndNil( TabSheet_Canvas ); end;
    Mutasd a teljes hozzászólást!
  • Köszönöm mindenkinek a segítségét és a forrást!

    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd