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

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

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

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125

Открыть новую тему     Написать ответ в эту тему

ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Продолжение темы Вопросы по Delphi (до версии 2009) - часть 5

Познаем сами, помогаем другим...
Обсуждаем вопросы, не связанные с юникоидными версиями Delphi - для этого есть соответствующая тема (см. ссылки ниже).


 
Правила топика:
    Прежде чем спрашивать:
  1. Желательно изучить вопрос, попытаться найти ответ в прилагаемых мануалах, хелпах и анализируя исходники.
  2. Выполнить поиск по топику (открыть "Версия для печати" и поискать ответ там).
  3. Применить фильтр по разделу "Прикладное программирование". Ответы на многие старые вопросы могли быть даны в отдельных темах.
  4. Продумайте вопрос. На поверхностные вопросы вы получите поверхностные ответы, или вообще ответов не получите.
  5. Желательно указывать версии используемого компилятора и операционной системы.
    Прежде чем отвечать:
  1. Если не можете помочь, не мешайте.
  2. Если уж вы отвечаете на вопрос, давайте ответ по сути.
  3. Если вы не уверены, так и говорите! Ошибочный, но авторитетно звучащий ответ хуже, чем отсутствие ответа.
  4. Задавайте дополнительные вопросы, чтобы получить больше информации.
  • Отсутствие ответа не равносильно игнорированию - иногда участники форума просто не знают ответ. Повторная посылка вопроса не приветствуется. Посты типа "неужели никто не знает ответа..." или "может мне все-таки кто-нибудь ответит" недопустимы.  
  • Все большие куски кода (более 5 строк) оформляем в тег [morе] дабы уменьшить размер поста. FAQ по тегу [morе].


    Некоторые "родственные" топики:
     
  • Вопросы по Delphi (версии 2009-2010 Weaver)
  • Вопросы по компонентам для Delphi, C++ Builder
  • Использование DevExpress
  • Вопросы по Ehlib
  • Компоненты и утилиты для Delphi/BCB/FreePascal/Lazarus - только Open Source
  • Коммерческие компоненты и утилиты для Delphi/BCB
  • кабак программистов :)
     
    См. также: Некоторые полезные ресурсы о Delphi
     
    И старайтесь, чтобы ваш код не попал сюда :)

  • Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 05:13 19-05-2010 | Исправлено: akaGM, 02:33 15-07-2020
    R3Pa4eK



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Как можно запустить файл и ожидать его завершения, но чтобы программа была активной?
    Вот моя наработка:
    Подробнее...
     
    Только при загрузке dll'ки выбивает ошибку. Что тут не так?

    Всего записей: 963 | Зарегистр. 15-01-2011 | Отправлено: 22:00 15-05-2011
    Frodo_Torbins

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    R3Pa4eK
    Откуда такой странный способ декларации импортируемых функций? В справке правильный вариант описан иначе:
    Цитата:
    You can import a routine under a different name from the one it has in the library. If you do this, specify the original name in the external directive:

    Код:
    external stringConstant1 name stringConstant2;

    where the first stringConstant gives the name of the library file and the second stringConstant is the routine's original name.

    Кроме того, ваш способ ожидания процесса загрузит одно ядро процессора на 100%. Можно сделать лучше: http://www.transl-gunsmoker.ru/2010/04/blog-post_20.html

    Всего записей: 2318 | Зарегистр. 24-05-2007 | Отправлено: 22:20 15-05-2011 | Исправлено: Frodo_Torbins, 22:26 15-05-2011
    R3Pa4eK



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

    Всего записей: 963 | Зарегистр. 15-01-2011 | Отправлено: 22:26 15-05-2011 | Исправлено: R3Pa4eK, 22:27 15-05-2011
    Frodo_Torbins

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    R3Pa4eK
    Да, нужно прочитать в какой-нибудь книжке, как в делфи правильно делается импорт функций. Или обратится в раздел Фриланс.
     
    О, пока писал пост уже превратился в "del"

    Всего записей: 2318 | Зарегистр. 24-05-2007 | Отправлено: 22:33 15-05-2011 | Исправлено: Frodo_Torbins, 22:34 15-05-2011
    R3Pa4eK



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Frodo_Torbins
    Зачем мне обработка сообщений в течение заданного времени? Мне надо запустить .exe и ожидать ее завершения, чтобы программа была активной.

    Всего записей: 963 | Зарегистр. 15-01-2011 | Отправлено: 22:39 15-05-2011
    Frodo_Torbins

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    R3Pa4eK
    На самом деле эти две задачи очень похожи, но если исходный код вам об этом не говорит, то лучше не берите в голову.
    Исправление импорта библиотек помогло?

    Всего записей: 2318 | Зарегистр. 24-05-2007 | Отправлено: 23:44 15-05-2011
    R3Pa4eK



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Frodo_Torbins
    Не могу понять, как обойтись без result? И как узнать с какого процесса была запущена библиотека?
     
    Добавлено:
    Вот , теперь вроде все должно работать:
    Подробнее... Но при вызове функции - ошибка. Как исправить? Выручайте.

    Всего записей: 963 | Зарегистр. 15-01-2011 | Отправлено: 16:37 16-05-2011 | Исправлено: R3Pa4eK, 18:02 16-05-2011
    Frodo_Torbins

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

    Всего записей: 2318 | Зарегистр. 24-05-2007 | Отправлено: 23:23 16-05-2011
    R3Pa4eK



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Frodo_Torbins
    Вот такая ошибка...[
     

    Цитата:
    И какая у вас версия делфи?

    7-я
     
    Добавлено:
    Вызов библиотеки произвожу вот так:
     
    function _CreateProcessInInnoSetup(const EXEName, Parameters, DestDir: string; const Show: Word; TerminateChild: Boolean):BOOL; external '_CreateProcessInInnoSetup@files:InnoExec.dll stdcall';

    Всего записей: 963 | Зарегистр. 15-01-2011 | Отправлено: 17:21 17-05-2011
    Frodo_Torbins

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    R3Pa4eK
    Я не в курсе как производится вызов библиотеки в скриптах инно, но в исходниках на делфи он производится так:
    Код:
     function _CreateToolhelp32Snapshot(dwFlags, th32ProcessID: DWORD): THandle; stdcall; external 'kernel32.dll' name 'CreateToolhelp32Snapshot';

    Всего записей: 2318 | Зарегистр. 24-05-2007 | Отправлено: 22:32 17-05-2011
    ShIvADeSt



    Moderator
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Frodo_Torbins
    R3Pa4eK
    Мне одному кажется или на самом деле эти вопросы не совсем относятся к типовым вопросам (аля ФАК) по Дельфи? ИМХО нужно либо найти в моем разделе топик по инносетапу или создать и назвать что то типа вызов функций инносетапа из приложений Дельфи. Так как здесь подобные вопросы немного не в тему.

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

    Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 02:57 18-05-2011
    Aladdinych



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Помогите плз.
    Разбираюсь с работой одного компонента.
    Он является наследником TGraphicControl.
    Как выяснить последовательность выполнения методов и событий при создании компонента? Того, что сидит в теле конструктора недостаточно для понимания.
    Например как прорисовывается объект, на какие процедуры передается управление, когда объект попадает в фокус.
    Как можно протарассировать компонент?
     
    Добавлено:
    Речь идет о Delphi 7
     
    Добавлено:
    еще уточнение, где задается какие и в какой последовательности будут запускаться методы компонента когда запускается приложение содержащее этот компонент.

    Всего записей: 322 | Зарегистр. 18-10-2005 | Отправлено: 16:12 18-05-2011
    AlekXL



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Aladdinych
    Идешь в файл, где объявлен компонент(вероятно Controls.pas). Вызываешь окно списка функций( есть Gexperts, CnWizards)  
    Вводить туда частичное имя нужной функции, например для отрисовки обычно используются Paint и WM_PAINT. Анализируешь

    Цитата:
    Например как прорисовывается объект, на какие процедуры передается управление, когда объект попадает в фокус.
    В фокус могут попасть компоненты, у которых есть окно,типо TEdit, TButton и так далее. У TGraphicControl не своего окна, он отрисовывается в окне и на Canvas родителя. Так что в фокус попасть он не может - лишь его Parent может.
    Если нужно как-то особенно отрисовывать наследник TGraphicControl, когда его Parent в фокусе, нужно в процедуре отрисовки включить проверку
     

    Код:
    if Parent.Focused then begin
    // special painting
    end  
    else begin
    //not focused Paining
    end;
     

    Для реверсирования кода библиотек хорошим инструментом будет UnderStand (есть в Варезнике)
    Он покажет не только все методы класса, но все ссылки на его членов, где используются, где изменяются и так далее.
    Кароче, использую мосск

    Всего записей: 792 | Зарегистр. 24-04-2008 | Отправлено: 20:13 18-05-2011
    Aladdinych



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    попробовал оттрассировать и выяснил, что при запуске приложения первым делом управление передается методу mousemove этого объекта. посткольку он наследник TgraphicControl, посмотрел справку - оказывается на него передается автоматически управление при поступлении от ОС сообщения WM_MOUSEMOVE. А вот при клике на объекте почему-то автоматически вызывается метод Paint. Не нашел в справке условий по которому он срабатывает.

    Всего записей: 322 | Зарегистр. 18-10-2005 | Отправлено: 12:25 19-05-2011
    AlekXL



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

    Цитата:
    попробовал оттрассировать и выяснил, что при запуске приложения первым делом управление передается методу mousemove этого объекта.

    это скорей всего неверно

    Цитата:
    Не нашел в справке условий по которому он срабатывает.

    блин. Windows посылает сообщение WM_PAINT, когда окну нужно перерисоваться, сначала VCL диспетчирует его в процедуру WMPaint, а далее в Paint. Ставишь бряк на Paint, и видишь в Call Stack <приблизительный> стек вызова процедур(нужно компилировать с флагом Use Debug DCUs и Stack Frames)

    Цитата:
    Не нашел в справке условий по которому он срабатывает.
    Такие вещи в справке не пишутся, иначе объем документации по VCL был бы не мешьше объема исходного кода VCL
    Зачем вам это вообще знать? Во многом знании много печали.
    Если у тебя конкретная задача, озвучь, а так... Судя по твоим вопросам ты новичок в Windows и Delphi программировании, и за ручку провести тебя до уровня спеца -  такое никто тебе не предложит (бесплатно)

    Всего записей: 792 | Зарегистр. 24-04-2008 | Отправлено: 17:29 19-05-2011
    R3Pa4eK



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

    Всего записей: 963 | Зарегистр. 15-01-2011 | Отправлено: 22:48 19-05-2011 | Исправлено: R3Pa4eK, 23:05 19-05-2011
    delover

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Ребят, эт не в качестве рекламы, а просто хочу поделиться радостью. RegExpr - может остаться без работы )))). Шутка конечно, но в ней большая доля истины. Посмотрите кому не сложно компонентик, я его выложил на:
    http://cc.embarcadero.com/Item/28316
    (Simply refactor)
     
    При конвертировании 3000 html файлов моя программка делала это за 15 минут. Я уходил курить. Так что отладочка того что нужно конвертить заняла чуть больше недели. Если бы я использовал другой инструмент и выполнение было бы немного дольше, то потратил бы 2 недели. Самого компенетна, всмысле без программного кода хватает почти на 100%, а нетривиальные вещи стали гораздо легче в выполнении.

    Всего записей: 1395 | Зарегистр. 25-06-2007 | Отправлено: 07:31 20-05-2011
    R3Pa4eK



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Как можно узнать с какого процесса запущена библиотека (dll)?
     
    Добавлено:
    И как прервать работу WaitForSingleObject и завершить все запущенные им процессы?

    Всего записей: 963 | Зарегистр. 15-01-2011 | Отправлено: 15:17 20-05-2011
    delover

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    R3Pa4eK
    JCL папка bin файл ToolHelpViewer исходники рядом.

    Всего записей: 1395 | Зарегистр. 25-06-2007 | Отправлено: 20:31 20-05-2011
    DeZepTup

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    R3Pa4eK
    http://lmgtfy.com/?q=%D0%BA%D0%B0%D0%BA+%D0%BF%D1%80%D0%B5%D1%80%D0%B2%D0%B0%D1%82%D1%8C+%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%83+WaitForSingleObject+%D0%B7%D0%B0%D0%B2%D0%B5%D1%80%D1%88%D0%B8%D1%82%D1%8C+%D0%B7%D0%B0%D0%BF%D1%83%D1%89%D0%B5%D0%BD%D0%BD%D1%8B%D0%B5+%D0%B8%D0%BC+%D0%BF%D1%80%D0%BE%D1%86%D0%B5%D1%81%D1%81%D1%8B

    Всего записей: 4 | Зарегистр. 14-09-2007 | Отправлено: 01:53 21-05-2011
    Открыть новую тему     Написать ответ в эту тему

    Страницы: 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 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125

    Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по Delphi (до версии 2009) - часть 6


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

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

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru