Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "KOL";
Текущий архив: 2007.09.16;
Скачать: [xml.tar.bz2];

Вниз

KOL и темы XP   Найти похожие ветки 

 
Turbid ©   (2006-12-12 02:15) [0]

Если использовать темы XP, то при создании объектов на TabControl происходит бяка - группа нес тем цветом, кнопки вообще не видать:


MainWnd := NewForm(Applet, "Project");
MainWnd.Style := WS_CAPTION or WS_SYSMENU;
MainWnd.Font.FontName := "MS Shell Dlg";
MainWnd.Font.FontHeight := -11;

TabCtrl := NewTabControl(MainWnd, ["Hello World"],
                                   [], nil, 1).Shift(8, 8).Size(353, 353);

DevGroup := NewGroupbox(TabCtrl.Pages[0], "General").Size(100, 100).Shift(8, 8);
TestBtn := NewButton(TabCtrl.Pages[0], "&Button").Size(75, 25).Shift(150, 150);

MainWnd.Size(377, 432);
MainWnd.CenterOnParent;
MainWnd.Visible := True;

Run(MainWnd);


Что я делаю не так? Манифест из KOLXPMan...


 
AndreyRus   (2006-12-12 03:20) [1]

Нормальная отрисовка табов при использовании тем OS всегда было проблемой. KOL здесь по большому счету ни причем. IMHO, хотя  мог бы исправлять этот баг. Сдается мне, что здесь дело во флагах создаваемого окна, IMHO :) Это не добавит много кода.


 
Gr   (2006-12-12 05:32) [2]

Все бы ничего да кнопка в черной рамке...

TabCtrl := NewTabControl(MainWnd, ["Hello World"], [], nil, 1).Shift(8, 8).Size(353, 353);
TabCtrl.Pages[0].Transparent := true;

DevGroup := NewGroupbox(TabCtrl.Pages[0].Parent, "General").Shift(8,26).SetSize(300,300);
DevGroup.Transparent := true;

TestBtn := NewButton(TabCtrl.Pages[0],"&Button").SetPosition(60,60).SetSize(75,25);
TestBtn.Transparent := true;


 
Turbid ©   (2006-12-12 08:51) [3]

>>да кнопка в черной рамке...
И вид уже непотребный.

Обидно то, что на vcl все красиво...


 
Turbid ©   (2006-12-12 14:47) [4]

Кстати у меня ошибка, надо:

TestBtn := NewButton(DevGroup, "&Butt... Но это ситуации не меняет.


 
Psychedelic ©   (2006-12-12 15:09) [5]

Используйте нестандартный Tab. В компонентах лежит.  Мне также не нравитcя отрисовка Taba . Вот потому решил сделать покрасивее.
На днях закончу.


 
Turbid ©   (2006-12-13 23:26) [6]

Обращаюсь к автору Владимиру К. и другим гуру: возможно ли исправить сей досадный глюк?


 
MTsv DN ©   (2006-12-14 12:31) [7]

> Нормальная отрисовка табов при использовании тем OS всегда
> было проблемой.

Причем тут Таб. Turbid © говорит "> группа нес тем цветом, кнопки вообще не видать". Скажу по-секрету, ее и без Тем "не видать", т.к. GroupBox поверх лежит!!!

> Обращаюсь к автору Владимиру К. и другим гуру: возможно ли исправить сей досадный глюк?
1. Например, вот так:
DevGroup := NewGroupbox(TabCtrl.Pages[0], "General").Size(100, 100).Shift(8, 8);
TestBtn := NewButton(TabCtrl.Pages[0], "&Button").Size(75, 25).Shift(150, 150);
TestBtn.BringToFront;

Кстати, если строчку не добавить, а прозрачность установить, то кнопка видна будет, а вот нажать на нее не сможете...

2. Или так:
DevGroup := NewGroupbox(TabCtrl.Pages[0], "General").Size(100, 100).Shift(8, 8);
TestBtn := NewButton(DevGroup, "&Button").Size(75, 25).Shift(150, 150);


3. Использовать не Shift, а SetPosition. Shift действительно "косячит".

4.> Все бы ничего да кнопка в черной рамке...
Попробуйте, Color установить в: Color := Color + 1;


 
Turbid ©   (2006-12-14 23:26) [8]

2MainWnd, Я уже писал в [4] что я накосячил с кнопкой. Вопрос про цвет таба остается открытым (под темой Luna он должен быть белым).


 
Turbid ©   (2006-12-14 23:26) [9]

2MainWnd, Я уже писал в [4] что накосячил с кнопкой. Вопрос про цвет таба остается открытым (под темой Luna он должен быть белым).


 
Turbid ©   (2006-12-18 22:02) [10]

Перебирал все варианты TabCtrl.Pages[0].Color := clXXX, никто не подошел. Можно сделать clMenu (белый на XP, серый на классике), но правильный цвет все равно должен быть немного грязновато-белый  (хорошо видно в оливковом стиле XP).

А вот если сделать так:

TabCtrl.Pages[0].Style := CCM_SETCOLORSCHEME

то таб становится своим цветом, но приложение зависает при переключении с других табов на первый. В SDK про CCM_SETCOLORSCHEME ничего не нашел - откопал ее опытным путем.


 
GR   (2006-12-21 23:46) [11]

Такого же эффекта получишь:

TabCtrl.Pages[0].Style := 0


 
Trible   (2006-12-22 00:18) [12]

Satabs попробуй, мне они даже больше чем xp табы понравились.


 
GR   (2006-12-22 00:29) [13]

CCM_SETCOLORSCHEME - не является стилем,
взгляни на отрисовку: TCustomGroupBox.Paint...


 
Dimaxx ©   (2006-12-24 12:52) [14]

В КОЛ каждая вкладка закрывается стандартной панелью. Вот на нее и "складываются" компоненты. В обычном режиме все нормально, а с темами трабла. Давно думал - зачем, но так и не дошли руки Владимиру вопрос задать. Пробовал ставить панель прозрачной - норм, но не работает прозрачность у компонентов, хоть Transparent стоит True.


 
Vladimir Kladov   (2006-12-24 15:37) [15]

Считайте, что задали. Посмотрите код TC_Insert. Если панель не создавать, то нужен какой-то хитрый механизм создания контрола, который вместо того, чтобы создавать окно обычным способом, использовал Handle закладки. И это еще можно было бы провернуть, если бы у каждой закладки и впрямь был бы такой Handle. Но его нет :(


 
dimaxx ©   (2006-12-27 02:31) [16]

Как нет? Хм, тогда встречный вопрос: а VCL ведь как-то делает это. И причем оч. успешно - под темами ТС отображается нормально и контролы на вкладках не глючат...

Если я не ошибаюсь, у любого контрола есть хэндл. И, думаю, вкладка ТС не исключение - я не смотрел еще код VCL"а, но думаю ответ должен быть там. Правда разбирать и анализировать этот код долго. Надо будет поковыряться на досуге (если он будет).


 
Vladimir Kladov   (2006-12-27 18:05) [17]

Нету, нету. Все проще: когда родителем нового окна делается окно TabControl"а, его фактическим родителем становится текущая вкладка. Нам же для сохранения общности вызова NewXXXX( parent: PControl; .... нужен такой вот Parent, и неважно, есть у него хэндл или нет, но он должен обеспечить правильную прилинковку к нужной вкладке таб-контрола. Я потому и решил, что простейший способ - сделать промежуточную панель. Кстати, еще до того, как микрософт решила испортить жизнь разработчиков своими кривыми темами. И без них-то все было очень даже ништяк.


 
GR   (2006-12-27 22:45) [18]

...взгляни сразу на отрисовку TabSheet, а именно на TTabSheet.WMNCPaint.
Все пути ведут сначало в Themes.pas -> UxTheme.pas -> themelib = "uxtheme.dll"; От туда как раз и эта процедура DrawParentBackground и т.п.

Вот попробовал..., процедура рисования для  TabCtrl.Pages[0]:
//сразу пример привел
program TEST;
uses
 kol,Messages,
 Windows,Themes;
{$R WindowsXP.res}
var MainWnd,TabCtrl,TestBtn: pControl;
procedure Paint(  Dummy: Pointer; Sender: PControl );
 var DC:HDC;
   DrawRect: TRect;
   Details: TThemedElementDetails;
begin
with ThemeServices do
 begin
 DC := Sender.Canvas.Handle{(Form1.Handle)};
   try
     Details := GetElementDetails(ttBody);
     DrawParentBackground(Sender.Handle, DC, @Details, TRUE);
   finally
     ReleaseDC(Sender.Handle, DC);
   end;
 end;
end;
begin
 MainWnd := NewForm(Applet, "Project");
 MainWnd.Font.FontName := "MS Shell Dlg";
 MainWnd.Font.FontHeight := -11;
 TabCtrl := NewTabControl(MainWnd, ["Hello World", "Free"],
                                  [], nil, 1).Shift(10, 10).Size(353, 353);
 TestBtn := NewButton(TabCtrl.Pages[0], "&Button").SetPosition(100, 100).Size(75, 25);
 MainWnd.Size(377, 432);
 MainWnd.CenterOnParent;

 TabCtrl.Pages[0].OnPaint := TOnPaint(MakeMethod(nil,@Paint));
 TabCtrl.Pages[1].OnPaint := TOnPaint(MakeMethod(nil,@Paint));
Run(MainWnd);
end.


 
Galkov ©   (2006-12-28 09:12) [19]

Владимир, есть такое соображение...

Для TabControl, помимо методов TC_Insert и TC_Delete можно завести что-то типа TC_RegisterPage и TC_RemovePage. Ну, может с проверкой, что регистрируемый контрол, это наследник TabControl...

Чтобы пользователь мог вставлять своего типа странички:
Нравится Groupbox и без ailgn-а - на здоровье, если TabControl своих размеров не меняет...
Хочешь - memo с caClient на страничку приклеивай...
Или еще один TabControl...

Собственно, сегодня только одна строка, подразумевающая, что список children - это ТОЛЬКО список табов, и осталась...

function TControl.TC_Insert(Idx: Integer; const TabText: KOLString; TabImgIdx: Integer): PControl;
......
 Result.Visible := Count = 0;


 
Galkov ©   (2006-12-28 19:50) [20]


> Собственно, сегодня только одна строка, подразумевающая,
>  что список children - это ТОЛЬКО список табов, и осталась.
> ..
>
> function TControl.TC_Insert(Idx: Integer; const TabText:
>  KOLString; TabImgIdx: Integer): PControl;
> ......
>  Result.Visible := Count = 0;

Sorry, ерунду с порол :(
Не осталось такой строки...


 
Dimaxx ©   (2006-12-31 15:20) [21]

2 GR: Это для более поздних версий Дельфи, которые сразу поддерживают темы. У Д5 нет такой поддержки, но ТС отображается нормально под темами... Так что дело тут не в uxtheme.dll...


 
Turbid ©   (2007-01-24 00:10) [22]

Владимир, так значит глюк с темами и табами не будет исправлен никогда? Или есть решение?


 
homm ©   (2007-01-24 08:45) [23]

> Владимир, так значит глюк с темами и табами не будет исправлен
> никогда?

Все завсит от ТЕБЯ! Дерзай.


 
Vladimir Kladov   (2007-01-24 15:26) [24]

я не так часто использую закладки, и не ориентирую на темы ХР. Для меня это не вопрос: темы неудобны (устают глаза от много- или скорее плохо-цветия), тормозят работу системы, и + глючат. В корзину. Нет, ну если кто решит проблему, завсегда пожалста, вставим, хотя бы через IFDEF.


 
Turbid ©   (2007-01-24 23:02) [25]

>темы неудобны (устают глаза от много- или скорее плохо-цветия), >тормозят работу системы, и + глючат

Полностью поддерживаю, но вот юзеры...


 
homm ©   (2007-01-25 11:06) [26]

> устают глаза от много- или скорее плохо-цветия
Ну это претензии к конкретной теме, а не к концепции в целом.


> тормозят работу системы
На моей старой машине, сел500 128озу это практически незаметно было, а на хорошем железе иподавно говорить не о чем.


> + глючат
Это да. Особенно прогрессбар, практически во всех темах, за исключением стандартной, может быть.

С появлением висты проблем только прибавится. Просто убивает криворукость и недальновидность майкросовта.


 
Vladimir Kladov   (2007-01-25 15:36) [27]

У меня тормоза заметны на 3.2ГГц с гипертредингом. Просто видеокарточка же форс 4, а разрешение 1024х1280. Без тем прорисовка в несколько раз быстрее.


 
homm ©   (2007-01-25 16:16) [28]

> У меня тормоза заметны на 3.2ГГц с гипертредингом. Просто
> видеокарточка же форс 4, а разрешение 1024х1280.

Владимир, извеняюсь за такой жуткий оффтоп, а дрова у вас на чипсет и видео стоят родные, или мелкомягкие?


 
Psychedelic ©   (2007-01-25 16:47) [29]

У меня тормоза заметны на 3.2ГГц с гипертредингом. Просто видеокарточка же форс 4, а разрешение 1024х1280.

Полную ерунду говорите. У меня - 1,6 ГГц, GF4 mx440,   разрешение 1024х1280 (LCD). 128 памяти.
Уже работаю три года с серебристой темой. Никаких тормозов. Правда все идеально настроено (всего 7 служб запущено). SP1

Правда недано памяти добавил.

Глючат? Не замечал. Хотя работаю по 12 часов ежедневно.
Поменьше пользуйтесь спящим режимом - после него многое (особенно  OpenGL) криво работает. Хотя спяций тоже удобно


 
Psychedelic ©   (2007-01-25 17:01) [30]

Еще немного оффтопа:
Владимир, честно если бы не ваша подпись, подумал бы что какой-то начинающий юзер написал.
Если кстати использовать винду без настрйоки с последними обновлениями, то действительно будет притормаживать. Там все нужное и не нужное запущено...
Настроить надо обязательно.
Я раз потратил целый день на настройку, дефрагментировал - закатал в образ, и все - вечно молодоя Винда, без фрагментации  навсегда.

P.S. Кстати скорее всего памяти у вас маловато. Хотя бы 512.


 
homm ©   (2007-01-25 17:49) [31]

> раз потратил целый день на настройку, дефрагментировал -
> закатал в образ,

Чем закатывал? Надо бы тож диск "загрузочный" заести :)


 
ANTPro ©   (2007-01-25 17:59) [32]

> [31] homm ©   (25.01.07 17:49)

Acronis True Image неплох


 
Psychedelic ©   (2007-01-25 18:53) [33]

Acronis True Image - не юзайте. Когда работал тестером только матерился.
Что у него за алгоритмы не знаю. 64 бит win не берет. Да и + он где то в райное загрузочного прописывает свой серийник (такой хитрый).
Да и фрагментацию не сохраняет. Туфта.
Берите Notron ghost 2003. Он сохраняет и ввостанавливает все посекторно физически, не беря во внимание файловый раздел.
Загружаешься с дискеты, грузишь ngh, (все в PC DOS, и все с менюшками :), и пошло поехало.
Оч крутая прога, видно что старой закалки программеры делали.
Читает пишет на NTFS , жмет, пишет на CD - DVD . и все это с Доса и на лету!!!
За 4 минуты ввостанавливает.

Ссыла на загрузочную дискету (там только вставить, остальное само).
http://gameprelauncher.ho.com.ua/ngh2003.exe


 
Psychedelic ©   (2007-01-25 19:02) [34]

Да и акронис еще весит нехило на винте, регистрирует кучу всего в реестре.
Зависим от файловых систем...
А ngh всего 900 кило без установки ессно. :)


 
Psychedelic ©   (2007-01-25 19:06) [35]

не беря во внимание файловый раздел
файловую систему конечно.


 
Dimaxx ©   (2007-01-25 20:27) [36]


> Он сохраняет и ввостанавливает все посекторно физически,
>  не беря во внимание файловый раздел.

Это утверждение верно, если раздел в образе и раздел, на который разворачивается образ, идентичны. Если условие не выполнено - происходит разворачивание образа по файлам с сохранением всех загрузочных записей и т.п.


 
Vladimir Kladov   (2007-01-25 20:27) [37]

NVidивские дрова. Так карточке уже 100 лет. На ней столько памяти... что если в режиме поворота экрана таскать окно вместе с контеном, комп выключается. Пришлось перемещение с контентом отменить. Так даже быстрее на этих тормозах.

Мне удобно в режиме поворота (портрет против ландшафта), хотя тормозов явно больше, и точка. Игрушки - летают (в ландшафте, конечно). Но играть некогда.


 
Psychedelic ©   (2007-01-25 21:05) [38]


> Это утверждение верно, если раздел в образе и раздел, на
> который разворачивается образ, идентичны. Если условие не
> выполнено - происходит разворачивание образа по файлам с
> сохранением всех загрузочных записей и т.п.

Ну дык ясен пень, что за американизация блин?
Все что и так понятно (логически вытекает из этого) зачем с умным видом объяснять?
Раздражает ведь.

P.S. Просто меня уже замучили на работе этими бестолковыми объяснениями (у нас международный коллектив, русские - американцы.) Я уже напрямую говорю что это делать не надо, и так понятно, они удивляются - привыкли наверное...
Самое интересное, что придумали даже план действия "Что должен делать сотрудник придя на работу". Точно не помню (я и не смотрел толком на него), но один пункт убил меня наповал - "включить компютер, загрузить Windows". Это конечно не наши придумали.
Частенько стали Задорнова вспоминать... :)


 
homm ©   (2007-01-25 21:42) [39]

> Так карточке уже 100 лет.


Владимир, ну не может быть в этом дело просто. Еще раз говорю, у меня 500 селероне с ривой ТНТ2 на 32 метра, работает на AGP2х на 8-и битной шине (мать больше не позволяет) - включение тем не заметно практически по производительности. Попробуйте зайти в свойства экрана - параметры - дополнительно - нвидевская вкладка - самый верхний пункт в дереве справа (у меня название видео в качестве названия этого пункта). Там должно быть поле "тип шины". Что там у вас отображается? Если PCI то нужно смотреть на дрова чипсета.


 
AndreyRus   (2007-01-25 22:36) [40]


> у меня 500 селероне с ривой ТНТ2 на 32 метра, работает на
> AGP2х на 8-и битной шине (мать больше не позволяет) - включение
> тем не заметно практически по производительности.

Аналогично на Intel Pentium II Celeron (Slot - 1) 300 MHz с идентичной видеокартой на 8 Mb :)



Страницы: 1 2 вся ветка

Форум: "KOL";
Текущий архив: 2007.09.16;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.57 MB
Время: 0.393 c
2-1187593110
max_
2007-08-20 10:58
2007.09.16
2-ух мерные диннамические массивы


1-1183987605
Shirson_
2007-07-09 17:26
2007.09.16
Коллеги, вопрос по MIDAS.


9-1157787679
Viv
2006-09-09 11:41
2007.09.16
Ищу программку переводящую фонт в бмпшку...


11-1170830393
Mabia
2007-02-07 09:39
2007.09.16
Ошибки при установке Service&mckService


1-1183575985
romychk
2007-07-04 23:06
2007.09.16
Кодировка в NMHTTP1





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский