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

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



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

    Всего записей: 2536 | Зарегистр. 20-06-2011 | Отправлено: 07:29 23-04-2013
    Grande



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    XPerformer
    PostgreSQL, TZQuery из ZeosDBO.

    Всего записей: 588 | Зарегистр. 18-09-2003 | Отправлено: 07:31 23-04-2013 | Исправлено: Grande, 07:34 23-04-2013
    XPerformer



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Grande
    цикл не нужен, конечно. С этими компонентами не помогу, не работал с ними
     
    Добавлено:
    А демка к ним идет? Она тоже не работает без задержки?

    Всего записей: 2536 | Зарегистр. 20-06-2011 | Отправлено: 07:40 23-04-2013
    Grande



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    XPerformer
    В демках ничего толкового нет.

    Всего записей: 588 | Зарегистр. 18-09-2003 | Отправлено: 07:52 23-04-2013
    OOD

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Подскажите пожалуйста есть ли что либо толковое для разработки Delphi под Android?

    Всего записей: 3379 | Зарегистр. 20-05-2006 | Отправлено: 14:07 29-04-2013
    LadyOfWood

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

    Цитата:
    Подскажите пожалуйста есть ли что либо толковое для разработки Delphi под Android?

    Пока нет только, толькоо iOS, и не очень толковое. Обещают под Android то не факт что будет толковое.

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

    Junior Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    OOD
    Пишу на Java/Eclipse для планшета, но связь с БД идет через промежуточный сервер, который взаимодействует с планшетами посредством т.н. Datasnap Mobile Connectors
    Так что delphi тоже участвует

    Всего записей: 69 | Зарегистр. 10-01-2006 | Отправлено: 22:53 29-04-2013 | Исправлено: krapotkin, 22:54 29-04-2013
    Vitus_Bering



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    OOD
    _http://tmssoftware.com/site/tmsiwiphone.asp

    Всего записей: 936 | Зарегистр. 30-09-2005 | Отправлено: 12:29 30-04-2013
    MoLnuS



    Junior Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Здравия вам, люди!=)
     
    Есть задание, связанное с анкетами. Всё его излагать не буду, т.к. вопрос пока лишь по одной части. Пытаюсь сделать более менее удобный конструктор анкет. Добавление вопросов, вариантов ответов, удаление вариантов и вопросов целиком. Пока лишь "скелет" программы.
    Для ясности программу прилагаю, качать здесь.
    Работает пока только "Создать анкету", туда и жмите) Исходники целиком скину по надобности.
     
    И сами вопросы по порядку:
    1. Не могу понять, как корректно удалить весь вопрос целиком, т.е. как видно из программы - каждый вопрос на отдельной панельке. При нажатии на "Удалить вопрос" выполняется след.код:
    Подробнее...
    Саму кнопку удаления здесь удалить не выходит, т.к. выскакивает Абстракт еррор, потому приходится её только скрывать. Как её можно удалить? И удаляется ли таким образом вообще всё содержимое панели, или же я делаю что-то не то и оно остается?  
     
    2. Все компоненты вопроса здесь создаются динамически, с этим у меня пока проблемы..опыта в работе с динамикой почти нет. Не совсем понимаю, как потом различать текст в едитах и тд. Пока идея только присваивать им имена, допустим панелям "pnl+i" где i - номер панели, с едитами примерно так же, а доступ к ним получают вот так:

    Код:
    pl:=FindComponent('pnl'+inttostr(i)); //доступ к панелям
    pl.FindComponent('edtQ'+inttostr(i)) //доступ к едитам

    и в цикле их перебираю.. От нуля и до макс.номера панели
    едита. Вроде работает, но возможно, это сверх тупо?)
    Еще тут проблема, что он видит и удаленные едиты\панели..от сюда сомнения в их удалении.
     
    Delphi 7.

    Всего записей: 191 | Зарегистр. 21-05-2009 | Отправлено: 20:51 24-05-2013 | Исправлено: MoLnuS, 21:24 24-05-2013
    XPerformer



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    по первому вопросу. нельзя из обработчика объекта удалить сам объект, т.к. управление после завершения выполнения обработчика некуда вернуть. это как спилить сук, на котором сидишь
     
    Добавлено:
    по второму вопросу - удаленные он видеть не может. Наверное, это скрытые объекты

    Всего записей: 2536 | Зарегистр. 20-06-2011 | Отправлено: 21:39 24-05-2013
    MoLnuS



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

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

    По первому, это я уже понял. А как иначе можно ее удалить, не подскажете? Вопрос был в этом + если он таки может найти удаленный компонент через findcomponent, значит метод free их не удаляет?? И как их тогда убить?

    Всего записей: 191 | Зарегистр. 21-05-2009 | Отправлено: 08:11 25-05-2013
    miwa

    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    MoLnuS
    По поиску динамических объектов - ничего сверх тупого нет, все нормально.
     
    По удалению объектов - их надо удалять из внешнего обработчика. Метод Free его удаляет, можно не сомневаться (лично я использую FreeAndNil, но это уже кому как нравится); а чтобы он работал, его надо вызывать не из OnClick удаляемого объекта. Как вариант - по клику только помечать на удаление, а реально удалять по нажатию кнопки типа «Удалить отмеченные элементы». Вариант сложнее - по клику прятать (Visible := False) и как-то отмечать (Tag := 1234) неугодные объекты, а удалять позже (раз в минуту запускать очищающую процедуру).

    Всего записей: 455 | Зарегистр. 10-10-2004 | Отправлено: 10:11 25-05-2013
    MoLnuS



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

    Цитата:
    Вариант сложнее - по клику прятать (Visible := False) и как-то отмечать (Tag := 1234) неугодные объекты, а удалять позже (раз в минуту запускать очищающую процедуру).

    Ну это же доп нагрузка будет..=(( Плюс, тут такой косяк получится, если хоть один объект на панели есть - панель существует, а у меня в обходе по панелям и сбору от туда вопросов\вариантов тогда сломается всё...хотя там можно в принципе проверять, есть ли там вообще едиты, тогда все ок будет..
     
    В общем, если таки не выйдет..придется делать по таймеру очистку да.. По выходу из программы ведь оно само должно очистится, или же нет - и тоже придется запускать процедуру очистки по событию Close?
     
    Я сумел сделать более менее работающий алгоритм удаления всего и вся, вот такой:
    Подробнее...
    И о чудо, оно безупречно (как мне кажется) работало..до того момента, пока я не сделал добавление оценочных вопросов.. Теперь все работает не так замечательно,  когда возникает ситуация такого рода: добавляем два закрытых, потом два оценочных, удаляем посл(верхний) оценочный - хлабысь ошибка(при чем иногда ошибка доступа к такому-то адресу, а иногда Абстракт еррор).. Не понимаю, почему в иных ситуациях все отлично, а в некоторых вылетает..
    Даю исходник, может кто поэкспериментирует и скажет, в чем дело)) Ведь почти получилось удалить без "отложенного" способа.

    Всего записей: 191 | Зарегистр. 21-05-2009 | Отправлено: 11:31 25-05-2013 | Исправлено: MoLnuS, 11:32 25-05-2013
    miwa

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

    Цитата:
    Ну это же доп нагрузка будет.

    На то, чтобы перебрать в памяти список? Несколько тысяч тактов процессора? Полторы наносекунды? Ну, блин, даже не знаю... Оптимизируй на ассемблере  
    Если серьезно - при отсутствии явных ошибок в коде нагрузка будет в пределах статистической погрешности.
     
    При выходе из программы все объекты и так уничтожаются, так что по Close можно ничего не делать.
     
    У твоего «более-менее работающего алгоритма» есть один недостаток - переход по объектам с целью удаления всегда делается в обратом порядке:  
     
    for i := ComponentCount - 1 downto 0
     
    Почему - сам подумай

    Всего записей: 455 | Зарегистр. 10-10-2004 | Отправлено: 11:54 25-05-2013
    MoLnuS



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

    Цитата:
    Если серьезно - при отсутствии явных ошибок в коде нагрузка будет в пределах статистической погрешности.

    Ну ок тогда=) Просто на всякий случай уж..%))
     

    Цитата:
    У твоего «более-менее работающего алгоритма» есть один недостаток - переход по объектам с целью удаления всегда делается в обратом порядке:  
     
    for i := ComponentCount - 1 downto 0
     
    Почему - сам подумай  

    Ммм..не понял, а какая разница? У меня же там всегда удаляется нулевой, кроме случая, когда нулевой =sender, затем удаляется первый, оставляя sender в нулевых. Разве есть разница от куда начинать отсчет?) Не понимаю, объясните, пожалуйста..
    И таки не доработать этот алгоритм, чтобы он работал в 100% случаев..?
     
    Добавлено:
    Кстати, вот еще вопрос какой.
    Как лучше всего сохранять анкету? У меня в идеях пока только excel-файлы.. Может есть варианты получше?

    Всего записей: 191 | Зарегистр. 21-05-2009 | Отправлено: 12:21 25-05-2013
    LadyOfWood

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

    Цитата:
    Разве есть разница от куда начинать отсчет?) Не понимаю, объясните, пожалуйста..  

    Есть, раскрутка с начала приводит с тому что в конце получаешь AV.

    Всего записей: 620 | Зарегистр. 16-09-2003 | Отправлено: 22:08 25-05-2013
    XPerformer



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    MoLnuS
    for i := ComponentCount - 1 downto 0
    удалил первый элемент, ComponentCount уменьшилось на 1 единицу, а паскале границы цикла вычисляются один раз. Усек идею?

    Всего записей: 2536 | Зарегистр. 20-06-2011 | Отправлено: 15:39 26-05-2013
    miwa

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

    Цитата:
    Как лучше всего сохранять анкету? У меня в идеях пока только excel-файлы.. Может есть варианты получше?

    Зависит от того, что дальше с ней планируется делать. Если только смотреть - я бы PDF генерировал; если анкету будет анализировать еще какая-то программа, тогда я бы сохранял в XML. А для внутреннего пользования - так как удобно мне (типизированные файлы/встроенная база данных/etc). Самый правильный вариант, как по мне - хранить во внутреннем формате с возможностью експорта.

    Всего записей: 455 | Зарегистр. 10-10-2004 | Отправлено: 10:48 27-05-2013
    XPerformer



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Скажите, как грамотно делаются такого рода подсказки в меню

     
    Можно, конечно, задисейблить этот пункт меню... но, может, надо по-другому?

    Всего записей: 2536 | Зарегистр. 20-06-2011 | Отправлено: 21:27 29-05-2013
    miwa

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

    Всего записей: 455 | Зарегистр. 10-10-2004 | Отправлено: 12:47 30-05-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