Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по Delphi (все версии) - часть 4

Модерирует : ShIvADeSt

ShIvADeSt (28-06-2009 02:10): Продолжение в http://forum.ru-board.com/topic.cgi?forum=33&topic=10477  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101

   

Dimoniusis



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Aladdinych хендлы выделяются системой приложению на этапе создания компонентов.  
 
Хенд окна ищется FindWindow/EnumWindows а хендлы компонентов EnumWindowsEx

Всего записей: 4134 | Зарегистр. 18-10-2005 | Отправлено: 18:30 10-10-2008
Maks150988



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Товарищи, снова я с прорисовкой кнопки свертывания в заголовке со стилем toolwindow. Значит переделал переменные для прорисовок состояний кнопки и добавил определение типа ОС. Переменные вроде бы изменяются нормально взависимости от состояний кнопки, но я чего-то не могу оптимизировать функцию прорисовки, а именно задать условия к этим переменным. Запутался немного вобщем. Вобщем кому не сложно помогите пожалуйста. Хотя бы вместе создадим полноценный nonvcl пример реализации для остальных.
Ссылка: http://webdrive.avtograd.ru/Download/Explorer/Download/min_button_toolwnd_2.rar
Собственно необходимо сделать прорисовку в функции PaintMinimizeToolButton, исходя из 3 переменных. Есть конечно закомментированные условия - как-то работают, но "собрать" воедино из таких кусков кода пока не получается - времени слишком мало, да и не такой уж я профессионал-программист, чтобы весь код "вылизать". Что смог - сделал.
Еще как бы выцепить код из модуля Classes для функции Bounds, кто-нибудь посмотрите. Нет у меня pas файлов просто.
И заодно хотелось бы чтобы при нажатии правой кнопки мыши на прорисовываемую кнопку через секунуду состояние нажатия не изменялось.
P.S. Я несколько дней назад практически доделал пример, но сдуру удалил исходники, поэтому приходится заново все это делать, а что и как методом тыка напрограммировал первоначально - не помню.
Вобщем, хочется услышать побольше советов по оптимизации и выноски повторяемого кода в отдельные функции если таковое есть. А то я может что и проглядел и есть лишнее.

Всего записей: 836 | Зарегистр. 23-12-2006 | Отправлено: 21:04 10-10-2008
ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Maks150988
Здесь http://forum.ru-board.com/topic.cgi?forum=33&topic=9383&start=640#3 я давал рабочий код, который (насколько я помню) позволял полностью правильно отрисовывать кнопки в различных состояниях.  
Кстати  
 if (Pressed = FALSE and Actived = TRUE and Focused = FALSE) then
лучше записать так
 if (NOT Pressed and Actived and NOT Focused)  then  
смысл булиновских переменных, что они уже имеют значение истина или ложь и делать дополнительное сравнение нет смысла. (Нет смысла сравнивать TRUE=TRUE)
А читать условие можно так (чтобы понимать что написано)
Если ненажата и активна и нефокусена то...
Уточни что конкретно в моем коде тебе не подошло - помогу доработать. Просто опять с начала отслеживать и увязывать все логические переменные - тяжко.

----------
И создал Бог женщину... Существо получилось злобное, но забавное...

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 03:44 11-10-2008
Maks150988



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ShIvADeSt
Да, я помню про тот код. Но там вроде нельзя было прорисовывать кнопку кнопку при простом наведении курсора на нее и не все виды прорисовок состояний там были. Ну и вроде бы также немного некорректно обрабатывалось сообщение отжатия левой кнопки мышки. =)
Необходимо доработать обработку условий состояний кнопки в функции PaintMinimizeToolButton - при положениях курсора, нажатости, активности и т.д. Я бы конечно сделал, но я наверное этих состояний штук 10 сделаю, что не есть гуд. Вобщем нужно сделать код для проиисовки кнопки во всевозможных состояниях ее при возможных условиях. ну и заодно проверьте пожалуйста правильно ли выполняются условия булевых переменных в функциях по обработке событий мыши в функции главного диалога.

Всего записей: 836 | Зарегистр. 23-12-2006 | Отправлено: 09:59 11-10-2008
ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Maks150988
Держи код, вроде все отладил, все состояния сделал. Кстати если тебе не нужна функция (у тебя таких несколько, то смысл делать ее функцией - лучше процедурой сделать)
Подробнее...
проверять условия не стал, просто поубирал все лишнее и посмотрел как ведет себя кнопка при разных действиях, проверяя с поведением кнопки закрыть - отловил пару вещей, добавил нормальное поведение для этих состояний.

----------
И создал Бог женщину... Существо получилось злобное, но забавное...

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 12:11 11-10-2008 | Исправлено: ShIvADeSt, 12:16 11-10-2008
Maks150988



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ShIvADeSt
Спасибо огромное! Вроде все работает нормально.
Только напишите как обзначено MINBS_INACTIVE, а то фиг найдешь в инете без pas файлов.
И кстати для чего Вы используете TmSchema? Просто в 7 делфи его нет и без него все компилируется.
И еще запустил под режимом совместимости и кнопка потеряла оформление. Пришлось вообще убрать проверку на Xp. Я думаю все равно отрисовка правильно сработает уже при условиях от функций InitThemeLibrary и UseThemes.

Всего записей: 836 | Зарегистр. 23-12-2006 | Отправлено: 16:47 11-10-2008 | Исправлено: Maks150988, 18:13 11-10-2008
max86rus

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Как в DBGride сделать так, что бы заголовки столбцов(TColumnTitle) в шапке таблицы отображались вертикально или вертикальное выравнивание, проще говоря  А то у меня в таблице их очень много, на экран не помещаются
 
Очень надо.

Всего записей: 1 | Зарегистр. 11-10-2008 | Отправлено: 18:45 11-10-2008
ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
max86rus
Читать, как переопределить отрисовку столбцов таблицы. Стандартно никак.
 
Maks150988

Цитата:
Только напишите как обзначено MINBS_INACTIVE, а то фиг найдешь в инете без pas файлов. И кстати для чего Вы используете TmSchema?

  MINBS_INACTIVE         = 5;
Использую TmSchema так как у меня Дельфи 5 и там нет нативной поддержки тем Windows XP, поэтому юзается компонента Windows XP Theme Manager от Soft Gems. Насчет режима совместимости и потери стиля - все правильно, так как приложение считает, что оно запущено не на Windows XР. При старте часть кнопок еще держит тему, но потом рефреш и кнопки меняют стиль на старый (попробуй сделать окно неактивным и потом активным - кнопка закрыть тоже станет обычной). Вот только поведение надо немного подправить, я там сделал правильно только для тем ХР, а в DrawFrameControl не правил константы поведения кнопки. Но это достаточно просто - сам сделаешь.


----------
И создал Бог женщину... Существо получилось злобное, но забавное...

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 02:56 12-10-2008
DmitryKz

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Ребята, извините, если вопрос элементарный, но как связываются файлы с узлами TTreeView? Из имеющихся у меня справочных данных я не нашел, как связать свойство Data узла с файлом.


Цитата:
Например заведи StringList, в него пиши имена фалов, а в Data пиши номер соответствующего элемента StringList

Хм, а ведь свойство Data имеет тип Pointer, соответственно значения типа Integer туда не записать. К сожалению, код модуля формы уже написан почти полностью с использованием TTreeView, переписывать что-то для использования с VirtualStringTree времени совсем нет.
В этом дереве у меня список книг и работ в них (работа и представляет как раз один файл). Дочерние узлы от узла работ - закладки в документах для перехода по главам и разделам в одном документе (файле). Честно говоря, я очень надеялся, что в свойстве Data узла запишу ID файла или ID закладки но, кажись, лопухнулся. Кто-нибудь может что-то посоветовать?

Всего записей: 3144 | Зарегистр. 29-09-2005 | Отправлено: 21:01 12-10-2008 | Исправлено: DmitryKz, 21:03 12-10-2008
Frodo_Torbins

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
DmitryKz

Цитата:
Хм, а ведь свойство Data имеет тип Pointer, соответственно значения типа Integer туда не записать.

По моему Pointer, как и Integer, занимает 4 байта. Значит можно использовать приведение типов.

Всего записей: 2318 | Зарегистр. 24-05-2007 | Отправлено: 21:52 12-10-2008
DmitryKz

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Frodo_Torbins
А как это сделать для Pointer и Integer? Туда и обратно?
 
Добавлено:
Кажется, сообразил - pointer(целое) и integer(указатель). Так?

Всего записей: 3144 | Зарегистр. 29-09-2005 | Отправлено: 22:02 12-10-2008
Frodo_Torbins

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
DmitryKz
Ну да. Вроде бы должно сработать.

Всего записей: 2318 | Зарегистр. 24-05-2007 | Отправлено: 23:43 12-10-2008 | Исправлено: Frodo_Torbins, 23:43 12-10-2008
iddqd2



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
DmitryKz
Да, так работает. Проверено.

Всего записей: 14 | Зарегистр. 26-10-2006 | Отправлено: 18:46 13-10-2008
Maks150988



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Здраствуйте. Нужна помощь в прояснении ситуации. Значит создаю вкладки через проперти шит и в программе есть поддержка многоязычности. так вот нужно чтоб при нажатии на кнопку менялись строки в заголовке вкладок этого проперти шит. Я так посмотрел в пдф книжонке и поисковиках, что нужно PropSheet_SetTitle использовать или PSM_SETTITLE с флагами. Ну флаг нашел PSH_PROPTITLE.
Использовал как SendMessage(hSetTab1, PSM_SETTITLE, PSH_PROPTITLE, Integer(PAnsiChar('MyText'))) и текст не поменялся.
Я вот все думаю может из-за того что создаю вкладки без нужных флагов? А то при иницализации страниц только так к примеру:

Код:
 
  PropPage.dwSize            := SizeOf(PropPage);
  PropPage.dwFlags           := PSP_USETITLE;
  PropPage.hInstance         := hInstance;
  PropPage.pszTemplate       := MAKEINTRESOURCE(RC_DIALOG_TABGENERAL);
  PropPage.pfnDlgProc        := @GeneralSettingsFunction;
  szIniStr := GetIniString(szLngPath + szSymbolSplash + szLngFile, szStringsFile, 'ID_DLGPAGE_GENERAL', '');
  PropPage.pszTitle          := PAnsiChar(szIniStr);
  APropPage[0]               := CreatePropertySheetPage(PropPage);
 
 

Может из-за флага PSP_USETITLE такая ерунда? Даже не знаю куда копать...

Всего записей: 836 | Зарегистр. 23-12-2006 | Отправлено: 20:28 14-10-2008
DmitryKz

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Удалено.

Всего записей: 3144 | Зарегистр. 29-09-2005 | Отправлено: 01:17 15-10-2008 | Исправлено: DmitryKz, 02:43 15-10-2008
Aladdinych



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Dimoniusis
Sorry
FindWindowEx - такую функцию нашел
а EnumWindowsEx - что-то не могу нати...

Всего записей: 322 | Зарегистр. 18-10-2005 | Отправлено: 17:15 15-10-2008 | Исправлено: Aladdinych, 17:17 15-10-2008
Kotopes



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Dimoniusis

 
в user32 - функция EnumWindows. EnumWindowsEx походу более не экспортируется. хотя, может и ошибаюсь...

Всего записей: 185 | Зарегистр. 08-10-2004 | Отправлено: 23:08 15-10-2008 | Исправлено: Kotopes, 23:16 15-10-2008
ZalivkoDenis



Full Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Всем доброго времени суток!
По поводу потерянных функций:  
Не подскажет ли кто-нить такому лошаре как я, ХДЕ в исходниках vcl отыскать функцию Assigned (CG2007)? В хелпосистеме написано, что она в System (на всяк случай ссылочка на локальный хелп: ms-help://borland.bds5/delphivclwin32/System_Assigned.html). Всё обыскал - ну НЕТУ её там . А всё дело в том, что я хотел заюзать её в билдере (в дельфи использую постоянно), а компилятор сказал, что никак не может её отыскать, я решил попробовать руками отыскать - ни_хрена... В делфи всё работает.
Внимание, вопрос: В чём фокус? (в билдере много разных способов обойтись и без неё, но хотелось бы именно так. Всем спасибо.)
 
 
Добавлено:
DmitryKz

Цитата:
Кажется, сообразил - pointer(целое) и integer(указатель). Так?

В этом поле можно хранить абсолютно всё. Я, например, храню в нём фрейм, который в себе несёт ещё кучу фреймов... - Не принципиально. Pointer - это указатель (!). А Integer несёт в себе значение определённого типа, котрое, в свою очередь, расположено где-то в памяти, и, если присвоить этой Data указатель на значение, то после можно будет прочитать это значение по адресу, хранящемуся в Data.

Всего записей: 537 | Зарегистр. 06-10-2005 | Отправлено: 14:26 16-10-2008
Glukodel



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ZalivkoDenis

Цитата:
Внимание, вопрос: В чём фокус?

Фокус, похоже, в том, что есть несколько функций, кторые вшиты толи в компилятор толи где-то рядом... кроме Assigned не удается обнаружить исходники еще нескольких базовых функций... так что, если найдется - в студию для билдера проще всего, мабуть, написать свою - много там не будет

Цитата:
В этом поле можно хранить абсолютно всё. Я, например, храню в нём фрейм

идея хранить указатели как целые числа сколь не нова, столь же и порочна в большинстве случаев брать типизированный указатель и делать из него нетипизированный очень редко обснованный шаг(если такое вообще бывает , а для делфи/билдера - так вообще изврат, пока не доходит до каких-то жутко специфичных оптимизаций работы с данными в памяти...

Всего записей: 97 | Зарегистр. 16-08-2004 | Отправлено: 16:21 16-10-2008
hukker



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Что за ошибка - '0,87' is not a valid floating point value. - ?
Delphi 2007 Lite, Win XP SP3

Всего записей: 883 | Зарегистр. 05-09-2007 | Отправлено: 21:25 16-10-2008
   

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по Delphi (все версии) - часть 4
ShIvADeSt (28-06-2009 02:10): Продолжение в http://forum.ru-board.com/topic.cgi?forum=33&topic=10477


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru