Code:

procedure TForm1.Button1Click(Sender: TObject);

var

Bm1: TBitmap;

Bm2: TBitmap;

begin

Bm1 := TBitmap.Create;

Bm2 := TBitmap.Create;

Bm1.LoadFromFile('c:\download\test.bmp');

Bm2.Width := Bm1.Width;

Bm2.Height := Bm1.Height;

bm2.Canvas.Brush.Color := CoolBar1.Color;

bm2.Canvas.BrushCopy(Rect(0, 0, bm2.Width, bm2.Height), Bm1,

   Rect(0, 0, Bm1.width, Bm1.Height), ClWhite);

bm1.Free;

CoolBar1.Bitmap.Assign(bm2);

bm2.Free;

end;

 

 

Автор: Ray Konopka

 

Следующий небольшой компонент представляет собой панель, содержащую другую, вложенную панель. Во вложенной панели могут быть размещены другие компоненты, читаться они будут правильно. Ключевым моментом здесь является перекрытие методов WriteComponents и ReadState.

 

Привожу исходный код для создания панелей с изменяющимися размерами. Воровняйте панель по области клиента свойством alClient, расположите на ней несколько элементов управления и посмотрите как меняются размеры во время изменения размера формы при выполнении программы. Можно расширить код и запретить изменения размеров во время проектирования, но это я оставляю для вас. Данная технология может и не идеальна, поскольку я накропал код за считанные минуты, но для выполнения моих задач этого достаточно.

 

 

Code:

unit Unit1;

{©Drkb v.3: www.drkb.ru}

 

interface

 

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, ExtCtrls, XPMan;

 

type

TForm1 = class(TForm)

   Panel1: TPanel;

   XPManifest: TXPManifest;

   procedure FormCreate(Sender: TObject);

end;

 

var

Form1: TForm1;

 

implementation

 

{$R *.dfm}

 

uses

Themes;

 

type

TMyPanel = class(TPanel)

public

   constructor Create(AOwner: TComponent); override;

end;

 

{ TMyPanel }

 

constructor TMyPanel.Create(AOwner: TComponent);

begin

inherited Create(AOwner);

 

if ThemeServices.ThemesEnabled then

   ControlStyle := ControlStyle - [csParentBackground] + [csOpaque];

end;

 

procedure TForm1.FormCreate(Sender: TObject);

var

R: TRect;

begin

with TMyPanel.Create(Self) do

begin

   Parent := Self;

   Color := clGreen;

   R := Panel1.BoundsRect;

   R.Left := R.Left + 300;

   R.Right := R.Right + 300;

   BoundsRect := R;

end;

end;

 

end.

 

 

Кто-нибудь пробовал создать форму, подобную "отстегивающимся" панелькам (FreeDoc)? Я попробовал и вот что получилось...

 

Код требует использования некоторых функций WinAPI. Описание всех WinAPI функций доступны при нажатии F1 (электронная справка)...

 

Ну а теперь попробуем это создать (весь код занимает около 100 строчек)...

 

Ход работы:

 

 

 

Для создания панелей в двумя полосами слева, которые можно двигать друг относительно друга, используют компонент ControlBar (вкладка Additional), на котором обычно размещают один или несколько ToolBar (вкладка Win32). Чтобы сделать возможным "вытаскивание" панели из ControlBar нужно написать следующий код: