| 
| 
 | Вопрос # 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) Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |