» Графика окон и их программирование Borland Delphi. windows. . Блог программистов


Блог программистов




200927 Авг

Графика окон и их программирование

В этой статье описывается создание нестандартных окон.
Для этого нам понадобится 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;

Можно ещё добавить надпись на заголовке.

Всё сделано. Вскоре будет продолжение.

Скачать исходник

Если нашли опечатку, прошу сообщить.

Комментарии

  1. Сентябрь 4th, 2009 | 11:43

    А я все окна на С++ или Java делаю-вроде удобнее!

  2. Сентябрь 5th, 2009 | 00:14

    Я точно по такому же принципу все делаю, только в самом начале я ставлю полностью прозрачную форму, кидаю имейдж на фон, а потом все остальное, программирую смещение кнопок при нажатии, и т.д.

  3. Сентябрь 7th, 2009 | 21:57

    отлично. спасибо за статью
    как раз столкнулся с проблемой, которую удалось решить с помощью этой статьи

  4. Сентябрь 8th, 2009 | 14:41

    Rostislava, это кто к чему привык. Я например на С++ никак перейти не могу. Все таки больше 10 лет не Дельфи сижу. Так что…

  5. Mika
    Сентябрь 24th, 2009 | 21:38

    Попробую сделать так, как вы описываете. Надеюсь, получится…

  6. Октябрь 7th, 2009 | 15:53

    на С++ или Java не всегда можно так как хочется

  7. Mifka
    Октябрь 13th, 2009 | 08:34

    аригато =) будем юзать

  8. Октябрь 22nd, 2009 | 15:00

    А я все окна на С++ или Java делаю-вроде удобнее!

    +1

  9. Октябрь 23rd, 2009 | 14:34

    Спасибо! Вот озадачили, будем разбираться.

  10. Октябрь 26th, 2009 | 12:24

    😈 это полный сабж. Такими вещами уже даааавно не занимаются. Сам имайдж жутко жрет ресурсы и сильно «полнит» программу. Можно в ресурсы пихнуть изображения. и работать с памятью. А так есть wpf для Визуал Студио.

  11. Ноябрь 15th, 2009 | 20:04

    На мой взгляд мало расказываеться про функцию Perform и передаваемые ей параметры
    Perform(WM_SYSCOMMAND,$F002,0);

  12. Ноябрь 23rd, 2009 | 19:21

    Как всегда Автор на высоте, все разжевал, осталось только в рот положить)

  13. Декабрь 25th, 2009 | 12:19

    окна на яве делать гораздо удобнее 🙂

  14. Cheshyrskaya
    Апрель 25th, 2010 | 16:14

    Классненько, как раз займусь своей дипломкой ))) Оформление не должно подкачать )))
    Премного благодарна )))

  15. Flash Killer
    Май 14th, 2010 | 13:57

    А в MS VS заработает?? ❓

  16. Декабрь 9th, 2010 | 20:26

    На CodeGear сталкивался с такой траблой, что неработала прозрачность у png…помоему вообще png не грузило. сполз на другую версию , заработало…но осталась проблема с белой каймой вокруг нестандартной формы.

  17. Январь 4th, 2011 | 01:56

    Я сколько пользовался Делфи но ни разу не менял форму. А что прикольно получилось. Да ставишь четыре картинки и твоя форма привлекательней.
    Мой блог (Перейти)