Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Вопросы по Delphi (все версии) - часть 3

Автор: SergeBS
Дата сообщения: 15.01.2008 13:40
relictus

Цитата:
Если мне надо отладить _свою_ программу и мне не хватает в этом возможностей делфийского дебаггера, я просто дебажу ее в Olly - вот и все.

А примерчик такой ситуации привести можешь? Без лазанья по портам ввода-вывода, есс-но.
Автор: relictus
Дата сообщения: 15.01.2008 14:29
SergeBS

Цитата:
А примерчик такой ситуации привести можешь?

Пожалуйста: Trace log, bp on memory access, регистры MMX и 3DNow и мн.др.
Автор: STEEL
Дата сообщения: 15.01.2008 22:42
Как установить курсор на новую добавленную запись в dbgrid, datasource умеет?
Автор: makbeth
Дата сообщения: 16.01.2008 05:50
STEEL
Это делается курсором DataSet'а (Table, Query, SP, etc..). Например, с помощью Locate(...).
Автор: borodavolga
Дата сообщения: 16.01.2008 11:10

Цитата:
А что тебя в стандартном не устраивает? Поконкретнее, чтобы понять что тебе можно предложить...

Мне мне просто необходима возможность просматривать свойства Com-объектов созданных через позднее связывание
Автор: AntonVA1
Дата сообщения: 16.01.2008 11:37
STEEL
Если подробнее: запоминаем id записи в переменной (или другую уникальную для таблицы инфу), затем ищем с помощью locate
Автор: greenpc
Дата сообщения: 16.01.2008 12:07
makbeth
AntonVA1
STEEL

Цитата:
новую добавленную запись

еще есть такое - Last если выборка по всем записям без сортировки
Автор: Maks150988
Дата сообщения: 16.01.2008 12:49
Люди, конешно мне щас тупо сюда соваться, потому как вы тут разбираетесь с полями в таблице и выбираете лучшие отлдачики, однако прошу помощи по проблеме загрузки изображения в ListView. Как можно загрузить картинку в этот контрол посредством ListView_SetBkImage, чтобы при прокрутке текста в этом элементе рисунок оставался на месте.
Или я тут в игноре у всех? 0_о
Автор: delover
Дата сообщения: 16.01.2008 13:31
Maks150988
Средствами VCL этого не сделать - не потдерживается. Средствами API можешь попробовать - читай MSDN. Игнор не причём - просто вряд ли кто знает. Тут надо самому. Упомянутая функция ListView_SetBkImage в исходниках Delphi описана, но нигдк не используется. Я брал FAR Manager и делал поиск файлов с этим текстом. Только описание. То же повторил для исходников RC3, JVCL. Там тоже нет. Наверное тебе лучше искать готовые компоненты, так как если даже разберёшся будет работать глюкаво на других системах.
Автор: Maks150988
Дата сообщения: 16.01.2008 13:55
delover
Я средствами VCL уже как год ничего не делаю. Понравилось через WinApi один интерфейс шпарить. Вот сейчас возникла проблемка. Через эту функцию можно загрузить картинку с диска, указав к ней путь. Однако вроде можно и из ресурса, только в MSDN написано как-то криво (даже с переводчиком не понял про значения некоторых параметров загрузки). Хотелось бы найти русскую документацию по этой функции. Можно попрбовать через WM_PAINT наладывать картинку, но в данном случаем я не знаю что надо написать в WM_OWNERDRAW. Если кто знает, напишите пожалуйста примерный код, так как всегда удобнее осваивать материал на примере.
Кстати через GDI как-нибудь можно загрузить в этот элемент картинку? Например PNG с прозрачностью?
Автор: jONES1979
Дата сообщения: 16.01.2008 14:09
Поверхностно погуглил на тему "на чем сделать ribbon-интерфейс" в Дельфи(7).. Повсюду ссылки только только на "TMS Advanced Toolbars" и "DevExpress чего-то там".

Подскажите, может ещё какие-то есть варианты?
Автор: delover
Дата сообщения: 16.01.2008 16:58
Maks150988

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

Давно шпаришь? Флаг тебе в руки, года через четыре сам не поймёшь что делал, а вот работать уже не будет. На сколько я знаю, самое сумашедшее место - это "comctl32.dll". Всегда было и будет. Потому как каждый сетап волочёт свою версию оной библиотеки. +Сложная логика Befor и AdvanceBefor отрисовок. +Кажный спец в WinApi. +Вышли XP стили, добавил манифест и на десятке форм скрытые панели подписаны и табщет градиенты замазаны простой заливкой BtnFace и ещё куча глюков. Так вот написал ты сложный зависимый код. А через четыре года лень вдруг стало и по%:*херишь ты тогда добрую половину своих прог.

У самого было - поставил манифест и во всех деревьях рамка редактирования нода стала жирной. Нигде нет нормального компонента, пришлось юзать апи. Надо было WMCtlColorEdit c DefWindowProc. Вобщем глюков от comctl32 за последние лет 12 было мама не горюй. Так веть и просто понятно, что это самое "конкурентное" место это №1. Что любая программа меняющая стиль винды поменяет логику dll это №2. Что сама микрософт поменяет логику и не предупредит Borland даже чтобы следующая версия умела рисовать дерево - это №3. Что если ты всё же нарисуешь бантики, а всем пофигу и через несколько лет и тебе пофигу на эти бантики, а они не работают отключить невозможно, тошнит глядя на собственные проги - проще стереть - это №4. Ну и естественно дураки те, кто юзают готовые компоненты, которые в два счёта можно отключить если нет свежей поддержки - это №5. "Ну и учиться надо прежде всего на своих ошибках" - это №6. До встречи через четыре года.


Добавлено:
ЗЫ: а ещё большие дураки пишут платформенно независимый код.
Автор: Maks150988
Дата сообщения: 16.01.2008 17:35
шпарю на вин апи где-то год. сначала заинтересовал минимальный размер программ. очень заинтересовала такая "фича". стал понемногу скачивать примеры реализации. потом начал для себя писать простенькие программки. на удивление скачивалисб бойко. при чем чуть ли не каждый второй писал мол "оболдеть. написана на делфи, а такой маленький размер!!!". радует то что потом можно использовать упаковщик для "дожатия" размера.))
зы. теперь я начал комментировать свой код. потому что пока создашь более менее рабочее приложение с кучей кода (учитывая что все через вин апи), начинаешь подолгу искать нужное в коде, ничего не понимая как обозначил, даже если разбивать на inc или pas файлы...
да даже если и потом майкрософт намудрит с платформами, можно написать в ридми или руководстве для юзера мол так и так только для таких версий винды...
Автор: vladk1973
Дата сообщения: 17.01.2008 12:46
Maks150988
Маленький размер, это, конечно здорово
Только серьезный софт в какой-нибудь фирме ты так не напишешь.
Как насчет Клиент-сервера за две недели? Простенькая аутентификация, пять/шесть отчетов, вставка/редактирование/удаление записей?
Вот и встрянешь ты на своем винапи. А ведь этот коде еще и сопровождать потом кому то надо...
Автор: Maks150988
Дата сообщения: 17.01.2008 15:32

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

Врать не буду, но такие приложения я не делал, да и мне не интересны клиенты/серверы.
Автор: delover
Дата сообщения: 17.01.2008 16:16

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

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

Уговаривать не собираюсь. Просто подготавливаю твой ум к тому, что рано или поздно произойдёт. Клиент/сервер меня тоже не интересовал до поры. Однако она вещь земная и практичная. Сейчас жалею что раньше не увлекался.
Автор: vladk1973
Дата сообщения: 17.01.2008 17:12
delover
На самом деле, друзья, спорить тут не о чем. Разные цели подразумевают разные реализации кода. Если меня никто не теребит, не стоит надо душой, я могу процедуру до блеска вылизывать - загляденье одно, в коде сплошное ООП, наследование с полиморфизмом, кое-где и на ассемблере могу блеснуть.
Но если говорят, "Это надо сделать вчера", то тут компоненты в зубы - и вперед, кропаешь обработчики событий, модули, только успевай - сохраняйся.

На вин API я тоже писал в далеком 97-ом. В редакторе ресурсов ваял форму, цеплял ее
с {$R} к проекту, да потом мессаджами рулил. Одна только трабла - теперь это все не работает почему то. Но я честно в реадми написал - "этот бантик только под Windows 95"

Maks150988
На самом деле работа с винапи - очень хорошая школа программиста. Учит понимаю работы винды. Только про ООП не забывай - это наша палочка выручалочка.
Автор: Maks150988
Дата сообщения: 17.01.2008 23:33
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 файл без таблицы релоков. Как-нибудь можно еще оптимизировать без помощи стороннего программного обеспечения?



Ну вроде пока вопросов нет, за исключением вставки картинки в ЛистВью.))
Автор: Mandor Sawall
Дата сообщения: 18.01.2008 08:44
Maks150988
Об вопрос 2: Все директиви комилятора, которые указаны в какой-то изходник, валидны только для етот изходник. Директиви для проект в целиком задаются в Project -> Options или в командной строке компилятора.
Автор: anfilat
Дата сообщения: 18.01.2008 09:03
Maks150988

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

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

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

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

Автор: delover
Дата сообщения: 18.01.2008 14:10
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
Полностью согласюсь.
Автор: RostY
Дата сообщения: 18.01.2008 14:32
Подскажите компоненты, библиотеки, ActiveX или еще что-то для работы со SmardCard'ами
Автор: vladk1973
Дата сообщения: 18.01.2008 17:21
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 ...
Автор: Maks150988
Дата сообщения: 19.01.2008 19:11
Благодарю всех за ответы.)

Возник новый вопрос. Как можно средствами одного апи поменять стиль кнопки на такой же как и у SpeedButton в VCL?
Или если на кнопку поместить изображение, но в программе используется стиль XP, то стиль кнопки становится классический. Как решить эту проблему?
Автор: Frodo_Torbins
Дата сообщения: 19.01.2008 20:18
Maks150988 Наверно никак. В VCL на том месте сначала рисуется картинка икспишной кнопки, а потом картинка которая нам нужна.
Автор: RezchiK
Дата сообщения: 20.01.2008 11:30
Привет всем...начал делать курсач и стопорнулся(т.к. я начинающий мучитель языка),кто-нибудь может подсказать как организовать простой просмоторщик графики(посередине картинка, а по её бока тупо две кнопки-назад и вперёд)

Сделал, чтоб картинки выбирались с ComboBox, а вот с кнопочками допетрить не могу(((
Автор: RomanTim
Дата сообщения: 20.01.2008 15:50
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;
Автор: RezchiK
Дата сообщения: 20.01.2008 17:59
А что сдесь делает
Цитата:
ComboBox1Change(nil);
??? Прокрутка рисунков начинается занаво??? у Comboboxa вроде нет такого метода(change)...как сделать, чтоб с достижением последнего рисунка кнопка становилась не активной??? и каксделать, чтоб картинки не подгружались, а имели так сказать путь к каталогу??? ЗАРНИЕ БОЛЬШОЕ БЛАГАДАРЮ!!!
Автор: Maks150988
Дата сообщения: 20.01.2008 19:19
подскажите можно ли сделать таймер, отсчитывающий время в формате часы:минуты:секунды без использования модуля sysutils?

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

Предыдущая тема: 1С: Конвертация данных 2.0


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.