Ты видел когда-нибудь заголовки необычного цвета и формы у различных прог? К примеру: DotMouse, Critical Defect, Speed Gear, SpyBuddy, TheefLE, etc. Не знаешь? Ну хоть кряки ты юзал? Да, да, я про эту штуку, которая болтается сверху :). Честно говоря, меня уже достал интерфейс, который предлагают нам Win 2k (98, 95), да и ХРеновый стиль порядком надоел. Иногда хочется чего-то своего, своего стиля, своих кнопок и своего остального. К счастью, у тебя есть Дельфи, который сегодня придёт к нам на помощь.
Открывай Delphi, стартуй новый проект и сразу сохранись. Теперь задай BorderStyle равным bsNone. Не буду объяснять, что надо бросать на форму и какие свойства менять, не маленький уже. Получившуюся у меня форму ты можешь лицезреть на скриншоте 1. Как видишь, я, не мудрствуя лукаво, вместо рисунков на батонах написал простые символы (можешь использовать шрифты типа Wingdings, Webdings, etc). Теперь пора покодить.
Дабл-кликни на батоне с крестиком и напиши:
Application.Terminate;
Здесь я указываю, что проге надобно бы уничтожиться :)). А вот обработчик кнопы с чёрточкой:
Application.Minimize;
А это команда к сворачиванию проги.
Теперь попробуй запустить приложение. "Окно появляется, кнопы пашут, чё такое?" - спросишь ты. А подвигай окном. То-то. При стиле без полоски не за что держаться, чтоб передвинуть окно. Поэтому ноги в руки, берём Листинг 1 и набиваем его в Private. Листинги 2, 3, 4 для событий панели OnMouseDown, OnMouseMove и, следовательно, для OnMouseUp. Не буду объяснять, как это всё работает, в конце концов, зачем существуют комменты в листингах? Да, кодинг окончен.
CoolTitle.Free
Сегодня ты написал хорошую штуку, с помощью которой можно преобразить прогу по своему вкусу. Уверен, что написанные тобою хакерские проги обязательно будут больше скачиваться с крутым дизайном. Сегодняшний пример можно переделать по своему вкусу, к примеру, перенести всё, кроме последней строчки из OnMouseUp в OnMouseMove, тогда окно будет перемещаться при двиганьи мышки. Или замени Panel на Image и загрузи картинку. Вместо обычных кнопок юзай SpeedButton"ы с Flat = true. Короче, экспериментируй и всё получится. (С) NightUFO и (С) RedDeath.
==========[Листинг 1]==========
XOld,
YOld,
LeftOld,
TopOld : Integer;
DCHandle : HDC;
MoveRect : TRect;
ModeDrag : Boolean;
==========[Листинг 1]==========
==========[Листинг 2]==========
if Button = mbLeft then //Если кнопа левая...
begin
DCHandle := GetDC(0); //то получаю память для DC
XOld := X; //запоминаю
YOld := Y; //координаты
LeftOld := X;
TopOld := Y;
MoveRect := BoundsRect; //Присваиваю MoveRect"у
DrawFocusRect(DCHandle, MoveRect); //Рисую рамку
ModeDrag := True; //и включаю режим двиганья ;)
end;
==========[Листинг 2]==========
==========[Листинг 3]==========
if ModeDrag then //Если режим двиганья включён
begin
XOld := X; //то записываю
YOld := Y; //координаты окна
DrawFocusRect(DCHandle, MoveRect); //и стираю рамку
//Ниже присваивание MoveRect"у координат
MoveRect := Rect(Left + XOld - LeftOld,
Top + YOld - TopOld, Left + Width + XOld - LeftOld,
Top + Height + YOld - TopOld);
DrawFocusRect(DCHandle, MoveRect); //И опять рисую рамку
end;
==========[Листинг 3]==========
==========[Листинг 4]==========
if Button = mbLeft //Если кнопа левая...
then
begin
DrawFocusRect(DCHandle, MoveRect); //то стираю рамку
Left := Left + X - LeftOld; //устанавливаю координаты
Top := Top + Y - TopOld;
ReleaseDC(0, DCHandle); //и освобождаю память для DC
end;
DrawFocusRect(DCHandle, MoveRect); //Можно закомментировать
ModeDrag := false; //Выключаю режим двиганья
==========[Листинг 4]==========