|
Вопрос # 789/ вопрос открыт / |
|
Здравствуйте уважаемые эксперты.
У меня к вам такой вопрос?
Снизу написан код, написав который
края у формы будут закруглённые.
procedure TForm1.FormCreate(Sender: TObject);
var
rgn: HRGN;
begin
Form1.Borderstyle := bsNone;
rgn := CreateRoundRectRgn(0, 0, ClientWidth, ClientHeight, 20, 20);
SetWindowRgn(Handle, rgn, True);
end;
Можно сделать так чтобы края были закруглённые
только сверху, или только снизу (но лучше сверху).
И если можно ещё:
Я сделал свою кнопку из двух Image.
Эта кнопка выполняет функцию свернуть
(Application.Minimize), на форме она в правом
верхнем углу. Моя форма 200х200 и загружается вверху.
Когда я сворачиваю форму, она ложится на TaksBar, а
нажав на форму чтобы развернуть, мышь у меня сидит
на рабочем столе и поэтому моя кнопочка в нажатом
состоянии до тех пор, пока я не наведу мышкой на форму,
чтобы отключить Image2. Как сделать так чтобы
и рабочий стол отключал Image2.
Пример:
команда форме
Image1.Visible := true;
Image2.Visible := false;
Команда Image1
Image2.Visible := true;
Image1.Visible := false;
Но если мышь моя не на форме то кто отключит
Image2 и включит Image1, только рабочий стол.
Помогите если можно.
Заранее благодарен.
 |
Вопрос задал: Толков Геннадий Викторович (статус: Посетитель)
Вопрос отправлен: 25 июля 2007, 00:42
Состояние вопроса: открыт, ответов: 1.
|
Ответ #1. Отвечает эксперт: Матвеев Игорь Владимирович
Здравствуйте, Толков Геннадий Викторович!
1. Функция CreateRoundRectRgn создает регион скругленного прямоугольника по заданному прямоугольнику и радиусу скругления, чтобы сделать скругление только снизу можно \'поднять\' верхнюю границу, чтобы оставить скругление только сверху - опустить нижнюю. Аналогично и с боковыми сторонами.
2. Переключайте обратно Image на события сворачивания / разворачивания, например на событие WM_WINDOWPOSCHANGED.
Приложение: Переключить в обычный режим-
- rgn := CreateRoundRectRgn(0, -20, ClientWidth, ClientHeight, 20, 20);
-
- rgn := CreateRoundRectRgn(0, 0, ClientWidth, ClientHeight+20, 20, 20);
-
Мини-форум вопроса
Всего сообщений: 2; последнее сообщение — 27 июля 2007, 01:08; участников в обсуждении: 2.
|
Толков Геннадий Викторович (статус: Посетитель), 26 июля 2007, 23:05 [#1]:
Здравствуйте уважаемые эксперты.
На счёт второго ответа вопроса N 789 я не сильно понял. Можно поподробнее. Заранее благодарен.
|
|
Матвеев Игорь Владимирович (статус: Студент), 27 июля 2007, 01:08 [#2]:
Обрабатывайте одно из событий, которые приходят при сворачивании/разворачивании формы, например WM_WINDOWPOSCHANGED или WM_ACTIVATE или любое другое (можно посмотреть с помощью MS Spy++):
type
TForm1 = class(TForm)
Label1: TLabel;
private
{ Private declarations }
procedure WMActivate(var Message: TMessage); message WM_ACTIVATE;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.WMActivate(var Message: TMessage);
begin
if Message.WParam = 1 then
// Окно разворачивается
Image1.Visible := False;
Image2.Visible := True;
end;
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|