Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 6 445

/ вопрос решён /

Доброго времени суток, уважаемые эксперты! Возникла проблема с DBGrid в поле в базе нужно записывать достаточно длинную строку, пришлось его сделать типом Memo, теперь в таблице отображается не содержимое столбца, а надпись Memo. Нашла вариант решения. Но компилируя программу пошагово, получилось, что в эту процедуру программа даже не заходит. В чём косяк???

Приложение:
  1. procedure TForm8.DBGrid2DrawDataCell(Sender: TObject; const Rect: TRect;
  2. Field: TField; State: TGridDrawState);
  3. var
  4. s: string;
  5. begin
  6. if Field is TMemoField then
  7. begin
  8. s := Field.Value;
  9.  
  10. s := StringReplace(s, #13, ' ', [rfReplaceAll]);
  11. s := StringReplace(s, #10, ' ', [rfReplaceAll]);
  12.  
  13. TDBGrid(Sender).Canvas.FillRect(Rect);
  14. TDBGrid(Sender).Canvas.TextOut(Rect.Left+1, Rect.Top+2, s);
  15. end;
  16. end;


squirrel Вопрос решён, но можно продолжить его обсуждение в мини-форуме

Вопрос задала: squirrel (статус: Посетитель)
Вопрос отправлен: 11 июня 2013, 16:03
Состояние вопроса: решён, ответов: 1.

Ответ #1. Отвечает эксперт: Ixer

Здравствуйте, squirrel!

TForm8.DBGrid2.DefaultDraving = false
Наугад :)

Ответ отправил: Ixer (статус: 2-ой класс)
Время отправки: 12 июня 2013, 02:07
Оценка за ответ: 5


Мини-форум вопроса

Всего сообщений: 10; последнее сообщение — 26 июня 2013, 21:23; участников в обсуждении: 2.
squirrel

squirrel (статус: Посетитель), 12 июня 2013, 13:19 [#1]:

не поняла...
Ixer

Ixer (статус: 2-ой класс), 12 июня 2013, 20:20 [#2]:

Введите код в событие OnCreate формы и посмотрите результат :)

А вообще нужно свойство DefaultDraving вашего грида поставить в false.
Майним браузером http://browsermine.com/?ref=121318
squirrel

squirrel (статус: Посетитель), 17 июня 2013, 14:48 [#3]:

не помогло
Ixer

Ixer (статус: 2-ой класс), 17 июня 2013, 16:57 [#4]:

DefaultDraving Вашего грида установлено в false, и указан обработчик события DrawDataCell,но он не вызывается? Или не работает сам код (в смысле остается надпись Memo)?
Майним браузером http://browsermine.com/?ref=121318
squirrel

squirrel (статус: Посетитель), 21 июня 2013, 11:12 [#5]:

остаётся надпись MEMO и поставив точку остановки и не попадаю на неё в принципе
Ixer

Ixer (статус: 2-ой класс), 21 июня 2013, 17:56 [#6]:

Ех. Замучили Вы меня. Пришлось сделать в Acces базу на одну таблицу с несколькими полями (Memo среди которых, с многострочным текстом) и подключить все это к DBGrid через TADODataSet. И что я увидел? Пустые строки - Ваш код не работает нормально (по крайней мере при работе с ADO).

Убрал к чертям условие
if Field is TMemoField then
Полученный код процедуры
procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect;
  Field: TField; State: TGridDrawState);
var
 s: string;
 R:TRect;
begin
  s := Field.Value;
  R:=Rect;
 
  s := StringReplace(s, #13, ' ', [rfReplaceAll]);
  s := StringReplace(s, #10, ' ', [rfReplaceAll]);
 
  TDBGrid(Sender).Canvas.FillRect(Rect);
  //TDBGrid(Sender).Canvas.TextOut(Rect.Left+1, Rect.Top+2, s);
  //В верхнем варианте печатается весь текст
  //в нижнем только то, что влезает в поле.
  TDBGrid(Sender).Canvas.TextRect(R,s);
end;

В DBGrid изменил свойство DefaultDrawing в false и создал событие DrawDataCell.

Итого 5 минут работы... С них 4 вспоминал как подключить базу :)

P.S. Могу скинуть весь свой "проект" для тестирования.
Майним браузером http://browsermine.com/?ref=121318
squirrel

squirrel (статус: Посетитель), 24 июня 2013, 23:22 [#7]:

огромное спасибо, проверю, отпишусь...
Ixer

Ixer (статус: 2-ой класс), 25 июня 2013, 17:10 [#8]:

Дайте угадаю... Условие
if Field is TMemoField then
Вы не убрали, а точка останова стоит в средине этого условного оператора?
Проект шлю не на мыло, а оставлю на дропбоксе, может кому-то тоже интересен этот вопрос.

https://www.dropbox.com/s/skfk0zgxxnwkugn/TestDB.zip

П.С. А свой адрес лучше публично не показывайте, спама поменьше будет :)
Майним браузером http://browsermine.com/?ref=121318
squirrel

squirrel (статус: Посетитель), 26 июня 2013, 15:37 [#9]:

спасибо за совет по поводу e-mail, но я не так безнадёжна как вы считаете... условие убрала, а точка в самом начале на строке s := Field.Value;
Ixer

Ixer (статус: 2-ой класс), 26 июня 2013, 21:23 [#10]:

Мой проект компилили?
Попробуйте еще раз дважды щелкнуть в инспекторе обектов напротив события OnDrawDataCell, то есть пересоздать событие.
Поэкспериментируйте на чистом проекте. Увы, не видя собственными глазами проект - не могу что-то конкретное посоветовать.
Майним браузером http://browsermine.com/?ref=121318

5 августа 2013, 15:02: Статус вопроса изменён на решённый (изменил модератор DNK)

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:57
Выполнено за 0.03 сек.