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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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
    MrZeRo



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Aleksandr N
    И еще вдогонку один момент. На самом-то деле нельзя "запретить" собственно запуск второй копии приложения, можно только в начале выполнения вашей программы узнать как можно раньше (это самое важное!) что уже такая программа запущена и выйти. В этой связи имеет смысл воспользоваться подходом описанным в статье по моей ссылке: разместить соответствующий код проверки в отдельном модуле и этот модуль подключить первым.  
     
    По поводу подходов, еще существует подход с Memory Mapped Files (файлы отображаемые в память), можно найти у Рихтера, там аналогично мьютексам, но надо писать больше кода, а результат тот же самый.

    ----------
    ... не это главное ...

    Всего записей: 831 | Зарегистр. 30-01-2002 | Отправлено: 10:31 28-08-2012
    Aleksandr N

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    MrZeRo
    Вот зараза, на виртуалке повторного запуска приложения с моим кодом не происходит. Это бывает только на основной системе. Нужно найти время чтобы чтобы поиздеваться над осью...
    Про отображение в памяти тоже знаю, использую в этой программе но для других целей. Не хотелось этот способ ещё и в этих целях использовать, но если будет работать, то придётся.

    Всего записей: 1665 | Зарегистр. 25-02-2008 | Отправлено: 17:38 28-08-2012
    OOD

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Подскажите пожалуйста что не так :
    ShellExecute(Handle,nil,'msinfo32.exe /report C:\config.txt',nil,nil,SW_HIDE);
    Параметры запуска  
    Код:
    /report C:\config.txt  
    не срабатывают
    нужно запустить msinfo32.exe в скрытом режиме .

    Всего записей: 3378 | Зарегистр. 20-05-2006 | Отправлено: 10:27 29-08-2012
    Frodo_Torbins

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    OOD
    Параметры запуска экзешника вписываются в отдельно в следующий параметр функции.

    Всего записей: 2318 | Зарегистр. 24-05-2007 | Отправлено: 13:45 29-08-2012
    OOD

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Все равно окно сведения о системе продолжает висеть
    ShellExecute(Handle,nil,'msinfo32.exe','/report config.txt',nil,SW_HIDE);

    Всего записей: 3378 | Зарегистр. 20-05-2006 | Отправлено: 13:57 29-08-2012
    Frodo_Torbins

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    OOD
    Если прога не поддерживает работу в скрытом режиме, то тогда разве что на скрытом десктопе ее запускать: http://www.delphikingdom.com/asp/answer.asp?IDAnswer=70742

    Всего записей: 2318 | Зарегистр. 24-05-2007 | Отправлено: 17:01 29-08-2012
    MrZeRo



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    OOD
    А если через CreateProcess и в параметре Startupinfo.wShowWindow указать SW_HIDE, dwFlags = STARTF_USESHOWWINDOW ? Не гарантия что получится, по идее этот способ почти эквивалентен вашему, то можно попробовать. Там еще можно попытаться установить нулевой размер окна в Startupinfo не забыв при этом в dwFlags включить STARTF_USESIZE.

    ----------
    ... не это главное ...

    Всего записей: 831 | Зарегистр. 30-01-2002 | Отправлено: 17:33 29-08-2012
    eddoc



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

    Цитата:
    Вычисление хэш МД5 файла.
    http://pastebin.com/ESDT6eEm

    лучше пользоваться родными дельфевыми модулями
    http://www.webdelphi.ru/2010/05/kriptografiya-v-delphi-sredstvami-indy-i-synapse/

    Всего записей: 328 | Зарегистр. 25-11-2007 | Отправлено: 19:19 29-08-2012
    shadow user777



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    eddoc
    Я честно говоря даже и приведенными мной копи-пастами  не знаю как пользоваться.
    Вопрос запустил на удачу. Авось кто подсобит с поделкой.
    Сам я однозначно не осилю, слишком мало времени на самообразование, и основ никаких.

    Всего записей: 1449 | Зарегистр. 31-07-2005 | Отправлено: 22:06 29-08-2012
    Frodo_Torbins

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    shadow user777
    Для поиска исполнителей у нас на форуме существует отдельная ветка, плюс куча специализированных сайтов типа free-lance.ru Если же у вас нет желания платить за такую работу и все же имеется немного свободного времени, то гляньте в сторону XStarter и HiAsm. Знаний языков программирования они не требуют.

    Всего записей: 2318 | Зарегистр. 24-05-2007 | Отправлено: 12:46 30-08-2012
    shadow user777



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Frodo_Torbins
    На втором я пишу, достиг определенных успехов, весьма неплохих. Однако длл в нём не напишешь. А мне нужна обычная виндовая длл. Ехе на хиасме  с этими функциями я написал очень давно, но мне ехе не подходит, мне длл нужна.
    Конструкторов имеющих возможность создать длл нет.

    Всего записей: 1449 | Зарегистр. 31-07-2005 | Отправлено: 17:06 30-08-2012
    Ichigo2



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Привет. У меня вопрос про динамические массиви.  
    Моя скупердяйная душа желает знать, правда ли что запись rec:=nil уничтожает весь массив или только указатель на него?

    Всего записей: 153 | Зарегистр. 01-05-2011 | Отправлено: 11:36 31-08-2012
    akaGM

    Platinum Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Ichigo2
    arr: array of double;
     
    ты про такие?
    тогда теория говорит, что надо звать setlength(arr, 0);

    Всего записей: 24056 | Зарегистр. 06-12-2002 | Отправлено: 11:56 31-08-2012
    XPerformer



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

    Цитата:
     правда ли что запись rec:=nil уничтожает весь массив или только указатель на него?

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

    Всего записей: 2536 | Зарегистр. 20-06-2011 | Отправлено: 13:14 31-08-2012
    Frodo_Torbins

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    shadow user777
    Если вы уже выросли из HiASM, то после выхода Delphi XE3, вам стоит ее попробовать. Там ожидается система Visual LiveBindings очень напоминающая HiASM. Да и компонентов для работы с системой на низком уровне для делфи тоже достаточно. Возможно вам даже удастся сделать все по хайасмовски, без написания кода вручную.
     
    akaGM
    Ничего дополнительно руками делать не надо, даже arr:=Nil не обязателен. Это и называется автоматическим управлением памятью.

    Всего записей: 2318 | Зарегистр. 24-05-2007 | Отправлено: 18:09 31-08-2012 | Исправлено: Frodo_Torbins, 18:11 31-08-2012
    A_V

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Ichigo2
    rec:=nil, так же как и setlength(rec, 0) приводит к вызову System._DynArrayClear, что уничтожает весь массив. правда обычно это не нужно, т.к массив имеет счетчик ссылок, и прекрасно уничтожается сам, при выходе из области видимости

    Всего записей: 770 | Зарегистр. 07-04-2002 | Отправлено: 11:15 01-09-2012 | Исправлено: A_V, 11:15 01-09-2012
    Bonivur



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Разбираю сейчас книгу Фаронова по созданию компонент (пример дан чуть ниже). Вопрос такой - в этом модуле определен метод Timer с параметрами (Sender: TObject). Далее этот метод вызывается в конструкторе Create , но уже БЕЗ параметров, более того, добавление параметров вызывает ошибку. Почему это так происходит? Зачем вобще этот параметр нужен? Это стандарт так вызывать процедуры и объявлять их в полях класса? Почему нельзя объявить метод Timer без параметра?
     
    Вот пример -  
    Код модуля

    ----------
    Что будет стоить тысяча слов когда важна будет крепость руки? (В.Цой)

    Всего записей: 655 | Зарегистр. 22-06-2003 | Отправлено: 12:02 07-09-2012
    salexn1



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Bonivur
    Видно плохо вы читали книгу...
    Метод Timer отрабатывает при событии OnTimer у объекта fTimer: TTimer...
    В конструкторе он НЕ ВЫЗЫВАЕТСЯ, а всего лишь указывается, что данный метод будет вызываться...
     
    Одним словом: читать,читать и еще раз читать

    Всего записей: 502 | Зарегистр. 21-02-2008 | Отправлено: 12:16 07-09-2012
    Bonivur



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    salexn1
    Просто если я определю процедуру MyProc с параметром, к примеру MyProc (val:Integer);
    то при вызове её без параметра мне напишет ошибку. А почему тут не пишет? И почему нельзя определить процедуру Timer вобще без параметра? Вот что мне хотелось бы узнать.

    ----------
    Что будет стоить тысяча слов когда важна будет крепость руки? (В.Цой)

    Всего записей: 655 | Зарегистр. 22-06-2003 | Отправлено: 22:50 07-09-2012
    Varenik



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Bonivur
    Тебе ж сказали:
    Цитата:
    В конструкторе он НЕ ВЫЗЫВАЕТСЯ, а всего лишь указывается, что данный метод будет вызываться...  

    FTimer.OnTimer := Timer;  
    Timer здесь стоит справа и не вызывается, а событию OnTimer присваивается указатель на метод Timer
    А нельзя объявить без параметра, потому что событие OnTimer имеет тип TNotify
    TNotify=procedure(Sender:TObject), поэтому этому событию можно присвоить только указатель на метод с таким же числом параметров (1) и таким же типом (TObject)


    ----------
    Если нравится, считайте, что получилось…

    Всего записей: 1766 | Зарегистр. 21-07-2001 | Отправлено: 08:25 08-09-2012
    Открыть новую тему     Написать ответ в эту тему

    Страницы: 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