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

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

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Frodo_Torbins СПАСИБО.
    Признаться пока мало понял из того что там написано, но стараюсь переварить.
    Сам нашел это  
    webdelphi.ru/2009/08/izmenyaem-html-kod-v-webbrowser/
    и это
    webdelphi.ru/2009/08/vybor-elementov-v-select-delphi/
     
    Признаться не думал, что, чтобы сделать нечто подобное прийдется прибегать к использованию стороннего языка програмирования.  
    Странно, во всех браузерах, что мне встречались, в многих программах даный вопрос решен, но не где толком не удается найти как это делается. Удается найти упомянание опочти всем, по крайней мере в обобщенной форме, но данная тема вообще вероятно не кого не интересует...
    Буду разбираться дальше.
    P.S. Кстати да, сделал все как в премере по первой ссылке в этом посте, действиельно, нажимаю правой кнопкой мыди, смотрю код, внесенные на страницу изменения не ведны в коде.
    "Истина гдето рядом".....  

    Всего записей: 65 | Зарегистр. 21-12-2009 | Отправлено: 03:30 16-03-2011 | Исправлено: Wadim51, 05:23 16-03-2011
    Man_Without_Face



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Есть указатель на рекорд, подскажите как прочесть значение 5го байта рекорда?
     
    procedure OnReceivePacket(ReceiveData: pointer);
    var ppUin: cardinal;
          pNum:  byte;
    begin
      Move(ReceiveData^, ppUin, 4);
      if ppUin = 123456789 then
        begin
          inc(ReceiveData, 4); // ???
          Move(ReceiveData^, pNum, 1);
          showmessage(inttostr(pNum));
        end;
    end;
     
    Добавлено:
    Вроде как-то так:
    inc(cardinal(ReceiveData), 4);

    Всего записей: 381 | Зарегистр. 25-01-2010 | Отправлено: 09:52 24-03-2011
    Frodo_Torbins

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Man_Without_Face
    В вашем коде можно без Move, простым присваиванием.
    Кстати есть еще такой вариант:

    Код:
    type
      TByteAccess = packed record
        First, Second, Third, Forth: Byte;
      end;
      PByteAccess = ^TByteAccess;
    var p:PByteAccess;
    begin
      p:=@Caption[1];
      Button1.Caption:=Char(p^.Third);
    end;

    Всего записей: 2318 | Зарегистр. 24-05-2007 | Отправлено: 11:45 24-03-2011
    Man_Without_Face



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Frodo_Torbins
    ок, спасибо. Тогда такой вопрос:
    Вышеописанная функция из Dll. На месте showmessage будет case, т.е. если = 1 нужно вызвать одну функцию из exe, если = 2 то другую.  
    В exe в dpr прописал:
    exports
      Ping name 'Ping';
     
    в unit'e:
    function Ping(var CenterSource: word; CenterObject: word; FromHostIP: Uint64): Boolean; stdcall; export;
     
    Как Ping вызвать из Dll? В нете есть пара примеров, но толком ничего не понял.  

    Всего записей: 381 | Зарегистр. 25-01-2010 | Отправлено: 13:02 24-03-2011
    Frodo_Torbins

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Man_Without_Face
    На сколько я помню, это будет работать только с явным вызовом (через GetProcArdess). Причем таким образом длл может вызвать функции лишь того экзешника, который ее загрузил. Еще одно ограничение - чтобы GetProcArdess нормально отработала, в экзешнике должна быть секция экспорта. А эту секцию очень часто специально вырезают для экономии памяти, так что проверьте настройки компилятора.
    Избавится от всех этих проблем одним махом можно явно передавая в длл адреса функций обратного вызова. Если же таких функций предвидится много, то можно применить интерфейсы, примерно так: http://www.delphikingdom.com/asp/viewitem.asp?catalogid=468

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



    Newbie
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    как реализовать в Delphi 7 вывод в memo случайной строки из из файла *.txt ?

    Всего записей: 11 | Зарегистр. 07-01-2011 | Отправлено: 17:01 29-03-2011
    Frodo_Torbins

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    InkMission
    Загрузите файл в TStringList а потом функцией Random выберите какую строку выводить.

    Всего записей: 2318 | Зарегистр. 24-05-2007 | Отправлено: 18:52 29-03-2011
    ShIvADeSt



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

    Цитата:
    Загрузите файл в TStringList а потом функцией Random выберите какую строку выводить.

    У Мемо вроде тоже есть возможность обращаться к любой строке. В крайнем случае можно заюзать АПИ функции, которые возвращают строку по номеру.

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

    Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 06:50 30-03-2011
    Frodo_Torbins

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ShIvADeSt
    Я думаю, у InkMission была проблема сделать хоть как-нибудь. И как мне кажется, вариант со стринглистом довольно неплохой. Единственное что мне не понятно, так это почему в примерах на delphibasics.ru нету удаления объектов. Либо там все для Delphi.Net, либо тот, кто их писал, сам в делфи не разбирается.

    Всего записей: 2318 | Зарегистр. 24-05-2007 | Отправлено: 13:08 30-03-2011
    ShIvADeSt



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

    Цитата:
    Я думаю, у InkMission была проблема сделать хоть как-нибудь.

    Посмотрел хелп
    Memo1.Lines - возвращает строки, которые находятся в Мемо (тип TStrings).  
    Тьфу, блин. Я прочитал задание с точностью до наоборот Я думал из Мемо вывести в файл случайную строку. А ему надо из файла в Мемо, тогда Вы абсолютно правильно предложили.


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

    Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 07:23 31-03-2011
    Man_Without_Face



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

    Цитата:
    Избавится от всех этих проблем одним махом можно явно передавая в длл адреса функций обратного вызова

    Не получается вызвать callback функцию с нужного мне места:
    Подробнее...
    а еще после закрытия exe, dll не выгружается (по логам вижу). Delphi2009.

    Всего записей: 381 | Зарегистр. 25-01-2010 | Отправлено: 12:49 31-03-2011
    Frodo_Torbins

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Man_Without_Face
    Неплохо бы указать соглашения вызова. Кроме того в делфи уже есть тип TProc, проверьте какой из них используется в этом вашем "другом юните".

    Всего записей: 2318 | Зарегистр. 24-05-2007 | Отправлено: 14:02 31-03-2011
    Man_Without_Face



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

    Цитата:
    Кроме того в делфи уже есть тип TProc

    да спасибо, разобрался, помогло

    Цитата:
    а еще после закрытия exe, dll не выгружается (по логам вижу)

    убрал и в dll и в exe ShareMem, вроде помогло.
     
    Да и все это у меня работает через потоки в Dll (CriticalSection).
     

    Цитата:
    Неплохо бы указать соглашения вызова.

    Это как и для чего?
     
     

    Всего записей: 381 | Зарегистр. 25-01-2010 | Отправлено: 17:16 31-03-2011
    Frodo_Torbins

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Man_Without_Face
    Цитата:
    Это как и для чего?  

    Это на тот случай, если вдруг понадобится написать плагин на другом языке. Соглашения прописываются и в exe, рядом с объявлением процедуры, и в dll, рядом с объявлением типа.

    Всего записей: 2318 | Зарегистр. 24-05-2007 | Отправлено: 18:18 31-03-2011 | Исправлено: Frodo_Torbins, 18:23 31-03-2011
    GRom V

    Full Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    подскажите ктонить...
    Begin
    Reg.RootKey:=HKEY_LOCAL_MACHINE;
    Reg.OpenKey('\Software\Microsoft\Windows',True);
    Reg.WriteString('4',Application.ExeName);
    Reg.Free;
    end;
     
    в windows 7 это делается под админом. Соответственно если запускать от обычного юзера прога выдает ошибку, т.к. нет доступа
    Как сделать чтоб ошибок вооще не выдавало?
    т.е если не удалось открыть то и фиг с ним...???

    Всего записей: 466 | Зарегистр. 31-10-2006 | Отправлено: 15:50 06-04-2011
    psa1974



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    GRom V
    Самое простое решение - заключить в блок try... except и при необходимости обрабатывать исключение:
    пример

    ----------
    У программёра есть два состояния: "Втупляю" и "Попёрло"...

    Всего записей: 438 | Зарегистр. 08-11-2005 | Отправлено: 16:13 06-04-2011
    GRom V

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

    Всего записей: 466 | Зарегистр. 31-10-2006 | Отправлено: 04:55 07-04-2011
    Man_Without_Face



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Доброго времени суток, подскажите что делают не так (в итоге получаю не те значения):
    Подробнее...
    Все в Dll на Delphi2009.

    Всего записей: 381 | Зарегистр. 25-01-2010 | Отправлено: 10:14 07-04-2011
    greenpc

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Man_Without_Face
    первое что бросилось в глаза

    Код:
    ReceiveData: pointer


    Код:
    getmem(RD, sizeof(ReceiveData^));  

    размерчик равен 0

    Код:
    getmem(RD, ReceiveDataLength)

    Всего записей: 401 | Зарегистр. 18-04-2003 | Отправлено: 12:03 07-04-2011 | Исправлено: greenpc, 12:11 07-04-2011
    Man_Without_Face



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    greenpc
    Да, спасибо. Входные параметры будут заполняться с другой dll. А пока я на таймере моделирую. Не совсем понял почему так нельзя: разыменовываеш указатель, т.е. получаеш доступ к данным куда он указывает, так почему нельзя их размер узнать?
    --------------------------
    но дальше еще хуже. AV валят один за другим.
    --------------------------
    Такой вопрос: в дебагере при наведении курсора на указатель, показывается адрес памяти (в 16 системе) указателя или адрес данных куда он указывает.
    И еще: move(ReceiveData^, RD^, ReceiveDataLength); здесь указатели нужно разыменовывать или нет (move(ReceiveData, RD, ReceiveDataLength);) ?

    Всего записей: 381 | Зарегистр. 25-01-2010 | Отправлено: 13:11 07-04-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