Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

опять про раскраску Grid oв [D5]


BorisUK ©   (2002-11-28 16:32:00) 

Проблема в том что пока не попадались пустые поля все было ровно,
А теперь Выдает "Invalid variant type conversion" при каждом обращении к этому полю.
Вот процедура которая работает у меня.

procedure TMain_f.DBGridDrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
var
c, c1: integer;
s: string;
begin

c:=0;
c1:=0;
try
//Когда пытаемся присвоить в s чегонить чего нет - срабатывает
s:=Column.Field.Value;
// Так я пытаюсь избежать исключения, но все равно не получается
except
s:=" ";
end;

if ((AnsiUpperCase(dm.CDS_V_DocTree.FieldByName"STATE").asString)="СОСТОЯНИЕ1")then
begin
c:=clRED;
c1:=$F0F0F0;
end;

DBGrid.Canvas.Brush.Color:=c1;
DBGrid.Canvas.FillRect(Rect);
DBGrid.Canvas.Font.Color:=c;
DBGrid.Canvas.TextRect(Rect, Rect.Left+2, Rect.Top+2, s);
//Собственно раньше оно срабатывало сдесь когда вместо "s"
//стояло Column.Field.Value
end;

Все отличие от того что писали раньше в том, что мне надо раскрашивать построчно...
Еслиб не это то под раскраску попадалиб только поля со значениями...
Что посоветуете уважаемые?


Victor_Cr   (2002-11-29 08:44:00) [1]

Проверку на Null делать совсем не обязательно, и трай ... ексепт... тоже (покрайней мере в этом месте). Немогу себе представить структуру (кроме Блоба), которая будет материться при присвоении "как стринг", Null преобразуеться просто в "". Числа и даты тоже нормально конвертируются. Так что код можно еще уменьшить.


BorisUK   (2002-11-29 06:59:00) [2]

Спасибо - опять помогло.
Вернее была еще одна ошибка, Толмачев Борисне заметил как в одном месте кода использовал без проверки на nill и без AsString
Field.Value :)
Что поделаешь, к вечеру мозги закипают и не хотят думать.
Зато попутно выяснил, что с вариантным типом ваще так играться дорогое удовольствие.
Всегда надо делать AsString,
проверять IsNull
Ну try except тоже для подстраховки :)
А то вот такие пенки под дых он дает инода....


Victor_Cr   (2002-11-28 17:44:00) [3]

Что-то похожее на это :~)
procedure TMain_f.DBGridDrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
var
c, c1: integer;
s: string;
begin

c:=0;
c1:=0;
// try
//Когда пытаемся присвоить в s чегонить чего нет - срабатывает
// S := Column.Field.Value;
// Так я пытаюсь избежать исключения, но все равно не получается
// except
// s:=" ";
// end;
S := Column.Field.AsString;

if ((AnsiUpperCase(dm.CDS_V_DocTree.FieldByName"STATE").asString)="СОСТОЯНИЕ1")then
begin
c:=clRED;
c1:=$F0F0F0;
DBGrid.Canvas.Brush.Color:=c1;
DBGrid.Canvas.FillRect(Rect);
DBGrid.Canvas.Font.Color:=c;
DBGrid.Canvas.TextRect(Rect, Rect.Left+2, Rect.Top+2, s);
end
else
DBGrid.DefaultDrawColumnCell(Rect,DataCol,Column,State);
end;


Victor_Cr   (2002-11-28 17:36:00) [4]

S := Column.Field.AsString; :~)


BorisUK   (2002-11-28 16:49:00) [5]

Спасибо - помогло :)
Теперь хотябы при первом запуске программы все работает :)
Но теперь таже проблема возникает когда пытаюсь изменить размер поля, которое не поместилось в Грид..
Тоесть - полей много... Сначало видимы одни, мотаем скролом на следующие и делаем ресайз. Результат - таже ошибка...

Когда делаем ресайз полей которые были видемы сразу, то нет никаких ошибок. Что за нифиг блин!


stone   (2002-11-28 16:35:00) [6]


> s:=Column.Field.Value;


if not Column.Field.IsNull then
s := Column.Field.AsString
else
s := "";


Наверх

Титульная страница Поиск, карта сайта Написать письмо