![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Уважаемые Доны подкажите пожалуйста как можно сделать [D7, WinXP]
Новичок1 © (2005-09-16 11:09:00)поле формы овального размера или круглого?
Defunct (2005-09-16 13:08:00) [1]Новичок1 © (16.09.05 12:57) [10]
Рады за Вас, уважаемый Дон! ;>
Новичок1 (2005-09-16 12:57:00) [2]Сенькс, получилось!
ocean (2005-09-16 12:51:00) [3]В дополнение к абсолютно верному [1] дам примерчик. Он создает прозрачную форму, но при замене CreateRectRgn на CreateEllipticRgn или какой-то другой форма будет какая надо:
unit unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
// это просто кнопка на форме - для демонстрации
protected
procedure RebuildWindowRgn;
procedure Resize; override;
public
constructor Create(AOwner: TComponent); override;
end;
var
Form1 : TForm1;
implementation
// ресурс этой формы
{$R *.DFM}
{ Прозрачная форма }
constructor TForm1.Create(AOwner: TComponent);
begin
inherited;
// убираем сколлбары, чтобы не мешались
// при изменении размеров формы
HorzScrollBar.Visible:= False;
VertScrollBar.Visible:= False;
// строим новый регион
RebuildWindowRgn;
end;
procedure TForm1.Resize;
begin
inherited;
// строим новый регион
RebuildWindowRgn;
end;
procedure TForm1.RebuildWindowRgn;
var
FullRgn, Rgn: THandle;
ClientX, ClientY, I: Integer;
begin
// определяем относительные координаты клиенской части
ClientX:= (Width - ClientWidth) div 2;
ClientY:= Height - ClientHeight - ClientX;
// создаем регион для всей формы
FullRgn:= CreateRectRgn(0, 0, Width, Height);
// создаем регион для клиентской части формы
// и вычитаем его из FullRgn
Rgn:= CreateRectRgn(ClientX, ClientY, ClientX + ClientWidth, ClientY +
ClientHeight);
CombineRgn(FullRgn, FullRgn, Rgn, rgn_Diff);
// теперь добавляем к FullRgn регионы каждого контрольного элемента
for I:= 0 to ControlCount -1 do
with Controls[I] do begin
Rgn:= CreateRectRgn(ClientX + Left, ClientY + Top, ClientX + Left +
Width, ClientY + Top + Height);
CombineRgn(FullRgn, FullRgn, Rgn, rgn_Or);
end;
// устанавливаем новый регион окна
SetWindowRgn(Handle, FullRgn, True);
end;
end.
Zeqfreed (2005-09-16 12:35:00) [4]Новичок1 © (16.09.05 12:01) [7]
В [1] всё сказано. Или у тебя "стандартный" вариант - справки нет/по английски не читаем-с?
Новичок1 (2005-09-16 12:01:00) [5]Все сделал , овал получил , но он находится внутри формы , а сама форма прямоугольная
Установки сделал
TransparentColor:=TRUE;
TransparentColorValue:=clBtnFace;
Может в свойстве color еще поправит.
kblc (2005-09-16 11:43:00) [6]Закладка: Additional
там Shape (ExtCtrls)
Новичок1 (2005-09-16 11:37:00) [7]Не могу найти где находится Tshare на какой закладке?
TUser (2005-09-16 11:36:00) [8]> Самый простой:
Самое просто - вынуть из JEDI соотв. компонент. И он это сделает через регионы. Работать будет помедленнее, чем руками [1], но пользователь этого не заметит.
Новичок1 (2005-09-16 11:22:00) [9]Это нужно прописать в процедуре procedure TForm1.FormCreate(Sender: TObject);?
kblc (2005-09-16 11:19:00) [10]Самый простой:
Бросаешь на форму TShape, делаешь её любой формы,
Свойства формы
TransparentColor:=TRUE;
TransparentColorValue:=clBtnFace;
TUser (2005-09-16 11:14:00) [11]CreateEllipticRgn
SetWindowRgn