Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.08.29;
Скачать: CL | DM;

Вниз

Все кто когда-либо делал, делает или будет делать скины!!!   Найти похожие ветки 

 
Кириешки ©   (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;
Скачать: CL | DM;

Наверх




Память: 0.55 MB
Время: 0.023 c
14-1091929218
Logon
2004-08-08 05:40
2004.08.29
Что представляют из себя Log-On скрипты NT? (исполняемый файл?)


1-1092318620
ilya@scsc.ru
2004-08-12 17:50
2004.08.29
Eсть ли компоненты для генерации баркодов в различных кодировках?


3-1091679278
korvin
2004-08-05 08:14
2004.08.29
Как создать файл БД на лету


3-1091474894
Dimedrol
2004-08-02 23:28
2004.08.29
Delphi -> ADO -> MSSQL


8-1086686980
Orion2
2004-06-08 13:29
2004.08.29
Создание тени под текстом