![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Form
wwwit@lick © (2002-06-15 20:57:00)Помогите PliZZ!!! Как мне измеить вид формы (в смысле, чтобы она была не прямоугольная а, например, овальная или еще какая-нибудь)Заранее СПАСИБО
Exploited (2002-06-16 15:51:00) [1]Вот инфа с сайта http://www.delphibest.narod.ru/
Для начала нужно обеспечить возможность пользователю перемещать окно, хватаясь за клиентскую область, а не за заголовочную, т.к. полосы заголовка, собственно, у нас нет.
Сначала в частных объявлениях (после слова private) объявляем процедуру:
private
procedure WMNCHitTest(var M:TWMNCHitTest);message wm_NCHitTest;
Затем в разделе implementation описываем её так:
implementation
{$R *.DFM}
procedure TForm1.WMNCHitTest(var M:TWMNCHitTest);
begin
inherited;
if M.Result=htClient then M.Result:=htCaption;
end;
Далее самое главное. По созданию окна (событие OnCreate) пишем следующий код:
procedure TForm1.FormCreate(Sender: TObject);
var
hsWindowRegion:Integer;
begin
hsWindowRegion:=CreateEllipticRgn(50,50,350,200);
SetWindowRgn(Handle,hsWindowRegion,true);
end;
Как это сделано?
Сначала мы объявляем переменную типа Integer, называем её hsWindowRegion.В неё в дальнейшем мы поместим дескриптор созданного региона. Затем, с помощью функции CreateEllipticRgn создаём регион эллипсовидной формы. В скобках ей указываем координаты для построения эллипса. В зависимости от того, какие значения вы укажите, такого размера и создастся ваш эллипс. После того, как регион создан, осталось только применить его к форме. Это делается с помощью следующего кода:
SetWindowRgn(Handle,hsWindowRegion,true);
Вышеуказанной функции в качестве параметров нужно указать три вещи. Это:
1) дескриптор окна,
2) дескриптор применяемого региона и
3) указать будет ли перерисован регион (true - истина, false - ложь)
~Rand~ (2002-06-15 22:59:00) [2]Удалено модератором
777 (2002-06-15 22:57:00) [3]
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
var r:HRGN;
begin
r:=CreateRoundRectRgn(20,20,200,110,20,20);
SetWindowRgn(Handle, R, True);
end;
end.
Groove (2002-06-15 22:54:00) [4]~Rand~ © ==>это болезнь
777 ©===>не пашет =(
[Error] Unit1.pas(23): Undeclared identifier: "FormCreate"
[Error] Unit1.pas(27): Undeclared identifier: "Handle"
[Fatal Error] Project1.dpr(5): Could not compile used unit "Unit1.pas"
~Rand~ (2002-06-15 22:44:00) [5]Удалено модератором
~Rand~ (2002-06-15 22:43:00) [6]Удалено модератором
777 (2002-06-15 22:41:00) [7]оччень странно, я специально отсюда скопировал
фрагмент кода в новый проект - без проблем.
Groove (2002-06-15 22:38:00) [8]упс точнее
Expected "=" but "(" found
my english is BAD!! =)))
~Rand~ (2002-06-15 22:36:00) [9]Удалено модератором
Groove (2002-06-15 22:33:00) [10]пишет не найдено "=" или "(" что-то такое =)
777 (2002-06-15 22:28:00) [11]Всё работает.
~Rand~ (2002-06-15 22:25:00) [12]Удалено модератором
Groove (2002-06-15 22:22:00) [13]Что-то не работает!
777 (2002-06-15 21:46:00) [14]если конкретнее, то
procedure TForm1.FormCreate(Sender: TObject);
var r:HRGN;
begin
r:=CreateRoundRectRgn(20,20,200,110,20,20);
SetWindowRgn(Handle, R, True);
end;
777 (2002-06-15 21:07:00) [15]SetWindowRgn