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

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

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

ShIvADeSt (19-05-2010 05:14): Продолжаем тут http://forum.ru-board.com/topic.cgi?forum=33&topic=11215  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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

   

ShIvADeSt



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

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

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

  • Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 02:09 28-06-2009 | Исправлено: psa1974, 12:00 02-02-2010
    Varenik



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    eddoc
    После создания потока нужно дать ему запуститься:
    begin
    ....
        MyThread.Create;
        Application.ProcessMessages;
    ...
    end;  
    иначе поток стартует только после вот этого end

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

    Всего записей: 1766 | Зарегистр. 21-07-2001 | Отправлено: 07:49 13-05-2010
    Man_Without_Face



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

    Всего записей: 381 | Зарегистр. 25-01-2010 | Отправлено: 10:08 13-05-2010
    Frodo_Torbins

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

    Всего записей: 2318 | Зарегистр. 24-05-2007 | Отправлено: 11:17 13-05-2010
    delover

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Man_Without_Face
    Написать SQL для апдейта - то есть Вам необходимо как минимум два значения передавать - ID по которому запись изменять плюс значение поля. К тому не ясно почему кверь, если гораздо симпатичнее датасетом пользоваться. Об ускорении Query даже лучше не думать.

    Всего записей: 1395 | Зарегистр. 25-06-2007 | Отправлено: 11:40 13-05-2010
    Man_Without_Face



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    delover
    Спасибо, вопрос снят. Решил свой вопрос через калькулируемое поле.

    Всего записей: 381 | Зарегистр. 25-01-2010 | Отправлено: 11:57 13-05-2010
    eddoc



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Varenik
    Спасибо, собственно работало и так, и так Единственное НО: окошко сплэш-прекрасно отображается (я использую сплэш от softwarer'a, немного доработанное собственным напильником), только все равно в некоторые моменты оно не успевает прорисоваться код
     
    Похоже, придется изучать АПИ
     
    Frodo_Torbins
    Да, я уже понял, что кавалерийским наскоком в моем случае не обойдешься. Ладно, пойду читать Григорьева, благо эту книгу я в свое время прикупил "про запас"

    Всего записей: 328 | Зарегистр. 25-11-2007 | Отправлено: 23:22 13-05-2010
    YuriyRR



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    eddoc
     
     
    Добавлено:
    eddoc
    Создаешь окно в основном потоке а его перерисовку из трэда делаешь при помощи метода Synchronize.
     
    Добавлено:
    А в основном потоке  
    Call the CheckSynchronize routine periodically within the main thread

    Всего записей: 516 | Зарегистр. 07-06-2007 | Отправлено: 00:28 14-05-2010
    svs123456789

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    не будет ли проблем с работой старой Delphi 7  в среде Windows Seven ?

    Всего записей: 2934 | Зарегистр. 10-04-2003 | Отправлено: 09:55 14-05-2010
    ShIvADeSt



    Moderator
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Я под семеркой (Win7) Дельфи 5 поставил и компилял проекты. Проблем не было, думаю с Дельфи 7 тем более.

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

    Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 11:12 14-05-2010
    ppkp

    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Прошу прощения за возможно очень простой вопрос. Никогда не работал с TreeView (ну не довелось). У меня TreeView состоит только из одного корня и нескольких ветвей. Как менять какие-то данные при движении по TreeView вроде бы понятно - через OnChange. А как, наоборот, менять фокус у TreeView при изменении данных - запутался. Подскажите, пожалуйста, на примере. Спасибо.

    Всего записей: 480 | Зарегистр. 13-04-2006 | Отправлено: 15:06 14-05-2010
    eddoc



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    YuriyRR
    уже по-всякому пытался. В тестовых проектах все прекрасно отображается и рисуется, а вот в реале на WriteTrans.Commit происходит "замораживание" подлежащего сплэша и подлежащего окна, т.е. вот тут приложил скрины

    Цитата:
    А в основном потоке  
    Call the CheckSynchronize routine periodically within the main thread  

    как-то смущает справка

    Цитата:
    It is not necessary to call CheckSynchronize in a GUI application. The call to CheckSynchronize is made automatically by the application object. In a non-GUI application, you must call CheckSynchronize if you use the Synchronize method of TThread. To do this, set the WakeMainThread variable to a procedure that calls CheckSynchronize.  

    а не могли бы показать, где в моем коде надо воткнуть эту функцию?

    Всего записей: 328 | Зарегистр. 25-11-2007 | Отправлено: 16:32 14-05-2010 | Исправлено: eddoc, 18:12 14-05-2010
    Bonivur



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    У меня на форме есть Memo. При вставке в него текста, происходит обработка и результат опять пишется в этом Мемо. Как заставить его работать с Uncode? То есть,
     
    var  
      s: WideString;
    ...
     
    s := Memo.Text;
     
    далее невозможно сделать проверку типа
     
    if s[23] in ['a'..'z'] then...  
     
    пишет что типы не совпадают WideChar и Char. Какой может быть выход в данном случае?

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

    Всего записей: 655 | Зарегистр. 22-06-2003 | Отправлено: 18:48 14-05-2010
    psa1974



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Bonivur
    не воспроизводится. Пробовал в Д2007. Компиилятор предупреждает что "WideChar reduced to byte char in set expressions", но компилирует.

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

    Всего записей: 438 | Зарегистр. 08-11-2005 | Отправлено: 20:10 14-05-2010
    Bonivur



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    psa1974
    У меня Delphi 7. И там пишет Error: Incompatible types "WideChar" and "Char".

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

    Всего записей: 655 | Зарегистр. 22-06-2003 | Отправлено: 20:16 14-05-2010
    psa1974



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Bonivur
    Кстати, в Д2007 хоть и компилируется, но если в s[23] будет символ кириллицы то это if s[23] in ['а'..'я'] then... вернет ложь, потому что компилятор при сравнении WideChar c набором "Set of char" (который может адресовать только 256 символов - размер байта) от двухбайтового символа WideChar берет только один байт.
     
    Не знаю, есть ли в Delphi 7 ф-ция WideCharToString, но если есть, то как вариант:
    if (WideCharToString(@s[23])[1] in ['a'..'z']) then


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

    Всего записей: 438 | Зарегистр. 08-11-2005 | Отправлено: 20:46 14-05-2010 | Исправлено: psa1974, 20:48 14-05-2010
    Frodo_Torbins

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    eddoc
    Цитата:
    только все равно в некоторые моменты оно не успевает прорисоваться
    Попробуйте потоку со сплешем приоритет поднять. Возможно основной поток просто сильно нагружает процессор.
     
    Bonivur
    Поищите в теме про D2009, там несколько раз обсуждали варианты решения этой проблемы. Вроде даже ссылки на готовые решения были.

    Всего записей: 2318 | Зарегистр. 24-05-2007 | Отправлено: 21:16 14-05-2010 | Исправлено: Frodo_Torbins, 21:19 14-05-2010
    eddoc



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

    Цитата:
    Попробуйте потоку со сплешем приоритет поднять. Возможно основной поток просто сильно нагружает процессор.  

    увы... Поднял приоритет до критического - тот же результат. Щас попробую поюзать Рощинский WindowThread...
     
    добавлено позже: а компонент С.Рощина ваапче ничего не отрисовывает. Ы-ы-ы-ы ....
     
    Bonivur
    Как-то понадобилась проверка наличия символов кириллицы в строке (для D2007), пришлось написать свою функцию
    помятуя о том, что стандартные дельфевые функции не очень жалуют кириллицу.  
     
    Может, стоит попробовать сделать свой велосипед?

    Всего записей: 328 | Зарегистр. 25-11-2007 | Отправлено: 00:25 15-05-2010 | Исправлено: eddoc, 01:11 15-05-2010
    YuriyRR



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

    Цитата:
    а не могли бы показать, где в моем коде надо воткнуть эту функцию?

    Цитата:
    It is not necessary to call CheckSynchronize in a GUI application

    ее не обязательно конечно вставлять в чистом виде т.к. она вызывается в цикле
    обработки сообщений.Но программа то должна в него входить.
        while not EndProcFlag do  
          begin  
            Beep;//вместо кода отрисовки заставки-сплэша  
            Sleep(500);  
          end;
    В этом цикле такого входа нет, а чтобы появился добавляем
    в него Application.ProcessMEssages
     
     
     
    Добавлено:
    А вообще я к примеру пишу процедуры которые делают расчеты или обновления и возвращают в ходе этого кол-ва записей или проценты в цикле в селекте считываем из нее возвращаемые записи и выводим прогресбар или еще чего
    Очень эффективно.

    Всего записей: 516 | Зарегистр. 07-06-2007 | Отправлено: 04:20 15-05-2010
    Bonivur



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    eddoc
    Кстати, Ваша функция не находит буквы "Ё" и "ё". Для этого надо проверять также символы 168 и 184.

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

    Всего записей: 655 | Зарегистр. 22-06-2003 | Отправлено: 09:02 15-05-2010
    eddoc



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Bonivur
    ОК, подправил
     



    Цитата:
    происходит "замораживание" подлежащего сплэша и подлежащего окна

    вот ведь интересно, если написать вот так, то все равно "подлежащее" под скрином окно не перерисовывается  до своего закрытия.  
     
    Куда дальше копать - ума не приложу
     

    Всего записей: 328 | Зарегистр. 25-11-2007 | Отправлено: 09:56 15-05-2010 | Исправлено: eddoc, 12:37 15-05-2010
       

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

    Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по Delphi (до версии 2009) - часть 5
    ShIvADeSt (19-05-2010 05:14): Продолжаем тут http://forum.ru-board.com/topic.cgi?forum=33&topic=11215


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

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

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru