Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 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.

Приложение:
  1.  
  2. rgn := CreateRoundRectRgn(0, -20, ClientWidth, ClientHeight, 20, 20);
  3.  
  4. rgn := CreateRoundRectRgn(0, 0, ClientWidth, ClientHeight+20, 20, 20);
  5.  


Ответ отправил: Матвеев Игорь Владимирович (статус: Студент)
Время отправки: 25 июля 2007, 03:37
Оценка за ответ: 5


Мини-форум вопроса

Всего сообщений: 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;

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:43
Выполнено за 0.03 сек.