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

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



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

    Цитата:
    Вот это не подойдет ?  

    За ссылку спасибо, но это не годится. Тут та же проблема, что и у остальных полобных контролов - этот RichMemo порожден от TCustomControl. Мне же надо, что бы он был порожден от TMemo или в крайнем случае от TCustomMemo.
     
    У меня есть своя библиотека. В ней есть контролы порожденные от TEdit и TMemo в которые я добаил некоторую свою функциональность.
    Сейчас мне понадобилось добавить в программу проверку орфографии. Сама проверку у меня уже сделана. И сейчас мне надо научиться выделять слова именно в наследниках TMemo и TEdit.
    И именно по этому меня и привлек Highlight TMemo, так как он во первых порожден от TMemo и следовательно я легко смогу внедрить его код в своих наследников, а во вторых кроме выделения слов в нем нет лишний функциональности, что так же упрощает его внедрение. И если бы он еще не мерцал, то был бы вообще идеальным для моего случая.
    А компоненты порожденные от TCustomControl для подобного внедрения (переноса функционала) слишком сложны для меня и зачастую в них присутствует еще куча ненужного мне функционала.
     
    ShIvADeSt

    Цитата:
    Если уровень знания Дельфи и обработки сообщений (messages) невысок, то плохо.  

    Хотя я работаю с Delphi начиная еще с D1, но я больше прикладник и подобные сложные компоненты с обработкой системных сообщений пишу достаточно редко.
    Так что к сожалению, знаний именно в этой области у меня не очень высокие.
     

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

    Пожалуй так и сделаю. Надеюсь ты туда тоже заглянешь
     
    Добавлено:
    Frodo_Torbins

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

    Попрбовал я включить этот режим у Memo (Memo1.DoubleBuffered := True) в Create формы - к сожалению не помогло, Memo все равно мерцает.

    Всего записей: 682 | Зарегистр. 23-06-2008 | Отправлено: 21:02 05-08-2009 | Исправлено: StalkerSoftware, 21:16 05-08-2009
    ShIvADeSt



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

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

    Я знал про это свойство, но искренне считал что оно только у формы есть . Тогда по сути задача про мерцание сводится к включению этого свойства у контрола и все.

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

    Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 01:50 06-08-2009
    Grande



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Доброе утро, All!
    Не пойму, где затык - вываливается с Access Violation, блин:
     

    Код:
    asm
            TEST    EAX,EAX
            JE      @@qt
            TEST    EDX,EEX
            JE      @@zq
            PUSH    EBX
            PUSH    ESI
            DEC     ECX
            JL      @@m0
            MOV     EBX,[EDX-4]
            SUB     EBX,ECX
            JLE     @@m0
            ADD     EDX,ECX
            MOV     ESI,[EAX-4]
            CMP     EBX,ESI
            JL      @@m0
    @@lp:   DEC     ESI
            JS      @@m1
            MOVZX   EBX,BYTE PTR [EAX+ESI]
            MOVZX   ECX,BYTE PTR [EDX+ESI]
            CMP     BL,CL
            JE      @@lp
            MOV     BL,BYTE PTR [EBX+ToUpperChars]
            XOR     BL,BYTE PTR [ECX+ToUpperChars]
            JE      @@lp
    @@m0:   POP     ESI
            POP     EBX
    @@zq:   XOR     EAX,EAX
            RET
    @@m1:   POP     ESI
            POP     EBX
    @@qt:   MOV     EAX,1
    end;

     
    Подскажите, пожалуйста, где я промахнулся?

    Всего записей: 588 | Зарегистр. 18-09-2003 | Отправлено: 09:38 06-08-2009
    akaGM

    Platinum Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Grande
    вообще-то по асму спец.топ есть...
    а ты б ещё сюда бинарник вкатил, и откуда уверенность, что дело в этом огрызке кода?

    Код:
            TEST    EDX,EEX

    и что это за хрень?

    Всего записей: 24107 | Зарегистр. 06-12-2002 | Отправлено: 10:04 06-08-2009
    Grande



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

    Цитата:
    вообще-то по асму спец.топ есть...

    Прошу прощения - не знал (думал, раз кусок в Delphi - значит, сюда).

    Цитата:
    и что это за хрень?

    Сам удивляюсь Старею, наверное...
    Спасибо огромное.

    Всего записей: 588 | Зарегистр. 18-09-2003 | Отправлено: 10:06 06-08-2009 | Исправлено: Grande, 10:08 06-08-2009
    akaGM

    Platinum Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Grande
    интересно как в дельфях это компилировалось вообще...

    Всего записей: 24107 | Зарегистр. 06-12-2002 | Отправлено: 10:12 06-08-2009
    Grande



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    akaGM
    Да никак не скомпилировалось - падает и всё.
    Жарко, блин, отсюда и невнимательность, похоже.

    Всего записей: 588 | Зарегистр. 18-09-2003 | Отправлено: 10:16 06-08-2009
    akaGM

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

    Цитата:
    отсюда и невнимательность, похоже.

    чья, дельфийская? гы-гы
    dcc32 -- наше всё...

    Всего записей: 24107 | Зарегистр. 06-12-2002 | Отправлено: 10:24 06-08-2009 | Исправлено: akaGM, 10:25 06-08-2009
    delover

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

    Код:
    function GetModulePath(const Module: HMODULE): string;
    var
      L: Integer;
    begin
      L := MAX_PATH + 1;
      SetLength(Result, L);
      L := Windows.GetModuleFileName(Module, Pointer(Result), L);
      SetLength(Result, L);
    end;

    Там в ней всё правильно? У мена просто ум немного тупит. Подскажите кто знает.

    Всего записей: 1395 | Зарегистр. 25-06-2007 | Отправлено: 12:39 06-08-2009
    data man



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

    Код:
    WriteLn(GetModulePath(HInstance));

    отрабатывает правильно.

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

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    data man
    А Pointer(Result) это Addr(Result[0]) или A(Result[1])?
     
    У меня вопрос общий по квесту:
    http://www.delphikingdom.com/quintana/quintana.asp?ItemID=10

    Цитата:
    Вопрос №4
    Некоторые процедуры и функции (например, TApplication.MessageBox) имеют параметры, через которые передаются флаги (для MessageBox это параметр Flags и флаги MB_OK, MB_CANCEL, MB_HELP и т.д.). Если необходимо передать несколько флагов, как это МОЖНО сделать?
    ...
    2)Объединив флаги оператором +  
    3)Объединив флаги оператором or  
     

    спецом ответил 2. - Баян. Я думал что писать MB_OK+MB_ICONASTERISK можно.
    Но сказано что я ответил неправильно:

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

    Оказывается не можно,  а можно.

    Всего записей: 1395 | Зарегистр. 25-06-2007 | Отправлено: 14:31 06-08-2009
    data man



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    delover
    Обращение к нулевому элементу строки в последних версиях не работает.
    Это справедливо только для ShortString.
    Так что
    Код:
    Pointer(Result) равен Addr(Result[1])

    Всего записей: 1696 | Зарегистр. 13-10-2005 | Отправлено: 14:45 06-08-2009
    Frodo_Torbins

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    delover
    Там же вроде сказано, что плюс не работает, когда есть флаг, устанавливающий несколько бит, один из которых также устанавливает другой флаг. Допустим у нас есть флаг All_Func=$F; и еще один Func1=$1; Теперь сравните результат двух выражений:
    A := All_Func or Func1;
    B := All_Func + Func1;
    Полезность or я думаю очевидна.

    Всего записей: 2318 | Зарегистр. 24-05-2007 | Отправлено: 15:13 06-08-2009 | Исправлено: Frodo_Torbins, 15:15 06-08-2009
    delover

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    data man
    А почему не работает? У меня в опциях проекта есть Huge Strings. Честно говоря за Jcl я спокоен. Но так я чего то не помню как эту опцию в программе пишут. Я только галочку могу посмотреть.
     

    Цитата:
    Оказывается не можно,  а можно.

    12

    Цитата:
    procedure TForm2.Button1Click(Sender: TObject);
    begin
      Form2.Label1.Caption := 'Кнопка нажата';
    end;
     
    3 Здесь нельзя обращаться к компоненту Label1 через переменную Form2  
    ...

    Всего записей: 1395 | Зарегистр. 25-06-2007 | Отправлено: 15:18 06-08-2009 | Исправлено: delover, 22:37 07-08-2009
    data man



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    delover
    Long strings включены по умолчанию.
    Не совсем понятно что конкретно не работает - дело не в приведенной функции.
    Можно поподробнее ?

    Всего записей: 1696 | Зарегистр. 13-10-2005 | Отправлено: 15:23 06-08-2009 | Исправлено: data man, 15:28 06-08-2009
    delover

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    data man
    Мне пока трудно сказать, выполняется на виртуалке без отладки. Я подумал что из за этой функции.
     
    зы
    про классы я вообще облажался. На вопрос что неправильно

    Цитата:
     
    e := te.create
    raise e;
    e.free;
     

    Я ответил что всё правильно. оказалось возможна утечка памяти.  
     

    Цитата:
    x.free  
    if pointer(x)=nil then showmessage('nil');

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

    Всего записей: 1395 | Зарегистр. 25-06-2007 | Отправлено: 15:56 06-08-2009 | Исправлено: delover, 22:41 07-08-2009
    data man



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

    Цитата:
    x.free  
    if pointer(x)=nil then showmessage('nil');

    Именно поэтому и рекомендуется использовать FreeAndNil(x).

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

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    delover
    Там ведь в комментарии наверняка написано, что Form2.Label1 может дать ошибку, когда создано несколько экземпляров TForm2. Вообще, судя по всему, квинтану писали люди, которым в первую очередь важна надежность, и лично мне такой подход нравится.

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

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

    Цитата:
    в первую очередь важна надежность, и лично мне такой подход нравится.

    Мне тоже нравится надёжность, но по поводу вопросов которые выше у меня впечатление другое. Если я буду врать ученикам своим ученикам, то вряд ли добъюсь надёжности. Нельзя <> можно. Привожу пример подходящий допустим для маленького коллектива:

    Цитата:
     
    procedure TForm2.Button1Click(Sender: TObject);  ...Caption := 'Кнопка нажата';  
    ...
     
    procedure TForm2.WMActivate;
    begin
      inherited
      try
        Form2.ButtonClick1(DataModule1);
      except
        ShowMessage(
           'Друг мой, если ты увидел это сообщение то значит '+
          'ты неправильно юзаешь окно и тебе либо придётся всё переделать '+
          'либо юзать её правильно. Так как окно ты действительно создал но оно '+
          'не уникально или не присвоено переменной Form2. Что было бы если бы '+
          'свою ошибку ты узнал через пол года?');
      end;
    end;

     
    Добавлено:
    Frodo_Torbins
    Второе.

    Цитата:
    e := tsomeclass.create  
    strtoint('222');
    ........... raise e; /................
    ...
    e.free;  

    tsomeclass.create не отличается от strtoint. зачастую, чтобы не лазить везде по коду и исправлять, можно объявить одноимённую функцию strtoint ровным счётом так же просто как и tsomeclass.create.

    Всего записей: 1395 | Зарегистр. 25-06-2007 | Отправлено: 17:42 06-08-2009 | Исправлено: delover, 22:49 07-08-2009
    Ramazan



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Frodo_Torbins
    Тем не менее, определенные вопросы сформулированы так, что допускают варианты толкований. Я, например, так и не понял, почему я, с их точки зрения, не могу корректно создать поток с использованием CreateThread. А вообще, тесты хороши, пожалуй, начну их использовать при найме программистов

    ----------
    Per rectum ad...

    Всего записей: 359 | Зарегистр. 13-04-2002 | Отправлено: 19:43 06-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