Форум: "Потрепаться";
Текущий архив: 2004.08.29;
Скачать: [xml.tar.bz2];
Вниз
Все кто когда-либо делал, делает или будет делать скины!!! Найти похожие ветки
← →
Кириешки © (2004-08-11 04:02) [0]Бродя по инету я нашел компонент который делает регионы по битмапу. Очень полезная вещь! Для меня решились все проблемы с высчитыванием регионов вручную! Теперь можно делать окно любой формы просто нарисовав в паинте битмап нужного вида. Проблема со скинами для меня решилась полностью!! Работает быстро.
Вот сам компонент
unit SkinImage;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics,
Controls, Forms, Dialogs, ExtCtrls;
type
TSkinImage = class(TImage)
private
protected
{ Protected declarations }
function BitmapToRegion(bmp: TBitmap) : dword;
procedure OwnerShow(Sender : TObject);
public
constructor Create(AOwner : TComponent); override;
published
{ Published declarations }
end;
procedure Register;
var
Ready : Boolean;
implementation
procedure Register;
begin
RegisterComponents("Skins", [TSkinImage]);
// Все скинованные компоненты у нас будут в закладке Skins
end;
{ TSkinImage }
constructor TSkinImage.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
if NOT (csDesigning in ComponentState) then
with TForm(AOwner) do
begin
BorderStyle := bsNone;
Self.Top := 0;
Self.Left := 0;
OnShow := OwnerShow;
end;
end;
function TSkinImage.BitmapToRegion(bmp: TBitmap) : dword;
var ix,iy : integer; // переменные циклов
tc : TColor; // модификатор цвета прозрачности
b1 : boolean; // идёт просмотр непрозрачных пикселей
c1 : cardinal; // вспомогательный регион
i1 : integer; // первая позиция реального пикселя
begin
Result := 0;
i1 := 0;
// устанавливаем модификатор прозрачности
tc := bmp.transparentColor and $FFFFFF;
with bmp.canvas do
// сканируем все линии
for iy := 0 to bmp.height - 1 do
begin
b1 := False;
// сканируем пиксели в линии
for ix:=0 to bmp.Width - 1 do
// если последний или первый пиксель
if (pixels[ix, iy] and $FFFFFF <> tc) <> b1 then begin
// последний, добавляем регион
if b1 then begin
c1:=CreateRectRgn(i1,iy,ix,iy+1);
if result<>0 then
begin
// это не первый регион
CombineRgn(Result, Result, c1, RGN_OR);
DeleteObject(c1);
// создаём первый регион
end
else
Result := c1;
end else i1 := ix;
// меняем режим просмотра пикселей
b1:=not b1;
end;
// последний реальный пиксель?
if b1 then begin
c1:=CreateRectRgn(i1, iy, bmp.width-1, iy+1);
if (Result <> 0) then
begin
CombineRgn(Result, Result, c1, RGN_OR);
DeleteObject(c1);
end
else
Result := c1;
end;
end;
end;
procedure TSkinImage.OwnerShow(Sender: TObject);
var
Region : HRGN;
begin
if NOT Ready then
begin
Ready := True;
Region := BitmapToRegion(Picture.Bitmap);
// создаём регион окна по изображению
SetWindowRgn(TForm(Owner).Handle, Region, True);
// устанавливаем его
DeleteObject(Region);
end;
end;
initialization
Ready := False;
end.
если охото почитать не только о нем, то вот ссылка
http://erased.info/articles/3056.html
← →
Думкин © (2004-08-11 05:59) [1]И к чему это?
← →
Skyle © (2004-08-11 06:34) [2]
> И к чему это?
Сказали же, нету больше проблемы со скинами, нету!
И не будет! А судя по
> если охото почитать не только о нем, то вот ссылка
то, возможно, проблем не будет скоро вообще никаких...;-)
P.S. Что-то тебя на философию тянет..;-) "Зачем компонент?", "Зачем множественное наследование в Дельфях?" ;-)
← →
Думкин © (2004-08-11 06:49) [3]> [2] Skyle © (11.08.04 06:34)
:)) Да, нет не компонент. :)
Я в сове время с этими скинами до блевоитны уработался. Нормального так и не видел. Сборище глюков или очнь слабые возможности.
BorisMor - не даст соврать.
← →
sniknik © (2004-08-11 08:22) [4]да уж проблем нет, никаких... их переименовали в заметочки.
- и баги фичей назовем! ;о)))
это из ссылки, цитата.
Далее идёт текст модуля SkinImage, а в следующей статье я расскажу о том, как расширить нашу компоненту в функциональном плане. И ещё маленькая заметочка - TSkinImage автоматически убирает рамку окна (:
← →
Кириешки © (2004-08-11 09:50) [5]Не нравится - не еште! :)
← →
Григорьев Антон © (2004-08-11 10:55) [6]А можно вопрос? Вы FormRgn видели? Если да, то чем он вам не понравился? Мне как автору это интересно. Если вдруг не видели, то ссылка - http://www.delphikingdom.com/asp/viewitem.asp?catalogid=83
← →
rOOse © (2004-08-11 11:04) [7]А есть еще DynamicSkinForm классная вещь, кажется на www.delphi.icm.edu.pl
← →
Ega23 © (2004-08-11 11:07) [8]Ничего вы не понимаете в кобасных обрезках! AvtoShema - вот лучшая программа. Глядишь, Дима скоро поддержку скинов в неё включит.
← →
Agent13 © (2004-08-11 11:08) [9]
> Ega23 © (11.08.04 11:07) [8]
> Ничего вы не понимаете в кобасных обрезках! AvtoShema -
> вот лучшая программа. Глядишь, Дима скоро поддержку скинов
> в неё включит.
Кстати что-то давно новых версий не было. Видать супер-релиз готовится.
← →
Думкин © (2004-08-11 11:10) [10]> ] Григорьев Антон © (11.08.04 10:55)
Я под скинами понимаю, что-то уровня KsDev - но там основное время уходило на отлов глюков.
← →
rOOse © (2004-08-11 11:10) [11]
> Ega23 © (11.08.04 11:07)
> Ничего вы не понимаете в кобасных обрезках! AvtoShema -
> вот лучшая программа. Глядишь, Дима скоро поддержку скинов
> в неё включит.
Что за AvtoShema?
← →
Prohodil Mimo © (2004-08-11 11:24) [12][11] rOOse © Что за AvtoShema?
Пора в факи добавить :о)
← →
Ega23 © (2004-08-11 11:27) [13]супер-релиз
Скорее "Супер-гипер-мега-релиз" :о)
← →
Cosinus © (2004-08-11 12:51) [14]У меня есть сильное подозрение, что если в поисковике задать ""Супер-гипер-мега-пупер прога", то.... Ну вы поняли, да? ;) Причем в основной своей массе это будут слова не автора. Видимо вам ОЧЕНЬ приглянулась эта программа.
← →
Ega23 © (2004-08-11 12:58) [15]AvtoShema достаточно набрать. :о)
← →
Cosinus © (2004-08-11 13:01) [16]>>Ega23 © (11.08.04 12:58) [15]
:)
← →
Кириешки © (2004-08-11 13:18) [17]Григорьев Антон © (11.08.04 10:55) [6]
Он у меня на D6 не устанавливается.
Вот и пришлось руками регионы выковыривать. Выковыривал около полутора года. Научился настолько что проблем с этим небыло вообще. Мог построить самый заковыристый регион. Потом надоело, решил написать что-то вроде FormRgn(в виде компонента). Написал. Работал очень медленно из за попиксельной обработки картинки. Переписывать с обработкой типа ScanLine или PByteArray было лень. Я вообще не люблю сам компоненты писать, пишу только в том случае когда очень надо, или готового не найти.
Несколько дней назад стал лазить по инету в поисках чего -нибудь подходящего под мои запросы о регионах, и наткнулся на этот компонент.
Вот вроде бы и все. :)
ЗЫ.Единственное что я сделал с этим компонентом - так это основную функцию поместил в Dll, а вызывающую функцию поместил в программу с небольшим исправлением. Исправление сводилось к тому что при вызове модального окна по ShowModal появлялось окно не разбитое по регионом, поэтому вызывающую процедуру помещал в модальное окно и вызывал ее оттуда (загружая картинку в TBitmap а не в Image, а по OnPaint рисовал ее на канвасе формы).
Теперь вот думаю как сделать так, чтобы у программы изначально были схемы шкурок (не подлежащие изменению пользователем), а так же чтобы пользователь мог использовать свои собственные шкурки помещенные в папку "Skins".
Может подскажете как реализовать можно? ;))
← →
Cosinus © (2004-08-11 13:24) [18]"...Теперь вот думаю как сделать так, чтобы у программы изначально были схемы шкурок (не подлежащие изменению пользователем)..."
Засунь их в ЕХЕ-шник...
← →
Кириешки © (2004-08-11 13:44) [19]Cosinus © (11.08.04 13:24) [18]
"Засунь их в ЕХЕ-шник..."
От этого он у меня так распухнет в талии что будет весить мега три. У меня уже есть dll-ка с файлом ресурсов в котором находятся две схемы шкурок.
Я наверное не совсем корректно объяснил суть вопроса.
Переобъясню : Я не могу додуматься как сделать так, чтобы программа могла использовать и зарезервированые шкурки (из dll), и те, которые ей предоставит пользователь в виде обыкновенных bmp-шек. :)
Есть идеи?
← →
wicked © (2004-08-11 13:52) [20]как мало человеку для щястья надо - шоб регионы по битмапу были...
заметил, что если понадобились скиновые компоненты, то лучше самопальных всё равно нету - то идеология уже готовых не подходит, то цена, то качество... а свои - и в меру глючные, и достаточно функциональные... ;)
← →
Кириешки © (2004-08-11 14:08) [21]wicked © (11.08.04 13:52) [20]
Так и есть. ;))
← →
Думкин © (2004-08-11 15:11) [22]Регионы -это не скины. Регилны - это одна функция, реализумая в тиечении одного дня. Скины - кака и говорил, нормальной реализации, пока не видел. Сам пытал, качество от плохого к очень плохому. в отличии от ХР(ну оно и понятно).
← →
Думкин © (2004-08-11 15:12) [23]Регионы -это не скины. Регионы - это одна функция, реализуемая в течении одного дня. Скины - как и говорил, нормальной реализации, пока не видел. Сам пытал, качество от плохого к очень плохому. в отличии от ХР(ну оно и понятно).
← →
Кириешки © (2004-08-11 15:31) [24]Думкин © (11.08.04 15:12) [23]
Не знаю, не знаю - у меня вот все симпатично получается, почти как у винампа. Мне вот только дизайнерский склад ума бы еще, тогда совсем великолепно будет.
← →
Думкин © (2004-08-11 15:36) [25]> [24] Кириешки © (11.08.04 15:31)
1. О чем речь. О региолнах или СКИНАХ?
2. Уровень сложности какой?
3. На скольких системах и сколько тестеров ее юзали.
4. Это действительно коммерческий продукт?
← →
BorisMor © (2004-08-11 15:50) [26]
Думкин © (11.08.04 15:11) [22]
Сам пытал, качество от плохого к очень плохому. в отличии от ХР(ну оно и понятно).
Кстати, у ThemeEngine есть возможность подкрутить стили от XP к своим программам. Т.е. даже в 98 будет программа выгладить как будто ты запустил под XP.
Но тех возможностей которые дают стили дизайнерам мало :(
← →
Кириешки © (2004-08-11 15:51) [27]Думкин © (11.08.04 15:36) [25]
1)Речь о скинах получаемых регионами
2)Сложность скинов? Если да, то скины нарисовал навороченые.
3)Проверено пока на прех машинах (моей, и двух соседних).
У меня WinMe, у админа Win2k и у соседа тоже WinMe
4)Продукт действительно коммерческий. Я вот его когда доделаю и
сдам - сюда выкину. Посмотрите что получилось.
← →
Кириешки © (2004-08-11 17:04) [28]
Я не могу додуматься как сделать так, чтобы программа могла использовать и зарезервированые шкурки (из dll), и те, которые ей предоставит пользователь в виде обыкновенных bmp-шек.
Так что, никто с этим никогда не сталкивался? :)
Как реализовать "совмещенное владение" скинами?
Страницы: 1 вся ветка
Форум: "Потрепаться";
Текущий архив: 2004.08.29;
Скачать: [xml.tar.bz2];
Память: 0.53 MB
Время: 0.038 c