Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Π‘ΠΎΠ²Π΅Ρ‚Ρ‹ ΠΏΠΎ Delphi. ВСрсия 1.0.6Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 17

Автор Π’Π°Π»Π΅Π½Ρ‚ΠΈΠ½ ΠžΠ·Π΅Ρ€ΠΎΠ²

 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;