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

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



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Привет! Нужна небольшая консультация!
     
    Есть два компьютера. На одном стоит программа, которая должна получать данные о работе программы на втором компьютере через сеть!
    Допустим идет тестирование работника предприятия, принимающий сидя за компьютером в другой комнате должен получать данные о ходе тестирования...
     
    Подскажите к какому разделу помощи Delphi обращаться? Где кроме Delphi можно найти помощь по программированию с использованием сети? И какие компоненты нужно использовать?
     
    Заранее спасибо!!!

    Всего записей: 3 | Зарегистр. 12-04-2008 | Отправлено: 12:33 03-08-2009
    data man



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    eNIKmatic
    А потом предприятие для этих целей поставит ещё 4 компьютера, и проверяющий захочет тестировать сразу 5 человек...
     
    ИМХО, лучше поставить какой-либо SQL-сервер, и проги будут писать ход тестирования в базу данных.
    Так что обращаться нужно к разделу клиент-серверных технологий.
     
    P.S. Это я бы так сделал.

    Всего записей: 1696 | Зарегистр. 13-10-2005 | Отправлено: 12:44 03-08-2009
    eNIKmatic



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    data man
    Спасибо! Посмотрю...
    У кого-нибудь есть еще какие то предложения?

    Всего записей: 3 | Зарегистр. 12-04-2008 | Отправлено: 13:11 03-08-2009
    Frodo_Torbins

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    eNIKmatic
    Можно начать с изучения основ работы с сетью: http://www.delphikingdom.com/asp/itemq.asp?mode=1&ItemID=43

    Всего записей: 2318 | Зарегистр. 24-05-2007 | Отправлено: 14:40 03-08-2009
    lexx4

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    YuriyRR
    G787
    greenpc
    Спасибо за ответы. К сожалению, G787 похоже вскрыл суть проблемы. Code folding для Delphi 7 оказался слишком тяжелей задачей для реализации. Про CnPack он уже сказал, а вот что пишут про это GExperts в своем faq:

    Цитата:
    Will you please add method folding and other custom painting to the IDE's code editor?
    The functionality necessary to hide code lines is not surfaced by the Borland Open Tools API, and it would be unsafe and extremely complicated to implement without help from the IDE. Custom painting in the code editor isn't supported by the OTA either, so it requires low level hacking (windows hooks, runtime VMT patching, etc.) that is fairly error-prone and can slow down editing actions considerably, so as of yet nobody on the GExperts team has looked into this. Feel free to send us code contributions toward these features, but since code folding is present in Delphi 8 and greater, that feature is probably not worth implementing at this point.

     
    Что касается Castalia, то это расширение, конечно, облегчает форматирование кода. С другой стороны, тот же CnPack предоставляет отличные возможности для этого.
    Ну, а EControl Syntax Editor - это внешний редактор, в котором есть сode folding. Но это внешний редактор, и этим все сказано. Он не интегрирован в среду разработки, что, конечно, создает некоторые неудобства
     

    Всего записей: 6 | Зарегистр. 06-07-2005 | Отправлено: 16:15 03-08-2009
    Frodo_Torbins

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    А зачем вообще нужен этот сode folding в делфи? На сколько я знаю, никто им не пользуется даже в новых версиях делфей.

    Всего записей: 2318 | Зарегистр. 24-05-2007 | Отправлено: 17:33 03-08-2009
    lexx4

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Frodo_Torbins
    Чтобы скрывать во время редактирования или просмотра текста ненужные блоки кода. Просто визуальное уменьшение длины кода часто облегчает его восприятие.

    Всего записей: 6 | Зарегистр. 06-07-2005 | Отправлено: 18:56 03-08-2009
    DmitryKz

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

    Всего записей: 3142 | Зарегистр. 29-09-2005 | Отправлено: 20:12 03-08-2009
    Frodo_Torbins

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    lexx4
    Считается, что если длинный код уже плохо воспринимается, то самое время проводить рефакторинг. Минимум разбить его на подфункции. Если же нужно изучить чужой модуль, то лучше использовать специализированные средства. Мне, например, очень нравится ModelMaker Code Explorer.

    Всего записей: 2318 | Зарегистр. 24-05-2007 | Отправлено: 20:49 03-08-2009
    Aleksandr N

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Люди ставившие RAD Studio 2007 на Windows 7 помогите
    ссылка
    Подробнее...

    Всего записей: 1665 | Зарегистр. 25-02-2008 | Отправлено: 04:44 04-08-2009 | Исправлено: Aleksandr N, 05:26 04-08-2009
    greenpc

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    DmitryKz
    а что сложного написать самому, типа такого
    Код:
     
      var
        bFound: array[0..5] of Byte=(2,1,3,4,5);
        bRead: array[0..1024] of Byte;
      begin
        BlockRead(FromFile, bRead, SizeOf(bRead), NumRead);
        result:=-1;
        if NumRead< SizeOf(bFound) then exit;
        for i := 0 to NumRead - 1 - SizeOf(bFound) do begin
          if bRead[i]<>bFound[0]  then continue;
          YesFound := True;
          for j := 0 to SizeOf(bFound) - 1 do
            if bRead[i+j] <> bFound[j]  then  YesFound := False;
          if YesFound then Break;
        end;    // for
        result :=i;
     

    PS: думаю общий смсл понятен

    Всего записей: 401 | Зарегистр. 18-04-2003 | Отправлено: 10:23 04-08-2009 | Исправлено: greenpc, 10:25 04-08-2009
    StalkerSoftware



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Hi всезнающий All,
     
    Нашел на www.torry.ru пару весьма полезных компонент для раскраски или подчеркивании слов в обычном TMemo, причем что очень ценно они наследуются от обычного TMemo, что очень упрощает их интеграцию в свою библиотеку да и под D2009 они тоже работают.
    Нужны они мне для выделения слов для проверки орфографии.
     
    Вот ссылки на них:
    Highlight within TMemo
    Live spelling memo editor
     
    В принципе они работают достаточно неплохо.
    Для перерисовки из за изменений текста или из за других событий они используют сообщения
    WM_PAINT, WM_SIZE, WM_MOVE, WM_VSCROLL, WM_MOUSEWHEEL.
    и перекрывают обработчик
    procedure Change; override
     
    Но если в этом Memo выделить раскрашенный текст, то раскраска пропадает.
    Вопрос: Какое событие или сообщение можно использовать для TMemo, что бы вовремя или после выделения текста можно было бы вызвать из него Invalidate для повторной раскраски текста ?
    Ну и может быть All, посоветует какие ее события или сообщения надо обрабатывать  
    для TMemo, что бы не пропадала (или не портилась) раскраска текста ?
     
    P.S. По поводу RichEdit (его наследников) или RichView, SynEdit, SyntaxMemo от TMS или FastReport и других подобных навороченных компонентах я в курсе,  
    Но для моего случая (т.е. только для подчеркивание или раскраски неправильного слова при проверке орфографии) использование подобных компонент ИМНО излишне, все равно что из пушки по воробьям стрелять.

    Всего записей: 682 | Зарегистр. 23-06-2008 | Отправлено: 16:18 04-08-2009
    data man



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    StalkerSoftware
    Самый простой способ - в конце события MouseUp (можно и в KeyUp тоже) дописать

    Код:
     if SelLength = 0 then invalidate;

    P.S. IMHO, в этих компонентах ужасная реализация - слишком мерцает.
     
     

    Всего записей: 1696 | Зарегистр. 13-10-2005 | Отправлено: 17:56 04-08-2009 | Исправлено: data man, 18:06 04-08-2009
    StalkerSoftware



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

    Цитата:
    Самый простой способ - в конце события MouseUp (можно и в KeyUp тоже) дописать
     
    Код:
     if SelLength = 0 then invalidate;

    Спасибо за подсказку.
     

    Цитата:
    P.S. IMHO, в этих компонентах ужасная реализация - слишком мерцает.  

    После того как я написал первый пост и еще немного их потестировал (реализация раскраски у них почти одинаковая), то тоже увидел это мерцание. Особенно оно заметно при частом скролировании и быстром наборе текста.
     
    Может ты или All может что то посоветовать по улучшению реализации WMPaint в этом компоненте ?
     
    P.S. Я потратил кучу времени в инете и лучшее, что я смог найти (т.е. что бы была простая раскраска текста в меmo и ничего лишнего кроме нее), это как раз Highlight TMemo. Он весьма небольшой, весь архив с примером 20 кб.
     

    Всего записей: 682 | Зарегистр. 23-06-2008 | Отправлено: 19:16 04-08-2009 | Исправлено: StalkerSoftware, 19:18 04-08-2009
    data man



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    StalkerSoftware
    Вот это не подойдет ? Ссылка
     
    P.S. Просьба - не нужно больше на "ты".

    Всего записей: 1696 | Зарегистр. 13-10-2005 | Отправлено: 19:53 04-08-2009
    murkovich



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

    Цитата:
    Может ты или All может что то посоветовать по улучшению реализации WMPaint в этом компоненте ?

    Дело там не столько в WMPaint, а в том, что на любое событие делается Invalidate на весь контроль. А там уже трудно без мерцания. Встроенный windows контроль по максимальному оптимизирован на этот счет, и скорее всего дейстует еще хитрее чем просто отсекание той части, которая заведомо не менялась.
     
    Но тут такая проблема, что в принципе раскраска всего текста (в т.ч. до курсора) может поменятся из-за одного вставленного или удаленного символа. Поэтому простая оптимизация и полное разделение логики тут вряд ли получится - если хочется красиво, то придется делать сложный алгорифм, который контроллирует всё - и ввод, и размещение, и раскраску (имхо).
     
    Посмотри SynEdit - может идеи пригодятся.

    Всего записей: 1551 | Зарегистр. 26-05-2005 | Отправлено: 23:17 04-08-2009
    ShIvADeSt



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

    Цитата:
    Может ты или All может что то посоветовать по улучшению реализации WMPaint в этом компоненте ?  

    Чтобы уменьшить мерцание в этом (или любом другом компоненте) надо использовать offscreen bitmaps, то есть вначале делается копия изображения на битмапе в памяти, рисуется все что надо на нем, а потом выводится на контекст контрола (TCanvas в дельфи). Только в этом случае мерцание можно подавить или уменьшить. НО при этом придется ставить собственные обработчики на ВСЕ события при которых происходит перерисовка контрола. Если уровень знания Дельфи и обработки сообщений (messages) невысок, то плохо.  
    murkovich

    Цитата:
    Встроенный windows контроль по максимальному оптимизирован на этот счет, и скорее всего дейстует еще хитрее чем просто отсекание той части, которая заведомо не менялась.  

    Абсолютный бред помогал одному члену руборда переделывать OwnerDrawListBox так вот если делать отрисовку в WM_DRAWITEM то идет нехилое мерцание при скроллинге, при этом данное сообщение СПЕЦИАЛЬНО предназначено для отрисовки подобных случаев.

    Цитата:
    то придется делать сложный алгорифм, который контроллирует всё - и ввод, и размещение, и раскраску (имхо).
    с этим согласен, единственное НО - алгоритм не то чтобы сложный, он просто нудный Ставить обработчик на все события, смотреть как ДАННОЕ событие должно отрабатывать и как его надо заставить работать, достаточно кропотливый труд выходящий за рамки типовых вопросов.  
    data man

    Цитата:
    P.S. Просьба - не нужно больше на "ты".

    ээээ, тут как бы принято на "ты" обращаться, так как на форуме все равны, то Выкать не принято - коробит как то.
    2 StalkerSoftware если сам не доработаешь контрол - то создавай отдельную тему, по превращению Мемо в раскрашенный мемо. В рамках типовых вопросов разбирать решение задачи некорректно, достаточно специфичный вопрос.
     


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

    Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 02:09 05-08-2009
    Frodo_Torbins

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

    Цитата:
    Чтобы уменьшить мерцание в этом (или любом другом компоненте) надо использовать offscreen bitmaps, то есть вначале делается копия изображения на битмапе в памяти, рисуется все что надо на нем, а потом выводится на контекст контрола (TCanvas в дельфи).

    Этот режим вроде свойством DoubleBuffered включается.

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

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

    Цитата:
    а что сложного написать самому, типа такого

    Ну да, если как учебную задачу ставить, то, конечно, можно и нужно наваять самому. Но вот ситуация, если нужно найти несколько сотен таких последовательностей, то как-то и встает вопрос и о времени и эффективности каких-то решений. А эта задача, насколько я понимаю, нетривиальная. Вот и хотелось бы узнать о существовании эффективных реализаций такого поиска. Даже не первого совпадения, а всех совпадений.

    Всего записей: 3142 | Зарегистр. 29-09-2005 | Отправлено: 18:47 05-08-2009
    data man



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    DmitryKz
    Один из самых известных алгоритмов поиска - Бойера-Мура-Хорспула.
    Пример реализации http://angusj.com/delphi/searches.html
     
    Ну а описания самих алгоритмов:  
    http://ru.wikipedia.org/wiki/Категория:Алгоритмы_поиска
    http://en.wikipedia.org/wiki/Category:Search_algorithms
     

    Всего записей: 1696 | Зарегистр. 13-10-2005 | Отправлено: 19:33 05-08-2009 | Исправлено: data man, 19:40 05-08-2009
       

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