inherited Destroy;
end;
procedure TIDSLabel.Paint;
var
wXPos, wYPos : Word;
begin
{Π ΠΈΡΡΠ΅ΠΌ ΡΠ°ΠΌΠΊΡ}
inherited Paint;
{ΠΠ°Π·Π½Π°ΡΠ°Π΅ΠΌ ΡΡΠΈΡΡ}
Canvas.Font.Assign(Font);
{ΠΡΡΠΈΡΠ»ΡΠ΅ΠΌ Π²Π΅ΡΡΠΈΠΊΠ°Π»ΡΠ½ΡΡ ΠΏΠΎΠ·ΠΈΡΠΈΡ}
wYPos:= (Height β Canvas.TextHeight(Caption)) div 2;
{ΠΡΡΠΈΡΠ»ΡΠ΅ΠΌ Π³ΠΎΡΠΈΠ·ΠΎΠ½ΡΠ°Π»ΡΠ½ΡΡ ΠΏΠΎΠ·ΠΈΡΠΈΡ}
wXPos:= Offset;
case alignment of
taRightJustify: wXPos:= Width β Canvas.TextWidth(Caption) β Offset;
taCenter: wXPos := (Width β Canvas.TextWidth(Caption)) div 2;
end;
Canvas.Brush:= Parent.Brush;
Canvas.TextOut(wXPos,wYPos,Caption);
end;
procedure TIDSLabel.SetAlignment;
begin
FAlignment:= taIn;
Invalidate;
end;
procedure TIDSLabel.SetCaption;
begin
FCaption:= strIn;
if Assigned(FOnChange) then FOnChange(Self);
Invalidate;
end;
procedure TIDSLabel.SetFont;
begin
FFont.Assign(fntNew);
Invalidate;
end;
procedure TIDSLabel.SetOffset;
begin
FOffset:= bOffNew;
Invalidate;
end;
end.
ScrollBox
Π‘ΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΡ Π΄Π²ΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ² Scrollbox
Π Π΅ΡΠΈΡΡ Π·Π°Π΄Π°ΡΡ ΠΏΠΎΠΌΠΎΠ³ΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ΡΠΎΠ±ΡΡΠΈΠΉ OnScroll (Π² Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Π΄Π²Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° ScrollBox (ScrollBar1 ΠΈ ScrollBar2) ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½Ρ Π½Π° ΡΠΎΡΠΌΠ΅ TMainForm):
procedure TMainForm.ScrollBar1Scroll(Sender: TObject; ScrollCode: TScrollCode; var ScrollPos: Integer);
begin
ScrollBar2.Position:= ScrollPos;
end;
procedure TMainForm.ScrollBar1Scroll(Sender: TObject; ScrollCode: TScrollCode; var ScrollPos: Integer);
begin
ScrollBar1.Position:= ScrollPos;
end;
Splitter
ΠΠΎΠ½ΡΡΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Splitter
Π£ ΠΌΠ΅Π½Ρ Π΅ΡΡΡ ΡΠΎΡΠΌΠ° Ρ ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½Π½ΡΠΌΠΈ Π½Π° Π½Π΅ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°ΠΌΠΈ TreeView ΠΈ Memo. ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²Π° align ΠΎΠ±ΠΎΠΈΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ² ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΈΠΌ Π·Π°Π½ΠΈΠΌΠ°ΡΡ Π²ΡΡ ΡΠΎΡΠΌΡ. Π― Ρ ΠΎΡΠ΅Π» Π±Ρ ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠΈΡΡ ΠΌΠ΅ΠΆΠ΄Ρ Π½ΠΈΠΌΠΈ Π΄Π²ΠΈΠΆΠΎΠΊ ΡΠΈΠΏΠ° Splitter, ΠΏΡΠΎΠΏΠΎΡΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎ ΠΌΠ΅Π½ΡΡΡΠΈΠΉ ΠΈΡ ΡΠ°Π·ΠΌΠ΅ΡΡ (ΠΎΠ΄ΠΈΠ½ ΡΠΈΡΠ΅, Π΄ΡΡΠ³ΠΎΠΉ ΠΌΠ΅Π½ΡΡΠ΅ ΠΈ Π½Π°ΠΎΠ±ΠΎΡΠΎΡ), Π½ΠΎ ΠΊ ΡΠΎΠΆΠ°Π»Π΅Π½ΠΈΡ Ρ ΠΎΠ±Π»Π°Π΄Π°Ρ Π»ΠΈΡΡ Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΠ²ΠΎΠΌ Delphi2 (Splitter Π²ΠΎΡΠ΅Π» Π² ΠΏΠ°Π»ΠΈΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π² Delphi3). ΠΠ°ΠΊΠΎΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ ΠΌΠΎΠ³ Π±Ρ ΡΡΠΌΠΈΡΠΈΡΠΎΠ²Π°ΡΡ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Splitter ΠΈ ΠΊΠ°ΠΊ ΡΡΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ?
ΠΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, ΠΠ°Ρ TreeView ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ Π² Π»Π΅Π²ΠΎΠΉ, Π° Memo Π² ΠΏΡΠ°Π²ΠΎΠΉ ΡΠ°ΡΡΠΈ ΡΠΎΡΠΌΡ. ΠΠ°ΠΌ Π½ΡΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅:
β’ Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΡΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ Align ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° TreeView Π½Π° alLeft.
β’ ΠΡΡΠ΅ΠΆΡΡΠ΅ (Ctrl-X) ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ TMemo ΠΈΠ· Π²Π°ΡΠ΅ΠΉ ΡΠΎΡΠΌΡ.
β’ ΠΠΎΠ±Π°Π²ΡΡΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ Panel ΠΈ ΠΏΡΠΈΡΠ²ΠΎΠΉΡΠ΅ Π΅Π³ΠΎ ΡΠ²ΠΎΠΉΡΡΠ²Ρ Align Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ alClient.
β’ ΠΠ½ΡΡΡΠΈ ΠΏΠ°Π½Π΅Π»ΠΈ ΡΠ°Π·ΠΌΠ΅ΡΡΠΈΡΠ΅ Π΄ΡΡΠ³ΠΎΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ Panel.
β’ Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΡΠ΅ Π΅Π³ΠΎ ΡΠΈΡΠΈΠ½Ρ, ΡΠ°Π²Π½ΠΎΠΉ 8 ΠΏΠΈΠΊΡΠ΅Π»Π°ΠΌ, ΡΠ²ΠΎΠΉΡΡΠ²Ρ Align ΠΏΡΠΈΡΠ²ΠΎΠΉΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ alLeft.
β’ Π‘ΠΊΠΎΠΏΠΈΡΡΠΉΡΠ΅ Π²ΡΡΠ΅Π·Π°Π½Π½ΡΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ TMemo Π² ΠΏΠ°Π½Π΅Π»Ρ Panel1 ΠΈ ΠΏΡΠΈΡΠ²ΠΎΠΉΡΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²Ρ Align Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ alClient.
Panel2 β Π΄Π²ΠΈΠΆΠΎΠΊ: ΡΠ΅ΠΏΠ΅ΡΡ Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ, ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΡΠ΅ Π½ΠΈΠΆΠ΅. ΠΠ°Ρ ΠΊΠΎΠ΄ Π±ΡΠ΄Π΅Ρ Π²ΡΠ³Π»ΡΠ΄Π΅ΡΡ ΠΏΡΠΈΠ±Π»ΠΈΠ·ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠ°ΠΊ:
type TForm1 = class(tform)
TreeView1: TTreeview;
Panel1: TPanel;
Panel2: TPanel;
Memo1: TMemo;
procedure Panel1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
procedure Panel1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
procedure Panel1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
private
Resizing: Boolean;
public
β¦
end;
procedure TForm1.Panel2MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
Resizing:=true;
end;
procedure TForm1.Panel2MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
Resizing:= false;
end;
procedure TForm1.Panel2MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
if Resizing then begin
TreeView1.Width:=TreeView1.Width+X;
// ΠΡΠ΅Π΄ΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ ΠΎΡ ΡΡΡΠ°Π½Π½ΡΡ ΠΎΡΠΈΠ±ΠΎΠΊ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠΎΠ²ΠΊΠΈ ΠΏΡΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΡΠ°Π·ΠΌΠ΅ΡΠΎΠ²:
Panel1.Invalidate;
end;
end;
ΠΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΠΎΠ²Π°Π½ Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ Π³ΠΎΡΠΈΠ·ΠΎΠ½ΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ Π΄Π²ΠΈΠΆΠΊΠ° β ΠΈΠ΄Π΅Ρ, Π½Π°Π΄Π΅ΡΡΡ, ΠΏΠΎΠ½ΡΡΠ½Π°β¦
StatusBar
ΠΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΡΠΎΠ±ΡΡΠΈΡ OwnerDraw Π² ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ΅ StatusBar
ΠΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²ΡΠ³Π»ΡΠ΄Π΅ΡΡ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ ΡΠ°ΠΊ:
procedure TForm1.StatusBar1DrawPanel(StatusBar: TStatusBar; Panel: TStatusPanel; const Rect: TRect);
begin
with statusbar1.Canvas do begin
Brush.Color:= clRed;
FillRect(Rect);
TextOut(Rect.Left, Rect.Top, 'ΠΠ°Π½Π΅Π»Ρ '+IntToStr(Panel.Index));
end;
end;
StringGrid
Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Π°ΡΡΠΈΠ±ΡΡΠΎΠ² β=Π’ΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΡΡΠ΅Π½ΠΈΡ=β Ρ ΡΡΠΎΠ»Π±ΡΠΎΠ² ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° StringGrid
ΠΠ°Π½ΠΈΠΏΡΠ»ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π²ΡΡΠ΅ΡΠΊΠ°Π·Π°Π½Π½ΡΠΌ Π°ΡΡΠΈΠ±ΡΡΠΎΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π² ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ΅ ΡΠΎΠ±ΡΡΠΈΡ OnSelectCell:
if Col mod 2 = 0 then grd.Options:= grd.Options + [goEditing]
else grd.Options:= grd.Options β [goEditing];
ΠΠΎΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π² ΡΡΠ΅ΠΉΠΊΡ StringGrid
ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π»ΠΈ ΠΏΠΎΠΌΠ΅ΡΡΠΈΡΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π² ΠΎΠ΄Π½Ρ ΠΈΠ· ΡΡΠ΅Π΅ΠΊ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° StringGrid?
Π’Π°ΠΊΠΎΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΡΠΎΠ±ΡΡΠΈΡ OnDrawCell. ΠΡΠΈΠ²ΠΎΠ΄ΠΈΠΌ ΡΠΊΠ΅Π»Π΅Ρ ΠΊΠΎΠ΄Π°, Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΡΡΡΠΈΠΉ ΠΏΡΠΈΠ½ΡΠΈΠΏ Π²ΡΠ²ΠΎΠ΄Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π² ΡΡΠ΅ΠΉΠΊΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°:
with StringGrid1.Canvas do begin
{β¦}
Draw(Rect.Left, Rect.Top, Image1.Picture.Graphic);
{β¦}
end;
ΠΠΎΡΡΠΈΡΡ ΡΠ΅Π»ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ ΠΌΠ΅ΡΠΎΠ΄Ρ Draw() ΠΈ StretchDraw() ΠΎΠ±ΡΠ΅ΠΊΡΠ° TCanvas. Π ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ Image1 ΠΊΠ»Π°ΡΡΠ° TImage ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π·Π°ΡΠ°Π½Π΅Π΅ Π·Π°Π³ΡΡΠΆΠ΅Π½Π½ΠΎΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅.
Π‘ΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ ΠΈ ΡΡΠ΅Π½ΠΈΠ΅ Tstringgrid
ΠΠ°ΠΊ ΠΌΠ½Π΅ ΡΠΎΡ ΡΠ°Π½ΠΈΡΡ ΡΠ΅Π»ΡΠΉ Stringgrid ΡΠΎ Π²ΡΠ΅ΠΌΠΈ ΡΡΠ΅ΠΉΠΊΠ°ΠΌΠΈ Π² ΡΠ°ΠΉΠ»Π΅?
Procedure SaveGrid;
var f:textfile;
x,y: integer;
begin
assignfile(f,'Filename');
rewrite(f);
writeln(f,stringgrid.colcount);
writeln(f,stringgrid.rowcount);
For x:= 0 to stringgrid.colcount-1 do For y:= 0 to stringgrid.rowcount-1 do writeln(F, stringgrid.cells[x,y]);
closefile(f);
end;
Procedure LoadGrid;
var f:textfile;
temp,x,y:integer;
tempstr:string;
begin
assignfile(f,'Filename');
reset(f);
readln(f,temp);
stringgrid.colcount:= temp;
readln(f,temp);
stringgrid.rowcount:= temp;
For x:=0 to stringgrid.colcount-1 do For y:=0 to stringgrid.rowcount-1 do begin
readln(F, tempstr);
stringgrid.cells[x,y]:= tempstr;
end;
closefile(f);
end;
TabbedNotebook
ΠΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π² TTabbedNotebook ΠΈ TNotebook
Π― Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°Π· Π²ΠΈΠ΄Π΅Π» Π² ΠΊΠΎΠ½ΡΠ΅ΡΠ΅Π½ΡΠΈΡΡ Π²ΠΎΠΏΡΠΎΡΡ ΡΠΈΠΏΠ° "ΠΊΠ°ΠΊ ΠΌΠ½Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π² TTabbedNotebook ΠΈΠ»ΠΈ TNotebook Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ?". Π’Π΅ΠΏΠ΅ΡΡ, ΠΊΠΎΠ³Π΄Π° Ρ ΠΌΠ΅Π½Ρ Π²ΡΠ΄Π°Π»ΠΎΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΡΡ ΠΌΠΈΠ½ΡΡ, Ρ ΠΏΠΎΠΏΡΡΠ°ΡΡΡ ΠΎΡΠ²Π΅ΡΠΈΡΡ ΡΡΠΎΡ Π²ΠΎΠΏΡΠΎΡ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅:
TTabbedNotebookΠΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π² TTabbedNotebook Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ β ΠΊΡΠ°ΡΠΈΠ²Π°Ρ ΠΈ ΠΏΡΠΎΡΡΠ°Ρ Π·Π°Π΄Π°ΡΠ°. ΠΡΠ΅, ΡΡΠΎ ΠΠ°ΠΌ Π½ΡΠΆΠ½ΠΎ β ΡΡΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ PageIndex ΠΈΠ»ΠΈ ActivePage Π½Π° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΡ ΡΡΡΠ°Π½ΠΈΡΡ ΠΈ Π½Π°ΡΠ°ΡΡ Π·Π°ΠΏΠΎΠ»Π½ΡΡΡ Π΅Π΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΠΌΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ.
ΠΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΡΠ°ΠΊΠΆΠ΅ ΠΎΡΠ΅Π½Ρ ΠΏΡΠΎΡΡΠΎ. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, Π² ΠΏΡΠΈΠ»Π°Π³Π°Π΅ΠΌΠΎΠΉ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ ΠΏΠΎ Delphi Π²Ρ Π½Π΅ Π½Π°ΠΉΠ΄Π΅ΡΠ΅ ΡΠ΅ΡΠ΅ΠΏΡΠΎΠ² ΡΠΈΠΏΠ° Π§ΡΠΎ-ΠΈ-ΠΠ°ΠΊ. ΠΠΈΠ΄ΠΈΠΌΠΎ Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΠΎΠΊΠΎΠ½ΡΠ°ΡΠ΅Π»ΡΠ½ΠΎ Π·Π°ΠΏΡΡΠ°ΡΡ Π½Π°ΡΠΈΠ½Π°ΡΡΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠΎΠ², ΡΠΈΡΠΌΠ°-ΠΈΠ·Π³ΠΎΡΠΎΠ²ΠΈΡΠ΅Π»Ρ Π΄Π°ΠΆΠ΅ Π½Π΅ ΡΠ΄ΠΎΡΡΠΆΠΈΠ»Π°ΡΡ Π²ΠΊΠ»ΡΡΠΈΡΡ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄ TTabbedNotebook Π² VCL-Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, TTabbedNotebook ΠΎΡΡΠ°Π΅ΡΡΡ Π΄Π»Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΡΠ°ΠΉΠ½ΠΎΠΉ Π·Π° ΡΠ΅ΠΌΡΡ ΠΏΠ΅ΡΠ°ΡΡΠΌΠΈ. Π ΡΡΠ°ΡΡΡΡ, Ρ ΠΈΠΌΠ΅Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΠΏΡΡ, ΠΊΠΎΠΈΠΌ ΠΈ Ρ ΠΎΡΡ ΠΏΠΎΠ΄Π΅Π»ΠΈΡΡΡΡ.
ΠΠ΅ΡΠ²ΡΠΌ ΡΠ°Π³ΠΎΠΌ ΠΊ ΡΠ°ΡΠΊΡΡΡΠΈΡ ΡΠ°ΠΉΠ½Ρ ΠΏΠΎΡΠ»ΡΠΆΠΈΡ ΠΏΡΠΎΡΠΌΠΎΡΡ ΡΠ°ΠΉΠ»Π° \DELPHI\DOC\TABNOTBK.INT, ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ½ΠΎΠΉ ΡΠ΅ΠΊΡΠΈΠΈ ΠΌΠΎΠ΄ΡΠ»Ρ TABNOTBK.PAS, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ ΠΊΠ»Π°ΡΡ TTabbedNotebook. ΠΠ΅Π³Π»ΡΠΉ ΠΏΡΠΎΡΠΌΠΎΡΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΡΡ ΠΊΠ»Π°ΡΡ TTabPage, ΠΎΠΏΠΈΡΠ°Π½Π½ΡΠΉ ΠΊΠ°ΠΊ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠΉ ΡΡΡΠ°Π½ΠΈΡΡ TTabbedNotebook.
ΠΡΠΎΡΡΠΌ ΡΠ°Π³ΠΎΠΌ Π² ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠΈ TTabbedNotebook ΠΌΠΎΠΆΠ΅Ρ ΡΡΠ°ΡΡ ΡΠ°ΠΊΡ Π½Π°Π»ΠΈΡΠΈΡ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎΠΌ Pages ΡΠΈΠΏΠ° TStrings. Π ΡΠ²ΡΠ·ΠΈ Ρ ΡΡΠΈΠΌ ΠΎΡΠΌΠ΅ΡΠΈΠΌ, ΡΡΠΎ Delphi-ΠΊΠ»Π°ΡΡΡ TStrings ΠΈ TStringList ΡΠΎΠΎΡΠ³Π°Π½ΠΈΠ·ΡΡΡΡΡ Ρ Π΄Π²ΡΠΌΡ ΡΠ²ΠΎΠΉΡΡΠ²Π°ΠΌΠΈ: Strings ΠΈ Objects. ΠΡΡΠ³ΠΈΠΌΠΈ ΡΠ»ΠΎΠ²Π°ΠΌΠΈ, Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ Π² TStrings Π΅ΡΡΡ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ Objects. ΠΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ ΡΠ»ΡΡΠ°ΡΡ ΡΡΠΎΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠΉ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ ΠΈΠ³Π½ΠΎΡΠΈΡΡΠ΅ΡΡΡ, Π½Π°ΠΌ ΠΆΠ΅ ΠΎΠ½ ΠΎΡΠ΅Π½Ρ ΠΏΡΠΈΠ³ΠΎΠ΄ΠΈΡΡΡ.
ΠΠΎΡΠ»Π΅ Π½Π΅Π±ΠΎΠ»ΡΡΠΎΠ³ΠΎ ΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠ° Π²ΡΡΡΠ½ΡΠ΅ΠΌ, ΡΡΠΎ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ Objects ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π½Π° Π½Π°ΡΡ ΠΊΠΎΠΏΠΈΡ TTabPage ΠΈ ΡΡΡΠ»Π°Π΅ΡΡΡ Π½Π° ΠΈΠΌΡ ΡΡΡΠ°Π½ΠΈΡΡ Π² ΡΠ²ΠΎΠΉΡΡΠ²Π΅ Strings. ΠΠ»Π΅ΡΡΡΡΠ΅! ΠΡΠ΅Π³Π΄Π° ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π·Π½Π°ΡΡ ΡΡΠΎ ΠΈΡΠ΅ΡΡ. Π’Π΅ΠΏΠ΅ΡΡ ΠΏΠΎΡΠΌΠΎΡΡΠΈΠΌ ΡΡΠΎ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ΄Π΅Π»Π°ΡΡ:
{ ΠΠ°Π½Π½Π°Ρ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ° Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ ΠΊΠ½ΠΎΠΏΠΊΡ Π² ΡΠ»ΡΡΠ°ΠΉΠ½ΠΎΠΉ ΠΏΠΎΠ·ΠΈΡΠΈΠΈ Π½Π° }
{ ΡΠ΅ΠΊΡΡΠ΅ΠΉ ΡΡΡΠ°Π½ΠΈΡΠ΅ Π΄Π°Π½Π½ΠΎΠ³ΠΎ TTabbedNotebook. }
procedure AddButton(tabNotebook : TTabbedNotebook);
var
tabpage: TTabPage;
button: TButton;
begin
with tabNotebook do tabpage:= TTabPage(Pages.Objects[PageIndex]);
button:= TButton.Create(tabpage);
try
with button do begin
Parent:= tabpage;
Left:= Random(tabpage.ClientWidth β Width);
Top:= Random(tabpage.ClientHeight β Height);
end;
except
button.Free;
end;
end;