Rambler's Top100
"Knowledge itself is power"
F.Bacon
Поиск | Карта сайта | Помощь | О проекте | ТТХ  
 Круглый стол
  
Правила КС
>> Настройки

Фильтр вопросов
>> Новые вопросы
отслеживать по
>> Новые ответы

Избранное

Страница вопросов
Поиск по КС


Специальные проекты:
>> К л ю к в а
>> Г о л о в о л о м к и

Вопрос №

Задать вопрос
Off-topic вопросы

Помощь

 
 К н и г и
 
Книжная полка
 
 
Библиотека
 
  
  
 


Поиск
 
Поиск по КС
Поиск в статьях
Яndex© + Google©
Поиск книг

 
  
Тематический каталог
Все манускрипты

 
  
Карта VCL
ОШИБКИ
Сообщения системы

 
Форумы
 
Круглый стол
Новые вопросы

 
  
Базарная площадь
Городская площадь

 
   
С Л С

 
Летопись
 
Королевские Хроники
Рыцарский Зал
Глас народа!

 
  
ТТХ
Конкурсы
Королевская клюква

 
Разделы
 
Hello, World!
Лицей

Квинтана

 
  
Сокровищница
Подземелье Магов
Подводные камни
Свитки

 
  
Школа ОБЕРОНА

 
  
Арсенальная башня
Фолианты
Полигон

 
  
Книга Песка
Дальние земли

 
  
АРХИВЫ

 
 

Сейчас на сайте присутствуют:
 
  
 
Во Флориде и в Королевстве сейчас  07:26[Войти] | [Зарегистрироваться]
Ответ на вопрос № 37881

21-11-2005 01:31
Здравствуйте!!
Я хочу немного модифицировать компонент DBEdit таким образом чтобы при изменении DataSource.State на dsEdit или dsInsert область вводв становилась белой, а при изменении на dsBrowse область ввода становилась серой. Как это сделать?
Зарание спасибо.

[+] Добавить в избранные вопросы

Отслеживать ответы на этот вопрос по RSS

Ответы:


Уважаемые авторы вопросов! Большая просьба сообщить о результатах решения проблемы на этой странице.
Иначе, следящие за обсуждением, возможно имеющие аналогичные проблемы, не получают ясного представления об их решении. А авторы ответов не получают обратной связи. Что можно расценивать, как проявление неуважения к отвечающим от автора вопроса.

31-01-2006 07:58 | Сообщение от автора вопроса
GEO а не могли бы вы помочь написать потомок от компонента TMemoField в котором бы происходило сдлеующее:
перед редактированием значение МЕМО поля записывалось бы в отдельное свойство, а перед отменой изменений это значение считывалось бы из этого свойства. Я пытался как-то использовать тот текст что вы написали, но что-то ничего не выходит.

22-11-2005 05:30 | Сообщение от автора вопроса
Огромное вам человеческое спасибо!!
Действительно мне необходимо разработать несколько компонент с подобоными свойствами, просто если организовывать это все как обычно, появляется куча всяких процедур(т.к. много наборов данных) где нужно перечислять кучу объектов чтобы менять их свойства, а так мне кажется удобней и наглядней

22-11-2005 02:00
Спасибо, Geo, а то у меня плохо со временем
По-моему придется еще сделать то же самое и для DataSetChanged проверку dsInsert

Ну а теперь, когда на конкретный вопрос есть ответ, я начну Вас отговаривать :)
Как правило компоненты со своим внешним видом - головная боль программиста
1 Geo грамотно указал цвета, т.к. в случае другой цветовой палитры явные цвета clWhite,clGray могут выглядеть странно. Но вот вряд ли планируется полное слияние с формой (clBtnFace)
2 Задав правила игры в компоненте, обрекаете себя на постоянное следование им. Значит придется реализовать подобное для целого пакета компонент, либо будите вынуждены пользоваться вариантом Сергея. А скорее всего и первое и второе. Т.к. рано или поздно первоначального пакета станет не хватать :( 

21-11-2005 15:43
Блин! Лишний раз убеждаюсь, что Борланд возможности модификации компонентов из VCL засунул настолько далеко, что дешевле иногда взять файл с исходниками и переписать целиком под себя ;-)

Но в данном случае задача решается. Вот примерная схема:

uses
  DBCtrls;

type
  TDBEdit = class(DBCtrls.TDBEdit)
  private
    FOldNotify : TNotifyEvent;
    procedure EditingChangeNotify(Sender : TObject);
  public
    constructor Create(AOwner : TComponent); override;
  end;

implementation

constructor TDBEdit.Create(AOwner : TComponent);
var
  DL : TFieldDataLink;
begin
  inherited Create(AOwner);
  DL:=TFieldDataLink(Perform(CM_GETDATALINK,0,0));
  FOldNotify:=DL.OnEditingChange;
  DL.OnEditingChange:=EditingChangeNotify;
end;

procedure TDBEdit.EditingChangeNotify(Sender : TObject);
begin
  FOldNotify(Sender);
  if DataSource.State = dsEdit
  then
    Color:=clWindow
  else
    Color:=clBtnFace;
end;



В принципе, работает как часы. Но для надежности лучше все же подразобраться и вставить где нужно проверки. Либо вставить проверки где только возможно и не разбираться ;-)

21-11-2005 12:43 | Сообщение от автора вопроса
Неужели нет ни у кого никаких идей по этому поводу?

21-11-2005 05:44 | Сообщение от автора вопроса
Инна А вы не могли бы помоч мне в данном конкретном случае? Так как я даже не знаю что такое TFieldDataLink и разбираться с этим у меня к сожалению нет времени, нужно сделать это срочно. Только не надо говорить, что мне лень смотри документацию и все такое, я начинающий и все охватить разом сложно, я считаю все надо делать постепенно.Зарание спасибо за помощь.

21-11-2005 05:28 | Сообщение от автора вопроса
Не Сергей вы меня не поянли я хочу создать компонент компонент, у которого цвет будет менять ся сам в зависимости от состояния того набора данных на который он ссылается и не нужно будет писать каждому набору данных процедуру в которой нужно былобы перечислять все подобные объекты.

21-11-2005 04:30
<Проверил, работает :)>

procedure TForm1.DataSource1StateChange(Sender: TObject);
begin
  if DataSource1.State=dsEdit then DBEdit1.Color:=clWhite
  else DBEdit1.Color:=clGray;
end;



---
в первом ответе недоглядел :( Конечно, onStateChange

21-11-2005 04:09
Вам надо обратить внимание на TFieldDataLink
Посмотрите
»вопрос КС №21471«

21-11-2005 03:54
Нужно использовать событие TDataSource.OnStateChange

21-11-2005 03:45 | Сообщение от автора вопроса
Кстати я пробовал найти что-то подобное в Королевстве но что-то ничего не нашел. Может это вообще невозможно?

21-11-2005 03:43 | Сообщение от автора вопроса
Я так уже пробовал, не получается выдается ошибка.
ведь у компонента DBEdit свойство dataSource  ссылка на компонент DataSource, т.е врде как у DataSource должн быть метод OnChange. Тут мне немного не понятно.Как обеспечить взаимодействие этих двух компонентов. С виду задачка простая, всего-то написать пару строчек, а оказывается не очень. Может есть у кого еще идеии?

21-11-2005 02:32 | Комментарий к предыдущим ответам
DataSource1.DataSet.State=dsEdit
заменить на DataSource1.State=dsEdit

21-11-2005 02:31

procedure Tdm.DataSource1Change(Sender: TObject);
begin
  if DataSource1.DataSet.State=dsEdit then DBEdit.Color:=clWhite
  else DBEdit.Color:=clGray;
end;



<Не проверял>

Добавьте свое cообщение

Вашe имя:  [Войти]
Ваш адрес (e-mail):На Королевстве все адреса защищаются от спам-роботов
контрольный вопрос:
Зимой — белый, летом — серый. Кто?
в качестве ответа на вопрос или загадку следует давать только одно слово в именительном падеже и именно в такой форме, как оно используется в оригинале.
Надоело отвечать на странные вопросы? Зарегистрируйтесь на сайте.
Тип сообщения:
Текст:
Жирный шрифт  Наклонный шрифт  Подчеркнутый шрифт  Выравнивание по центру  Список  Заголовок  Разделительная линия  Код  Маленький шрифт  Крупный шрифт  Цитирование блока текста  Строчное цитирование
  • вопрос Круглого стола № XXX

  • вопрос № YYY в тесте № XXX Рыцарской Квинтаны

  • сообщение № YYY в теме № XXX Базарной площади
  • обсуждение темы № YYY Базарной площади
  •  
     Правила оформления сообщений на Королевстве

    Страница избранных вопросов Круглого стола.
      
    Время на сайте: GMT минус 5 часов

    Если вы заметили орфографическую ошибку на этой странице, просто выделите ошибку мышью и нажмите Ctrl+Enter.
    Функция может не работать в некоторых версиях броузеров.

    Web hosting for this web site provided by DotNetPark (ASP.NET, SharePoint, MS SQL hosting)  
    Software for IIS, Hyper-V, MS SQL. Tools for Windows server administrators. Server migration utilities  

     
    © При использовании любых материалов «Королевства Delphi» необходимо указывать источник информации. Перепечатка авторских статей возможна только при согласии всех авторов и администрации сайта.
    Все используемые на сайте торговые марки являются собственностью их производителей.

    Яндекс цитирования