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

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

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Подскажите коллеги
       Есть указатель, объявленный как var p1:POINTER.
       С помощью byte(p1^) можно получить доступ к байту на который указывает p1
    Не знаю как увеличить значение этого указателя чтобы он указывал на следующий байт в памяти
       Всякие там PTR() работали на 16 разрядной оси и не применимы для 32р
     
    если объявить указатель как var p1:^byte
       то  inc(p1,1) работает как нужно но хотелось бы чтобы p1 был как poiner, а тогда inc(byte(p1),1) выдает ошибку

    Всего записей: 148 | Зарегистр. 10-10-2010 | Отправлено: 11:26 08-03-2013 | Исправлено: alex1334, 12:56 08-03-2013
    Frodo_Torbins

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    alex1334
    В старых делфях арифметика указателей работает только для PChar.

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

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

    Цитата:
    если объявить указатель как var p1:^byte     то  inc(p1,1) работает как нужно но хотелось бы чтобы p1 был как poiner, а тогда inc(byte(p1),1) выдает ошибку

    Если память не изменяет, то всегда существовал вот такой способ:
    Inc(Integer(P), N);
    где P - это (не)типизированый указатель, а N - смещение в байтах.
     
    Что-то мне подсказывает, что это всегда так было, но утверждать не стану.

    Всего записей: 767 | Зарегистр. 18-05-2009 | Отправлено: 12:26 09-03-2013
    alex1334

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Спасибо всем
     
    var p:pointer
     
    inc(integer(p),n)  работает, если N не писать то указатель увеличивается на 1 байт, при n=2 указатель увеличивается на 2 байта...

    Всего записей: 148 | Зарегистр. 10-10-2010 | Отправлено: 21:57 09-03-2013
    alex1334

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Подскажите - внутри тела процедуры установил оператор
     
     application.ProcessMessages; чтобы система не подвисала при длительной операции
     
        теперь мучают сомнения что система получив управление возвратит управление опять моей проге если я например щелкну кнопкой например закрыть файл (а еще хуже -- открыть новый), так как это в будущем вызовет  исключение в процедуре куда будет возвращено управление после   application.ProcessMessages
         Нужно ли использовать какую нибудь синхронизацию для защиты важных указателей (если так можно сказать)

    Всего записей: 148 | Зарегистр. 10-10-2010 | Отправлено: 16:47 10-03-2013
    topdon

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Уважаемые коллеги, прошу помощи!
    Имеется Делфи МДИ- приложение, главная форма и модуль данных DMForm.
    На этой форме ADOConnection и все формы приложения соединяются через него. Все работает.
    Вчера стал делать динамическую связь с БД, но обнаружил, что из главной формы я не могу заменить ConnnectionString в дочерней, т.к.  
    она недоступна (через точку в списке не выдается). Как это может быть и что делать,
    т.к. uses-ы все стоят где надо?
     
    В. Фролов

    Всего записей: 71 | Зарегистр. 26-09-2009 | Отправлено: 09:24 11-03-2013
    Frodo_Torbins

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    alex1334
    Такая проблема обязательно возникнет. Поэтому Application.ProcessMessages не рекомендуется применять без особой необходимости и без Form.Disable. Вместо этого стоит использовать как минимум курсор с часиками, или что то типа такого: http://www.delphikingdom.com/asp/viewitem.asp?catalogid=1169 Но лучше всего выделить длительные действия в отдельный поток.
     
    topdon
    То, что не выдается список еще ничего не значит. Попробуйте написать рабочий, по вашему мнению, код и скомпилить его.

    Всего записей: 2318 | Зарегистр. 24-05-2007 | Отправлено: 14:36 11-03-2013
    alex1334

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Frodo_Torbins
       Спасибо. За ответ.  Хотел сделать чтобы при отображении большого файла в память пользователь уже сразу мог начать с ним работать, что собственно и происходит, можно перемещаться по таблице, править..., как только очередной лист отобразился уже появляется закладка и можно его смотреть, загрузка листа может быть до 5..7 сек всего листов до 50. Но вы меня натолкнули на мысль чтобы не form.disable а попробовать action menedger как нибудь disable.  
      Хочу попутно спросить если программа  которая открыла отображаемый в память файл размером 90МВ аварийно была снята где эти 90МВ повиснут. Надо ли чтобы программа при следующем пуске как то подчистила за собой диск или это возлагается на систему.
     Как я понял win XP не использует файл подкачки для поддержки map-файлов

    Всего записей: 148 | Зарегистр. 10-10-2010 | Отправлено: 19:36 11-03-2013
    Frodo_Torbins

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    alex1334
    При открытии отображаемого в память файла, можно указать его расположение в файловой системе. Если этого не было сделано, то чистить ничего не надо.

    Всего записей: 2318 | Зарегистр. 24-05-2007 | Отправлено: 22:42 11-03-2013
    Xom9in

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

    Всего записей: 1 | Зарегистр. 14-03-2013 | Отправлено: 19:13 14-03-2013
    ant0ni02004

    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Xom9in
    придётся читать заголовок файла и определять по сигнатуре. посмотрите, например, как это сделано в TMyDBImage

    Всего записей: 442 | Зарегистр. 26-10-2004 | Отправлено: 20:56 14-03-2013
    Frodo_Torbins

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Xom9in
    Если нужны готовые сигнатуры и движок их распознавания, то вам сюда: http://mark0.net/code-tridlib-e.html

    Всего записей: 2318 | Зарегистр. 24-05-2007 | Отправлено: 21:55 14-03-2013
    alex1334

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Подскажите как в F1book компоненте получить число не пустых строк на листе, или номер последней не пустой строки

    Всего записей: 148 | Зарегистр. 10-10-2010 | Отправлено: 13:40 16-03-2013
    MoLnuS



    Junior Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Подскажите, пожалуйста, почему свойство Mode компонента MediaPlayer не переходит в mpStopped после окончания воспроизведения? Мелодия закончилась, происходит событие Notify, процедура в нем выполняется только если Mode=mpStopped (мелодия закончилась-играем следующую), а оно всё еще mpPlayed =_____= Что за нафик?
    Может я чего не допонимаю или так и должно быть...

    Всего записей: 191 | Зарегистр. 21-05-2009 | Отправлено: 17:50 25-03-2013 | Исправлено: MoLnuS, 20:00 25-03-2013
    Dmitry

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

    Цитата:
    Отчет о проделанной с FGInt работе.
     
    1) Все в FGInt явно привел к Ansi.
    2) Нашел у себя косяк с вычислением приватной экспоненты (засовывал при ее вычислении n вместо функции Эйлера).
    3) Использовал для хранения шифрованного-дешифрованного текста не RichEdit.Lines.Text, а глобальные переменные AnsiString.
     
    После этого все заработало! Можно ли FGInt явно не приводить к Ansi не проверял.
     
    Всем большое спасибо за помощь!

     
    Советую пользоваться готовыми библиотеками. Например - cryptlib (http://www.cs.auckland.ac.nz/~pgut001/cryptlib/). Есть интеграция с дельфями
     
    Добавлено:
    ant0ni02004

    Цитата:
    так читайте таблицу(select) в read-only, а редактируйте 1 запись в pessimistic (т.е. в другом adoquery)
    и еще - обратите внимание на TBetterAdoDataSet, он получше TAdoQuery будет
    и всё-таки - используйте select for update where id=:id

     
    никогда не надо так делать - здорово просядет производительность. к блокировкам нужно подходить осмотрительно. лучше на прикладном уровне подобные проблемы решать - ну там флаг какой-нибудь повесить на запись или еще что-нибудь похожее.

    Всего записей: 81 | Зарегистр. 24-09-2003 | Отправлено: 21:22 01-04-2013
    delover

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

    Код:
    if (vPeriod.RecNo > 1) and
        vPeriod.DataByCell['ACTIVE', vPeriod.RecNo-1] then
        begin

    Имея директиву Complete Boolean Evaluation = False, мы имеем другое поведение, чем предполагается. При RecNo = 1 всё равно вычисляется второе условие. Оказывается так как DataByCell имеет тип Variant, первое условие преобразовывает Boolean к варианту, вычисляется второе и делается call @VarAnd. Естественно, что при RecNo=1 мы имеем ошибку. А вот так вот:

    Код:
    if (vPeriod.RecNo > 1) and
        Boolean(vPeriod.DataByCell['ACTIVE', vPeriod.RecNo-1]) then
        begin

    Поведение будет стандартное.

    Всего записей: 1395 | Зарегистр. 25-06-2007 | Отправлено: 11:16 02-04-2013
    djmix77



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Добрый день! есть вопрос!  
     
    Как на дельфи реализовать прожку
     
    выделение необходимого участка экрана и отслеживание событий на этом участке, точнее если в выделенном фрагменете ничего не проихсодит то всё норм. чуть только поменялось то сигнализирует об этом(и безграничная фантазия как)
     
     
    спасибо заранее!
     

    Всего записей: 167 | Зарегистр. 31-08-2006 | Отправлено: 14:48 18-04-2013
    LadyOfWood

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

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

    Что подразумевается под изменениями? Просто делать скрины через заданные интервалы времени.

    Всего записей: 620 | Зарегистр. 16-09-2003 | Отправлено: 14:52 18-04-2013
    FuryArrow

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

    Всего записей: 590 | Зарегистр. 27-01-2010 | Отправлено: 11:11 22-04-2013 | Исправлено: FuryArrow, 14:54 22-04-2013
    Grande



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Уважаемые знатоки, может, кто сталкивался с подобной траблой.
    Имеется код:

    Код:
     
        qryQuery.Prepare;
        qryQuery.Open;
     

    После выполнения в гриде (EhLib) пусто.
     
    А вот так:

    Код:
     
      for i := 0 to 100 do
      begin
        Sleep(10);
        Application.ProcessMessages;
      end;
     
      qryQuery.Prepare;
      qryQuery.Open;
     

    Работает.
     
    Т.е., TQuery не успевает отработать ?!!!
    Как тогда изменить код, чтобы избавиться от некрасивой конструкции со Sleep'ом?
    Спасибо.

    Всего записей: 588 | Зарегистр. 18-09-2003 | Отправлено: 07:25 23-04-2013
    Открыть новую тему     Написать ответ в эту тему

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