Создание собственного скина. Окна "неправильной" формы без единой строчки кода!
Итак начнём с конца =). Я покажу что у нас получиться, думаю тебя зайнтригует =).
Для примера я быстренько слепил картинку с белым фоном, на рисунке виден результат, причём
скин имеет именно такую форму, которую ты ей придал на картинке. Самое интересное, что не нужно
писать не единой строчки кода! Да-да! Итак, приступим, наши инструменты - либо cpp builder либо delphi.
Если ты уже вытащил сие из своих широких штанин, продолжим. Бери свой пикчер (напомню он должен быть *.bmp)
и начинаем, для начала урони на форму компонент TImage, и загрузи в него свой битмап. Готово? Тогда устанавливай
в свойствах TImage'a свойство autosize=true и координаты left и top по нулю. Далее выдели
форму, и в её свойствах устанавливай autosize=true; borderstyle=bsNone; Теперь форма должна плотно "облегать" твою картинку
без промежутков. Далее, самое интересное, в свойствах той же формы установи TransparentColor=true а TransparentColorValue=цвет фона твоей
картинки, то есть тот цвет, который НЕ должен отображаться у тебя на форме, в нашем случае TransparentColorValue=clWhite.
Всё! Теперь компиль проект и наслаждайся! Несколько вопросов, первый - убийственный , мне задаёт почти каждый, после прочтения статьи.
Первый вопрос - я взял jpeg, сконвертнул в bmp а фон нифига не исчез, как же так! А вот так, машина это вам не человек, что для тебя белый -
то для неё ещё тысяча оттенков белого! При конвертации в JPEG краски "искажаются", т.е. код цвета начинает отклоняться, а это недопустимо в нашем
случае, цветовой код фона картинки должен совпасть с цветовым кодом выбранным в TransparentColorValue, тогда будет всё ок, именно по этому я и
советую использовать битмап! И второй вопрос, из области extended, это, как
сделать так, чтобы можно было перетаскивать окно.
Создай обработчик в компоненте TImage - onMouseDown
далее, что у тебя должно получиться(для дельфи, для cpp builder всё делается аналогично,
только изменяется синтаксис) :
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
ReleaseCapture;
Perform( WM_SYSCOMMAND, $F012, 0 );
end;
Вот и всё! Теперь компиль, и всё у тебя будет работать, как говориться drag'n'drop'ово.
Исходник, с уже скомпиленной программой и исходным битмапом.
SLAyer
Другие статьи
По всем вопросам и предложениям по сайту пишите на info@comp-info.ru  
|