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

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

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    gosnami
    напишите наследник над TEdit, к-й будет в зависимости от значения менять цвет (думаю достаточно перекрыть метод Change). если все это в рамках одной формы, то его даже можно не регистрировать в IDE, а просто написать в том-же юните как TEdit = class(StdCtrls.TEdit)
    не совсем правда понятно каким боком тут "мультипользовательность"..

    Всего записей: 770 | Зарегистр. 07-04-2002 | Отправлено: 19:40 05-11-2012
    alex1334

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Gnom3
    строки типа ansistring допускают символы #0 однако некоторые функции работы со строками из модуля SysUtil с такими строками работают некоректно, что же касается winAPI то мне встречались только функции которые требовали  завершающего нуля. Многие функции delphi не явным образом вызывают функцию API и также требуют типа PChar. Однако сомневаюсь что строка ansistring и имеющая символы #0 будет корректно преобразована в тип PChar. Думаю что компилятор просто добавит пару команд вставляющих в конец строки символ #0. А вот win API в силу тупости операционной системы получив такую строку не корректно обработает символ #0. Выход тут только один   никогда не передавать в winAPI указатель на строки, которые содержат символы #0.

    Всего записей: 148 | Зарегистр. 10-10-2010 | Отправлено: 19:56 05-11-2012
    salexn1



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    A_V
    Так изменение на одной форме можно и без нового компонента сделать, хотя правильнее все таки создать свой контрол и переопределить нужные методы.
    Но вот как быть с "мультипользовательностью"?
    Делать по таймеру, если это база, не есть тру, т.к. можно положить базу при частых запросах...  
     

    Всего записей: 502 | Зарегистр. 21-02-2008 | Отправлено: 19:57 05-11-2012
    A_V

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

    Всего записей: 770 | Зарегистр. 07-04-2002 | Отправлено: 20:04 05-11-2012
    gosnami

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

    Цитата:
    напишите наследник над TEdit, к-й будет в зависимости от значения менять цвет (думаю достаточно перекрыть метод Change). если все это в рамках одной формы, то его даже можно не регистрировать в IDE, а просто написать в том-же юните как TEdit = class(StdCtrls.TEdit)  
    не совсем правда понятно каким боком тут "мультипользовательность"..

    можете пример показать?..
    мультипользовательность ... если 1 человек изменил заказ и заказ улетел в другую графу... необходимо чтобы на всех компах значения обновились..

    Всего записей: 101 | Зарегистр. 02-11-2012 | Отправлено: 20:34 05-11-2012
    A_V

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    gosnami
    >можете пример показать
    ну какой пример.. в юните с формой описывешь контрол с тем-же именем:
    TEdit = class(StdCtrls.TEdit)  
    protected
     proceudre Change; override;
    end;
    в нем перекрываешь Change, в котором ставишь цвет.
    при создании формы контролы создадутся не как системные TEdit'ы, а как описываемый, т.к у них имя класса то-же..
     
    >если 1 человек изменил заказ и заказ улетел в другую графу... необходимо чтобы на всех >компах значения обновились..
    какая СУБД?

    Всего записей: 770 | Зарегистр. 07-04-2002 | Отправлено: 20:47 05-11-2012 | Исправлено: A_V, 20:53 05-11-2012
    gosnami

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

    Цитата:
    при создании формы контролы создадутся не как системные TEdit'ы, а как описываемый, т.к у них имя класса то-же..  

    понял, буду пробовать.. эдиты используются devExpress-овские. но думаю из-за этого проблем быть не должно... а почему как protected? разве не public?

    Цитата:
    какая СУБД?

    Firebird

    Всего записей: 101 | Зарегистр. 02-11-2012 | Отправлено: 21:08 05-11-2012
    A_V

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    gosnami
    с FireBird не работал, но там вроде есть возможность рассылки уведомлений с сервера
    погугли по 'firebird events'
    вот например
    http://www.firebirdsql.org/file/documentation/papers_presentations/Power_Firebird_events.pdf
     
    если не получится - то завсети поле с датой (timestamp), при изменениях ее обновлять, по таймеру считывать, если не та, что при загрузке формы - обновлять значения контролов
     

    Цитата:
    а почему как protected? разве не public?  

    ну Change - внутренний protected метод
     
    Добавлено:
    для DevExpress объявляй так:
     
      TcxTextEdit = class(cxTextEdit.TcxTextEdit)
      protected
         procedure DoTextChanged; override;
      end;
     
    Внутри проверяй Text и ставь Color

    Всего записей: 770 | Зарегистр. 07-04-2002 | Отправлено: 21:17 05-11-2012
    salexn1



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    A_V
    Уже много было копий сломано насчет автообновлений...
    Тут ОЧЕНЬ много вопросов и как бы не навредить с такими обновлениями...
     
    А если в этот момент сотрудник изменяет данные? А как часто опрашивать (запускать таймер)? А если часто, то не положит ли такое обновление базу данных и сетку (при наличии определенного количества пользователей)?  
     
    В общем - думать,думать и еще раз думать...
     

    Всего записей: 502 | Зарегистр. 21-02-2008 | Отправлено: 00:34 06-11-2012
    A_V

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    salexn1
    думать надо, не спорю, но это вопрос автору.. я, если честно, сомневаюсь, что подобное вообще имеет смысл. в крайнем случае, можно выводить хинт, типа данные были изменены, но вообще лучше не давать что-то одновременно править. решать все равно автору, какой вопрос, такой ответ

    Всего записей: 770 | Зарегистр. 07-04-2002 | Отправлено: 01:08 06-11-2012
    salexn1



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    A_V
    Судя по статусу gosnami забанен... Не скоро узнаем, что он хотел в итоге

    Всего записей: 502 | Зарегистр. 21-02-2008 | Отправлено: 10:28 06-11-2012
    SevereK20

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


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

    Собственно говоря в главном окне будут поля - Обработанные, необработанные заявки и т.д.
    У каждой группы будет свой критерий отбора, по которым они будут делиться на эти группы...
    Допустим обработался 1 заявка... соответственно счетчики должны поменяться...
    Если 2 человека начнут одновременно обрабатывать заявку... пытаясь внести в нее изменения.... тут ничего страшного не будет - холостым апдейтом всегда проверяется...

    Цитата:
     procedure DoTextChanged; override;  

    Это процедура класса cxTextEdit ? В документации DevExpress искал... ни одного метода минимально похожего на TextChanged.... однако в делфе все работает...подскажите неучу...где ищуться эти самые стандартные процедуры, которые можно переопределять?

    Всего записей: 7699 | Зарегистр. 07-05-2010 | Отправлено: 11:15 06-11-2012 | Исправлено: SevereK20, 11:38 06-11-2012
    salexn1



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    SevereK20
     
    Цитата:
    где ищуться эти самые стандартные процедуры, которые можно переопределять?

     
    как правило в исходниках ищут.  

    Всего записей: 502 | Зарегистр. 21-02-2008 | Отправлено: 11:28 06-11-2012
    SevereK20

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

    Цитата:
    как правило в исходниках ищут.  

    точно.. нашел в cxTextEdit.pas ... но удивительно что не гуглится вообще... сочетание "cxTextEdit DoTextChanged" дает только 5 результатов... ито не то, что надо.
    Всем спасибо.

    Всего записей: 7699 | Зарегистр. 07-05-2010 | Отправлено: 11:41 06-11-2012
    A_V

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    SevereK20
    искать - в исходниках по похожему названию (лучше с плагином, к-й показывает список процедур напр. Ctrl+G в Gexperts). Именования обычно в нормальных компонентах человеческие, по этому по фильтру по слову Changed все сразу находится. если так не нашлось, вешаешь событие (в данном случае по изменению), ставишь туда брейкпойнт, затем по call-stack смотришь, из какого метода произошел его вызов

    Всего записей: 770 | Зарегистр. 07-04-2002 | Отправлено: 11:55 06-11-2012 | Исправлено: A_V, 11:57 06-11-2012
    XPerformer



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

    Цитата:
    нашел в cxTextEdit.pas ... но удивительно что не гуглится вообще... сочетание "cxTextEdit DoTextChanged" дает только 5 результатов... ито не то, что надо.

     
    Недивительно, т.к. перекрывать такие защищенные методы, которые начинаются с Do - дурной тон

    Всего записей: 2536 | Зарегистр. 20-06-2011 | Отправлено: 16:10 06-11-2012
    salexn1



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    XPerformer
    Это с чего вдруг дурной тон?????
     
    SevereK20
    Это правильный тон, не слушайте
     

    Всего записей: 502 | Зарегистр. 21-02-2008 | Отправлено: 17:07 06-11-2012
    XPerformer



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

    Всего записей: 2536 | Зарегистр. 20-06-2011 | Отправлено: 17:09 06-11-2012
    salexn1



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    XPerformer
    ок, тогда расскажите мне, как мне изменить отрисовку практически любого контрола из StdCtrls?
     
    Давайте, чтобы Вам было легче, расскажите это на примере TLabel...
     
    З.Ы. Чуть не забыл, протектед методы не трогайте только, на  них же презерватив они с предохранителем

    Всего записей: 502 | Зарегистр. 21-02-2008 | Отправлено: 17:23 06-11-2012 | Исправлено: salexn1, 17:26 06-11-2012
    XPerformer



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    salexn1
    Я тут не подвизался вас учить. Учеба денег стоит. Не можете обосновать свой совет - ну и ладно, мое дело предупредить новичка
    А про презерватив - аналогия хорошая, и точка зрения на нее зависит от того, кому аборт делать.

    Всего записей: 2536 | Зарегистр. 20-06-2011 | Отправлено: 17:26 06-11-2012 | Исправлено: XPerformer, 17:29 06-11-2012
    Открыть новую тему     Написать ответ в эту тему

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