Вопросы по Delphi (все версии) - часть 3 - [81] :: Прикладное программирование :: Компьютерный форум Ru.Board
Перейти из форума на сайт.

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

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

ShIvADeSt (07-04-2008 02:27): продолжение в http://forum.ru-board.com/topic.cgi?forum=33&topic=9383  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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

   

jONES1979



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Поверхностно погуглил на тему "на чем сделать ribbon-интерфейс" в Дельфи(7).. Повсюду ссылки только только на  "TMS Advanced Toolbars" и "DevExpress чего-то там".
 
Подскажите, может ещё какие-то есть варианты?

Всего записей: 324 | Зарегистр. 20-05-2005 | Отправлено: 15:09 16-01-2008
delover

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

Цитата:
Я средствами VCL уже как год ничего не делаю. Понравилось через WinApi один интерфейс шпарить.

Давно шпаришь? Флаг тебе в руки, года через четыре сам не поймёшь что делал, а вот работать уже не будет. На сколько я знаю, самое сумашедшее место - это "comctl32.dll". Всегда было и будет. Потому как каждый сетап волочёт свою версию оной библиотеки. +Сложная логика Befor и AdvanceBefor отрисовок. +Кажный спец в WinApi. +Вышли XP стили, добавил манифест и на десятке форм скрытые панели подписаны и табщет градиенты замазаны простой заливкой BtnFace и ещё куча глюков. Так вот написал ты сложный зависимый код. А через четыре года лень вдруг стало и по%:*херишь ты тогда добрую половину своих прог.
 
У самого было - поставил манифест и во всех деревьях рамка редактирования нода стала жирной. Нигде нет нормального компонента, пришлось юзать апи. Надо было WMCtlColorEdit c DefWindowProc. Вобщем глюков от comctl32 за последние лет 12 было мама не горюй. Так веть и просто понятно, что это самое "конкурентное" место это №1. Что любая программа меняющая стиль винды поменяет логику dll это №2. Что сама микрософт поменяет логику и не предупредит Borland даже чтобы следующая версия умела рисовать дерево - это №3. Что если ты всё же нарисуешь бантики, а всем пофигу и через несколько лет и тебе пофигу на эти бантики, а они не работают отключить невозможно, тошнит глядя на собственные проги - проще стереть - это №4. Ну и естественно дураки те, кто юзают готовые компоненты, которые в два счёта можно отключить если нет свежей поддержки - это №5. "Ну и учиться надо прежде всего на своих ошибках" - это №6. До встречи через четыре года.
 
 
Добавлено:
ЗЫ: а ещё большие дураки пишут платформенно независимый код.

Всего записей: 1395 | Зарегистр. 25-06-2007 | Отправлено: 17:58 16-01-2008
Maks150988



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
шпарю на вин апи где-то год. сначала заинтересовал минимальный размер программ. очень заинтересовала такая "фича". стал понемногу скачивать примеры реализации. потом начал для себя писать простенькие программки. на удивление скачивалисб бойко. при чем чуть ли не каждый второй писал мол "оболдеть. написана на делфи, а такой маленький размер!!!". радует то что потом можно использовать упаковщик для "дожатия" размера.))
зы. теперь я начал комментировать свой код. потому что пока создашь более менее рабочее приложение с кучей кода (учитывая что все через вин апи), начинаешь подолгу искать нужное в коде, ничего не понимая как обозначил, даже если разбивать на inc или pas файлы...
да даже если и потом майкрософт намудрит с платформами, можно написать в ридми или руководстве для юзера мол так и так только для таких версий винды...

Всего записей: 836 | Зарегистр. 23-12-2006 | Отправлено: 18:35 16-01-2008 | Исправлено: Maks150988, 18:52 16-01-2008
vladk1973



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Maks150988
Маленький размер, это, конечно здорово
Только серьезный софт в какой-нибудь фирме ты так не напишешь.
Как насчет Клиент-сервера за две недели? Простенькая аутентификация, пять/шесть отчетов, вставка/редактирование/удаление записей?
Вот и встрянешь ты на своем винапи. А ведь этот коде еще и сопровождать потом кому то надо...

Всего записей: 674 | Зарегистр. 23-03-2005 | Отправлено: 13:46 17-01-2008
Maks150988



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

Цитата:
Как насчет Клиент-сервера за две недели? Простенькая аутентификация, пять/шесть отчетов, вставка/редактирование/удаление записей?

Врать не буду, но такие приложения я не делал, да и мне не интересны клиенты/серверы.

Всего записей: 836 | Зарегистр. 23-12-2006 | Отправлено: 16:32 17-01-2008
delover

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

Цитата:
потому что пока создашь более менее рабочее приложение с кучей кода (учитывая что все через вин апи), начинаешь подолгу искать нужное в коде, ничего не понимая как обозначил

Маленький размер - хорошо, но маленький размер=большой размер труда. А труд как правило растёт по экспоненте. Обычно, гораздо позже начинаешь понимать, что хоть ты и научился "немудрить" в своих программах, потому как если намудрил - потом выкинешь. Что хоть ты и пишешь вроде просто, а всё одно в программе остаётся куча интуитивной логики. Лень например тебе было создать буленовскую переменную и используешь ты интегер -1 после цикла в котором искал элемент. Если минус один то не найдено. Нарасло там куча кода и такой же "подводной" логики. И читаешь ты её (процедуру) по пол часа и понимаешь, что эта каша, которую показать другим страшно. Страшно не потому, что каша не работает, а потому, что читать там нечего и учиться там нечему. А теперь помнож это на большой размер труда в винапи. Получается на текст программы плевать, то есть на алгоритм. Вернёмся к размеру иех-е. Видел когда нибудь галочку "Project Options\Packages\Build with runtime packages"? Насладись размером, никто не мешает. А скачивать с интернета программу по три мегобайта в зипе - это не проблемма. Когда я вижу 30Мб у меня вопросов не возникает - качаю, когда я вижу 300Мб, тут я хорошо подумаю - толку качать, если я её только на балванке смогу носить? Так может она в магазине уже нарезана? А 30Мб ты и на винапи не сделаешь и просто левыми компонентами не наберёшь. Так что размер exe в интернете сейчас это не проблема. А вот неработающая в разных виндах программа - проблема.  
 
Уговаривать не собираюсь. Просто подготавливаю твой ум к тому, что рано или поздно произойдёт. Клиент/сервер меня тоже не интересовал до поры. Однако она вещь земная и практичная. Сейчас жалею что раньше не увлекался.

Всего записей: 1395 | Зарегистр. 25-06-2007 | Отправлено: 17:16 17-01-2008
vladk1973



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
delover
На самом деле, друзья, спорить тут не о чем. Разные цели подразумевают разные реализации кода. Если меня никто не теребит, не стоит надо душой, я могу процедуру до блеска вылизывать - загляденье одно, в коде сплошное ООП, наследование с полиморфизмом, кое-где и на ассемблере могу блеснуть.
Но если говорят, "Это надо сделать вчера", то тут компоненты в зубы - и вперед, кропаешь обработчики событий, модули, только успевай - сохраняйся.
 
На вин API я тоже писал в далеком 97-ом. В редакторе ресурсов ваял форму, цеплял ее  
с {$R} к проекту, да потом мессаджами рулил. Одна только трабла - теперь это все не работает почему то. Но я честно в реадми написал - "этот бантик только под Windows 95"
 
Maks150988
На самом деле работа с винапи - очень хорошая школа программиста. Учит понимаю работы винды. Только про ООП не забывай - это наша палочка выручалочка.

Всего записей: 674 | Зарегистр. 23-03-2005 | Отправлено: 18:12 17-01-2008
Maks150988



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
delover
А когда на одном ВинАпи программу делаешь, там в менюшке недоступно большинство пунктов, включая пункт опций проекта. Поэтому рантайм пакеты бестолку...))
 
Да ну впринципе мне незачем торопиться. Потихоньку клепаю.)) Сейчас решил диалог настроек делать. Муторно конечно, но зато потихоньку работа продвигается.
Хотя я уже убедился, что пользователя по большему счету привлекает не "возможности" приложения, а его внешний вид. И чем более красивее сделан интерфейс, тем больше народу будет пользоваться твоей программой. Поэтому в своем плейере пришлось listbox заменить listview, учитывая что в него можно картинки совать и цвета элементов его перекрашивать.
 
Такссс... Меня всегда интересовали вопросы. Думаю кто-нибудь из вас ответ на них знает.
 
 
 
Вопрос 1.
 
Допустим есть конструкция в коде типа:
SendMessage(GetDlgItem(hWin, CMBX), CB_GETLBTEXT, IndCmbx, Integer(@CmbxBuf));
CheckFreq := PChar(Integer(@CmbxBuf));
Ну и я понаставлял проверки типа:
if (String(CheckFreq) = '') then ...
 
Компилятору без разницы как я эту переменную CheckFreq подставляю в коде? Будет ли сама оптимизация кода, если бы я эту переменную не подставлял, а сразу бы везде указал допустим if (String(PChar(Integer(@CmbxBuf))) = '') then... , а то и с SenMessage функцию какую-нибудь в условие написал? Или это только влияет на удобочитаемость исходного кода?
 
Вопрос 2.
 
думаю все наслышаны об опциях оптимизации исполняемых файлорв при компиляции, начиная с Делфи 6. Типа выставить надо параметры в проекте. Однако как я не прописывал в начале файла проекта чуть ли не все эти параметры, ничего не менялось. Это не действует в Делфи 7? А то просто хотелось компилировать exe файл без таблицы релоков. Как-нибудь можно еще оптимизировать без помощи стороннего программного обеспечения?
 
 
 
Ну вроде пока вопросов нет, за исключением вставки картинки в ЛистВью.))

Всего записей: 836 | Зарегистр. 23-12-2006 | Отправлено: 00:33 18-01-2008
Mandor Sawall

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Maks150988
Об вопрос 2: Все директиви комилятора, которые указаны в какой-то изходник, валидны только для етот изходник. Директиви для проект в целиком задаются в Project -> Options или в командной строке компилятора.

Всего записей: 119 | Зарегистр. 20-03-2003 | Отправлено: 09:44 18-01-2008
anfilat

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

Цитата:
Компилятору без разницы как я эту переменную CheckFreq подставляю в коде?  

А это легко проверяется. Пишешь один вариант, ставишь брякпойнт и смотришь в отладчике дизассемблерный код. Потом так же с другим вариантом. И выбираешь лучший вариант. Причем для оценки вариантов собственно ассемблер особо знать и не надо.

Всего записей: 845 | Зарегистр. 12-08-2005 | Отправлено: 10:03 18-01-2008
ymg2000



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

Цитата:
Компилятору без разницы как я эту переменную CheckFreq подставляю в коде?

anfilat правильно советует, но это уже явный перебор. Такое было актуально лет 18 назад (тогда DOS), когда технические средства и ОС накладывали жесткие ограничения на ОП и место на жестком диске. Тогда было оправдано бороться за каждый байт, и именно тогда Borland в своих продуктах ввел встроенный ассемблер.
А сейчас это актуально лишь в случае больших циклов и процедур (методов) "очень" многоразового использования.
 

Всего записей: 2391 | Зарегистр. 24-08-2007 | Отправлено: 10:48 18-01-2008
delover

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

Цитата:
А когда на одном ВинАпи программу делаешь, там в менюшке недоступно большинство пунктов, включая пункт опций проекта. Поэтому рантайм пакеты бестолку...))

Да что мы говорим: "бестолку"? Когда я использовал стандартный VCL c with package, то программный размер рос пропорционально размеру кода. Когда без опции, то как только ты начинаешь использовать новые компоненты/функции/юниты, то рост exe был нисколько не пропорциональным. Неважно, что это vcl или winapi, c этой галочкой видно только размер реального твоего кода. За вычетом 10кб для пустой проги. Компилил свой архиватор, так он у меня получился меньше, чем DOS-овский вариант, хотя на форме прогрессбар, три строки ввода, три кнопки и рамка, для красоты. Не говорю про саму аппликацию. А ты говоришь бесполезно. Ну, ну...
 

Цитата:
Хотя я уже убедился, что пользователя по большему счету привлекает не "возможности" приложения, а его внешний вид.

То то и оно, что "ручные полезняшки" через некоторое время начинают выглядеть убого. И хочется их заменить. Ох как тебе трудно будет... Да ещё "ручные полезняшки" чаще всего оказываются глупостью, так как существует даже на момент их создания красивый стандартный способ добиться того же самого. Приведу пример - в моей программе которой занимаюсь по работе, когда я пришёл, использовались самодельные компоненты для HotKey. Кто-то же их писал, подумал я. Во не лень было писать компонент и регистрировать его, и делать для него картинку в палетте компонентов. Когда есть самый тупой способ. Если тебе на форме не надо главного меню, а только "невидимую кнопку", клади ActionList, создай акцию, назначь комбинацию клавишь - и вот у тебя тот же самый компонент который всегда будет во всех версиях дельфы, который не занимает событий KeyDown/KeyUp, который позволяет запретить хоть все HotKey разом, хоть по отдельности. Автор видимо таво компонента не знал такого способа, а если узнал, то подумал: какой херомантией я страдал. Такие вот "удобняшки". Кроме как тренировки кодинга толку от них мало. Писал писал программу, а потом бац, вдруг у товарища на компе такая же, но только жудко красивая. И думаешь пофиг на свою программу, лучше у меня будет нормальная развитая утила, чем своя убогая недоделка. И весь проект в корзине. Надо будет что нибудь написать на WinApi для корзины.
 

Цитата:
Компилятору без разницы как я эту переменную CheckFreq подставляю в коде?

Ему без разницы, тебе лишь бы работало. Типекастинг поинтер в интежер ничего не добавляет, между PChar и string, добавляет один call. К оптимизации это не относится, к дуобочитаемости - да.
 

Цитата:
Однако как я не прописывал в начале файла проекта чуть ли не все эти параметры, ничего не менялось.

Директивы внутри кода могут локально переопределять глобальные директивы проекта.
 

Цитата:
А то просто хотелось компилировать exe файл без таблицы релоков.

Такой опции нет. Это вызывается StripReloc.exe, а потом UPX.exe из батника. Но запомни раз и на всегда - в ToolsAPI у тебя есть элементарный способ повешать события до компиляции и после компиляции, а так же при открытии любого файла самой IDE дельфы. Я использую событие после компиляции для запуска батника. Никогда не делаю это ручками, F9 и всё. В чём проблеммы? Изучи ToolsAPI, потрать недельку, потом поймёшь сколько мартышкиного труда сократилось, а полезного добавилось.
 
 
 
Добавлено:
Да, забыл, если рядом с файлом проекта есть одноимённый батник, то он запускается, а в параметрах передаются некоторые директивы. До жути просто, понятно, и настраеваемо.
 
Добавлено:
vladk1973
Полностью согласюсь.

Всего записей: 1395 | Зарегистр. 25-06-2007 | Отправлено: 15:10 18-01-2008
RostY



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подскажите компоненты, библиотеки, ActiveX или еще что-то для работы со SmardCard'ами

Всего записей: 387 | Зарегистр. 11-01-2006 | Отправлено: 15:32 18-01-2008
vladk1973



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

Цитата:
Да что мы говорим: "бестолку"? Когда я использовал стандартный VCL c with package, то программный размер рос пропорционально размеру кода. Когда без опции, то как только ты начинаешь использовать новые компоненты/функции/юниты, то рост exe был нисколько не пропорциональным. Неважно, что это vcl или winapi, c этой галочкой видно только размер реального твоего кода. За вычетом 10кб для пустой проги. Компилил свой архиватор, так он у меня получился меньше, чем DOS-овский вариант, хотя на форме прогрессбар, три строки ввода, три кнопки и рамка, для красоты. Не говорю про саму аппликацию. А ты говоришь бесполезно. Ну, ну...  

Интересный ответ.
Однако ты умалчиваешь о размере самих BPL в C:\WINDOWS\SYSTEM32
Например vcl60.bpl = 1295k
А без нее твоя чудо программка, даже пустая на 10к - работать не будет
 
Добавлено:
Maks150988

Цитата:
Допустим есть конструкция в коде типа:
SendMessage(GetDlgItem(hWin, CMBX), CB_GETLBTEXT, IndCmbx, Integer(@CmbxBuf));
CheckFreq := PChar(Integer(@CmbxBuf));
Ну и я понаставлял проверки типа:
if (String(CheckFreq) = '') then ...  

 
Если CmbxBuf - суть строка с нулем на конце, и она всегда инициализирована (что в Delphi делает компилятор по умолчанию, то проверку на пустоту можно упростить:

Код:
 
if CmbxBuf[1] = #0 then ...  
 

 
Вместо

Цитата:
 
CheckFreq := PChar(Integer(@CmbxBuf));

Можно писать просто
 

Код:
 
CheckFreq := @CmbxBuf;

И даже

Код:
 
CheckFreq := CmbxBuf;

Компилятор достаточно интеллектуален, он понимает, что мы присваиваем указатель на буфер.
На самом деле, он наверняка даже не создаст переменную CheckFreq - скорее всего обойдется регистрами процессора.
 
 

Всего записей: 674 | Зарегистр. 23-03-2005 | Отправлено: 18:21 18-01-2008 | Исправлено: vladk1973, 18:50 18-01-2008
Maks150988



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Благодарю всех за ответы.)
 
Возник новый вопрос. Как можно средствами одного апи поменять стиль кнопки на такой же как и у SpeedButton в VCL?
Или если на кнопку поместить изображение, но в программе используется стиль XP, то стиль кнопки становится классический. Как решить эту проблему?

Всего записей: 836 | Зарегистр. 23-12-2006 | Отправлено: 20:11 19-01-2008
Frodo_Torbins

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Maks150988 Наверно никак. В VCL на том месте сначала рисуется картинка икспишной кнопки, а потом картинка которая нам нужна.

Всего записей: 2322 | Зарегистр. 24-05-2007 | Отправлено: 21:18 19-01-2008 | Исправлено: Frodo_Torbins, 21:19 19-01-2008
RezchiK

Newbie
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Привет всем...начал делать курсач и стопорнулся(т.к. я начинающий мучитель языка),кто-нибудь может подсказать как организовать простой просмоторщик графики(посередине картинка, а по её бока тупо две кнопки-назад и вперёд)
 
Сделал, чтоб картинки выбирались с ComboBox, а вот с кнопочками допетрить не могу(((

Всего записей: 19 | Зарегистр. 19-12-2007 | Отправлено: 12:30 20-01-2008 | Исправлено: RezchiK, 12:50 20-01-2008
RomanTim

Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
RezchiK
Ну раз у тебя список файлов в комбобоксе уже есть, то можно сделать так  

Код:
procedure TForm1.BForwardClick(Sender: TObject)
begin
  if ComboBox1.ItemIndex < ComboBox1.Items.Count - 1 then begin
    ComboBox1.ItemIndex := ComboBox1.ItemIndex + 1;
    ComboBox1Change(nil);
  end;
end;
 
procedure TForm1.BBackClick(Sender: TObject)
begin
  if ComboBox1.ItemIndex > 0 then begin
    ComboBox1.ItemIndex := ComboBox1.ItemIndex - 1;
    ComboBox1Change(nil);
  end;
end;

Всего записей: 375 | Зарегистр. 11-09-2003 | Отправлено: 16:50 20-01-2008
RezchiK

Newbie
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
А что сдесь делает
Цитата:
 ComboBox1Change(nil);
??? Прокрутка рисунков начинается занаво??? у Comboboxa вроде нет такого метода(change)...как сделать, чтоб с достижением последнего рисунка кнопка становилась не активной??? и каксделать, чтоб картинки не подгружались, а имели так сказать путь к каталогу??? ЗАРНИЕ БОЛЬШОЕ БЛАГАДАРЮ!!!

Всего записей: 19 | Зарегистр. 19-12-2007 | Отправлено: 18:59 20-01-2008
Maks150988



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
подскажите можно ли сделать таймер, отсчитывающий время в формате часы:минуты:секунды без использования модуля sysutils?

Всего записей: 836 | Зарегистр. 23-12-2006 | Отправлено: 20:19 20-01-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 (все версии) - часть 3
ShIvADeSt (07-04-2008 02:27): продолжение в http://forum.ru-board.com/topic.cgi?forum=33&topic=9383


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

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

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru