Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.12.16;
Скачать: CL | DM;

Вниз

опять про раскраску Grid oв   Найти похожие ветки 

 
BorisUK ©   (2002-11-28 16:32) [0]

Проблема в том что пока не попадались пустые поля все было ровно,
А теперь Выдает "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;

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


 
stone ©   (2002-11-28 16:35) [1]


> s:=Column.Field.Value;


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


 
BorisUK ©   (2002-11-28 16:49) [2]

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

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


 
Victor_Cr ©   (2002-11-28 17:36) [3]

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


 
Victor_Cr ©   (2002-11-28 17:44) [4]

Что-то похожее на это :~)
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;


 
BorisUK ©   (2002-11-29 06:59) [5]

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


 
Victor_Cr ©   (2002-11-29 08:44) [6]

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



Страницы: 1 вся ветка

Текущий архив: 2002.12.16;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.015 c
4-51994
the7guest
2002-11-02 17:34
2002.12.16
Как подключить и использовать WinAPI ??? 8~


3-51567
div
2002-11-27 07:49
2002.12.16
Потеря данных при некор.завершении программы


14-51908
AgentDelphi
2002-11-24 17:04
2002.12.16
Как прослушать звук с микрофона?


14-51925
Anatoly Podgoretsky
2002-11-25 07:56
2002.12.16
Именинники 25 ноября


7-51979
msgipss
2002-10-16 10:43
2002.12.16
Можно ли автоматом внести задание в планировщик Windows 2000