Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 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
4-1089814334
Dmitry
2004-07-14 18:12
2004.08.29
Пароль в dcomcnfg.exe


1-1092245844
mouse_web
2004-08-11 21:37
2004.08.29
Как прервать работу процедуры?


14-1091834611
Piter
2004-08-07 03:23
2004.08.29
Сайт Анатолия все популярнее :)


6-1088613132
4ebyrab
2004-06-30 20:32
2004.08.29
Webbrowser??? Как нажать на банер???


8-1086771174
Юля
2004-06-09 12:52
2004.08.29
*.cdr , *.pdf - изображения в Image





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский