Графика окон и их программирование
В этой статье описывается создание нестандартных окон.
Для этого нам понадобится Delphi (желательно Delphi 7 или RAD Studio).
Все графические объекты созданы в Photoshop 11.
Для начала уберём стандартный заголовок у окна:
Form1>Border Style>bsNone
и
Form1>Position>poScreenCenter
1.Делаем графический заголовок.
В виде заголовка у нас будет TImage.
Поставьте его на форму и присвойте ему имя Title (Image1>Name>Title).
Загрузите в него изображение (можно самое простое нарисовать в пеинте, но если хочется чего то более стильного делаем в фотошопе).
Установите в свойстве Align значение alTop.
И Height (Высоту) желательно 25, или как захотите только не слишком большую.
Ставим свойство Stretch: True
Теперь программируем заголовок:
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
ReleaseCapture;
Perform(WM_SYSCOMMAND,$F012,0);
end;
Теперь окно можно (таскать) за наш заголовок.
2. Делаем рамку
Кидаем на форму три компонента TImage и присваиваем им имена:
Image1>Name>Left
Image2>Name>Right
Image3>Name>Bottom
Имагу Left ставим свойство Align>alLeft и Cursor: crSizeWE
Имагу Right ставим свойство Align>alRight и Cursor: crSizeWE
Имагу Bottom ставим свойство Align>alBottom и Cursor: crSizeNS
И у всех них свойство Stretch: True
Делаем ширину у имагов Left и Right 5,
а высоту у Bottom тоже 5.
Загружаем в них изображения.
Программируем:
procedure TForm1.BottomMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
ReleaseCapture;
Perform(WM_SYSCOMMAND,$F006,0);
end;
procedure TForm1.LeftMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
ReleaseCapture;
Perform(WM_SYSCOMMAND,$F001,0);
end;
procedure TForm1.RightMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
ReleaseCapture;
Perform(WM_SYSCOMMAND,$F002,0);
end;
Теперь дело остаётся за малым: кнопка закрыть, свернуть и цвет фона окна.
Поставьте на заголовок два компонента TImage и загрузите в них изображения. Меняем их названия:
Image1>Name>Close1
Image1>Name>Minimize
Программируем:
procedure TForm1.Close1Click(Sender: TObject);
begin
Close;
end;
procedure TForm1.MinimizeClick(Sender: TObject);
begin
Application.Minimize;
end;
Программируем форму:
procedure btnPos;
begin
Form1.Close1.Top := 0;
Form1.Close1.Left := Form1.Width-Form1.Close1.Width;
Form1.Minimize.Top := 0;
Form1.Minimize.Left := Form1.Width-Form1.Close1.Width-Form1.Minimize.Width;
end;
procedure TForm1.FormResize(Sender: TObject);
begin
btnPos;
end;
procedure TForm1.FormShow(Sender: TObject);
begin
Form1.DoubleBuffered := True;
Form1.AlphaBlend := true; // Разрешаем прозрачность
Form1.AlphaBlendValue := 230; // Устанавливаем прозрачность
end;
Можно ещё добавить надпись на заголовке.
Всё сделано. Вскоре будет продолжение.
Если нашли опечатку, прошу сообщить.
А я все окна на С++ или Java делаю-вроде удобнее!
Я точно по такому же принципу все делаю, только в самом начале я ставлю полностью прозрачную форму, кидаю имейдж на фон, а потом все остальное, программирую смещение кнопок при нажатии, и т.д.
отлично. спасибо за статью
как раз столкнулся с проблемой, которую удалось решить с помощью этой статьи
Rostislava, это кто к чему привык. Я например на С++ никак перейти не могу. Все таки больше 10 лет не Дельфи сижу. Так что…
Попробую сделать так, как вы описываете. Надеюсь, получится…
на С++ или Java не всегда можно так как хочется
аригато =) будем юзать
А я все окна на С++ или Java делаю-вроде удобнее!
+1
Спасибо! Вот озадачили, будем разбираться.
😈 это полный сабж. Такими вещами уже даааавно не занимаются. Сам имайдж жутко жрет ресурсы и сильно «полнит» программу. Можно в ресурсы пихнуть изображения. и работать с памятью. А так есть wpf для Визуал Студио.
На мой взгляд мало расказываеться про функцию Perform и передаваемые ей параметры
Perform(WM_SYSCOMMAND,$F002,0);
Как всегда Автор на высоте, все разжевал, осталось только в рот положить)
окна на яве делать гораздо удобнее 🙂
Классненько, как раз займусь своей дипломкой ))) Оформление не должно подкачать )))
Премного благодарна )))
А в MS VS заработает?? ❓
На CodeGear сталкивался с такой траблой, что неработала прозрачность у png…помоему вообще png не грузило. сполз на другую версию , заработало…но осталась проблема с белой каймой вокруг нестандартной формы.
Я сколько пользовался Делфи но ни разу не менял форму. А что прикольно получилось. Да ставишь четыре картинки и твоя форма привлекательней.
Мой блог (Перейти)