2013-02-19 3 views
-3

У меня есть следующий кодПочему это неправильно

procedure TfrmJsApplications.colMaintStylesGetContentStyle(
    Sender: TcxCustomGridTableView; ARecord: TcxCustomGridRecord; 
    AItem: TcxCustomGridTableItem; out AStyle: TcxStyle); 
var 
    aColumn: TcxCustomGridTableItem; 
    aValue: Variant; 
begin 
    inherited; 
    try 
    aColumn := Sender.FindItemByName('colApplication_Doc'); 
    aValue := aRecord.Values[aColumn.Index]; 
    if VarToStr(aValue) <> '' then 
     colMaint.Properties.Buttons[0].Caption := 'Redigere' 
    else 
     colMaint.Properties.Buttons[0].Caption := 'Opret' 
    except 
    on E:exception do 
     Logfile.Error('F_JsApplications.colMaintStylesGetContentStyle: ' + E.Message); 
    end; 

работает на колонке в cxGrid. Но по какой-то причине, что я просто не могу понять линию

if VarToStr(aValue) <> '' then 

делает сбой функции. Я знаю, что это такое, когда Avalue становится Нулевое значение, но, насколько я могу понять, VarToStr должен возвращать «» в этом случае

+4

«делает сбой функции» не очень помогает. Предоставьте полные сообщения об ошибках. –

+0

На самом деле это не дает никакого сообщения - он просто останавливает программу и отображает источник блока Eurekalog под названием ELowLevel в процедуре DebugBreak – OZ8HP

+0

@ OZ8HP. Это по-прежнему важная информация, которую нам нужно знать, чтобы помочь вам , –

ответ

6

aValue, вероятно, не NULL но empty. Попробуйте использовать проверку как

if(FindVarData(aValue)^.VType in [varNull, varEmpty])then ... 

вместо этого. Или

if VarIsEmpty(aValue) or VarIsNull(aValue) then 
+0

Фактически if VarToStr (aValue) = '', тогда работает ОК - похоже, что это colMaint.Properties.Buttons [0] .Caption: = 'Opret' , который вызывает сбой приложения – OZ8HP

Смежные вопросы