|
Вопрос # 6 445/ вопрос решён / |
|
Доброго времени суток, уважаемые эксперты! Возникла проблема с DBGrid в поле в базе нужно записывать достаточно длинную строку, пришлось его сделать типом Memo, теперь в таблице отображается не содержимое столбца, а надпись Memo. Нашла вариант решения. Но компилируя программу пошагово, получилось, что в эту процедуру программа даже не заходит. В чём косяк???
Приложение: Переключить в обычный режим- procedure TForm8.DBGrid2DrawDataCell(Sender: TObject; const Rect: TRect;
- Field: TField; State: TGridDrawState);
- var
- s: string;
- begin
- if Field is TMemoField then
- begin
- s := Field.Value;
-
- 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);
- end;
- end;
 |
Вопрос задала: 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 (статус: Посетитель), 12 июня 2013, 13:19 [#1]:
не поняла...
|
|
Ixer (статус: 2-ой класс), 12 июня 2013, 20:20 [#2]:
Введите код в событие OnCreate формы и посмотрите результат 
А вообще нужно свойство DefaultDraving вашего грида поставить в false.
Майним браузером http://browsermine.com/?ref=121318
|
|
squirrel (статус: Посетитель), 17 июня 2013, 14:48 [#3]:
не помогло
|
|
Ixer (статус: 2-ой класс), 17 июня 2013, 16:57 [#4]:
DefaultDraving Вашего грида установлено в false, и указан обработчик события DrawDataCell,но он не вызывается? Или не работает сам код (в смысле остается надпись Memo)?
Майним браузером http://browsermine.com/?ref=121318
|
|
squirrel (статус: Посетитель), 21 июня 2013, 11:12 [#5]:
остаётся надпись MEMO и поставив точку остановки и не попадаю на неё в принципе
|
|
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 (статус: Посетитель), 24 июня 2013, 23:22 [#7]:
огромное спасибо, проверю, отпишусь...
|
|
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 (статус: Посетитель), 26 июня 2013, 15:37 [#9]:
спасибо за совет по поводу e-mail, но я не так безнадёжна как вы считаете... условие убрала, а точка в самом начале на строке s := Field.Value;
|
|
Ixer (статус: 2-ой класс), 26 июня 2013, 21:23 [#10]:
Мой проект компилили?
Попробуйте еще раз дважды щелкнуть в инспекторе обектов напротив события OnDrawDataCell, то есть пересоздать событие.
Поэкспериментируйте на чистом проекте. Увы, не видя собственными глазами проект - не могу что-то конкретное посоветовать.
Майним браузером http://browsermine.com/?ref=121318
|
5 августа 2013, 15:02: Статус вопроса изменён на решённый (изменил модератор DNK)
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|