Bir kod bloğum var ve bu kod bloğu eğer bu şekilde devam ederse ileride altından kalkılamayacak kadar devasa bir hale gelecek, yolun başındayken kodu kısaltmaya çalışıyorum ama kodun bir bölgesinde resmen basiretim bağlandı, variant veri tipiyle de ayrıca uğraşmak gerekiyor... Bi fikri olan, yol gösterecek biri var mı?
Aşağıda kodun bir kısmı yer alıyor ve sürekli tekrar eden kısım da aslında burası. Ben bu kodu tıpkı excel'deki koşullu biçimlendirme fonksiyonunu yerine getirmesi amacıyla kullanıyorum;
Kod: Tümünü seç
if (aAlan2 = '') then begin
if (VarIsEmpty(aString) = false) then begin
if (ZamanVar = TRUE)
then Bicimlendir := eger(aZaman1 < StrToDateTime(aDeger))
else Bicimlendir := eger(aString < aDeger);
end;
end else begin
if (VarIsEmpty(aString) = FALSE) and (VarIsEmpty(aString2) = FALSE) then begin
if (ZamanVar = TRUE)
then Bicimlendir := eger(aZaman1 < aZaman2)
else Bicimlendir := eger(aString < aString2);
end;
end;
Kod: Tümünü seç
...
Type
TBicimlendirme = record
Alan ,
Alan2 : String; // Ref
Kriter : String; // < = >
Deger , // falan
Deger2 : Variant; // filan
ZeminRengi ,
MetinRengi : TColor; // TColor için integer...
Kalin ,
Yatik ,
AltiCizik ,
UstuCizik : Boolean; // font için boolean
end;
...
var
KosulluBicimlendirmeler: Array of TBicimlendirme;
...
...
procedure TListe.KosulluBicimlendirme(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean);
var
aAlan ,
aAlan2 ,
aKriter : String;
aDeger ,
aDeger2 ,
aString ,
aString2 : Variant;
aZaman1 ,
aZaman2 : TDateTime;
aTip : TFieldType;
I : Integer;
Bicimlendir : Boolean;
Bicim : TBicimlendirme;
aIndex : Integer;
aIndex2 : Integer;
ZamanVar : Boolean;
procedure memola(aText: String); begin if Trim(aText) > '' then Memo.Lines.Add(aText); end;
function eger(aKarsilastirma: Boolean): Boolean;
begin {Eğer sonuç doğruysa true değilse false sonucunu veriyor PHP'deki iif gibi bişey...}
if aKarsilastirma = TRUE then Result := TRUE else Result := FALSE;
end;
begin
aAlan := Trim(TcxGridDBColumn(AViewInfo.Item).DataBinding.FieldName); // o an gözüken alan
for I := low(KosulluBicimlendirmeler) to high(KosulluBicimlendirmeler) do begin
Bicim := KosulluBicimlendirmeler[I];
if (Bicim.Alan = aAlan) then begin
aAlan2 := Bicim.Alan2;
aKriter := Bicim.Kriter;
aDeger := Bicim.Deger;
aDeger2 := Bicim.Deger2;
aTip := TcxGridDBColumn(AViewInfo.Item).DataBinding.Field.DataType;
if aTip in [ftDate, ftDateTime] then ZamanVar := TRUE else ZamanVar := FALSE;
aIndex := aViewInfo.Item.Index;
if (AViewInfo.GridRecord.DisplayTexts[aIndex] > '') then begin
aString := AViewInfo.GridRecord.Values[aIndex];
if (ZamanVar = TRUE) then if VarIsEmpty(aString) = FALSE then aZaman1 := VarToDatetime(aString);
end;
//aIndex2 := -1; // Başlangıç değeridir.
if (aAlan2 > '') then begin
aIndex2 := TcxGridDBTableView(Sender).GetColumnByFieldName(aAlan2).Index;
aString2:= AViewInfo.GridRecord.Values[aIndex2];
if (VarIsDate(aString2) = TRUE) then begin
aZaman2 := VarToDatetime(aString2);
end;
end;
Bicimlendir := FALSE; // Başlangıç değeridir.
if (aKriter = '=') then begin
if (aAlan2 = '') then begin
if (VarIsEmpty(aString) = false) then begin
if (ZamanVar = TRUE)
then Bicimlendir := eger(aZaman1 = StrToDateTime(aDeger))
else Bicimlendir := eger(aString = aDeger);
end;
end else begin
if (VarIsEmpty(aString) = FALSE) and (VarIsEmpty(aString2) = FALSE) then begin
if (ZamanVar = TRUE)
then Bicimlendir := eger(aZaman1 = aZaman2)
else Bicimlendir := eger(aString = aString2);
end;
end;
end else
if (aKriter = '<') then begin
if (aAlan2 = '') then begin
if (VarIsEmpty(aString) = false) then begin
if (ZamanVar = TRUE)
then Bicimlendir := eger(aZaman1 < StrToDateTime(aDeger))
else Bicimlendir := eger(aString < aDeger);
end;
end else begin
if (VarIsEmpty(aString) = FALSE) and (VarIsEmpty(aString2) = FALSE) then begin
if (ZamanVar = TRUE)
then Bicimlendir := eger(aZaman1 < aZaman2)
else Bicimlendir := eger(aString < aString2);
end;
end;
end else
if (aKriter = '>') then begin
if (aAlan2 = '') then begin
if (VarIsEmpty(aString) = false) then begin
if (ZamanVar = TRUE)
then Bicimlendir := eger(aZaman1 > StrToDateTime(aDeger))
else Bicimlendir := eger(aString > aDeger);
end;
end else begin
if (VarIsEmpty(aString) = FALSE) and (VarIsEmpty(aString2) = FALSE) then begin
if (ZamanVar = TRUE)
then Bicimlendir := eger(aZaman1 > aZaman2)
else Bicimlendir := eger(aString > aString2);
end;
end;
end else
if (aKriter = '<>') then begin
if (aAlan2 = '') then begin
if (VarIsEmpty(aString) = false) then begin
if (ZamanVar = TRUE)
then Bicimlendir := eger(aZaman1 <> StrToDateTime(aDeger))
else Bicimlendir := eger(aString <> aDeger);
end;
end else begin
if (VarIsEmpty(aString) = FALSE) and (VarIsEmpty(aString2) = FALSE) then begin
if (ZamanVar = TRUE)
then Bicimlendir := eger(aZaman1 <> aZaman2)
else Bicimlendir := eger(aString <> aString2);
end;
end;
end else
if (aKriter = '>=') then begin
if (aAlan2 = '') then begin
if (VarIsEmpty(aString) = false) then begin
if (ZamanVar = TRUE)
then Bicimlendir := eger(aZaman1 >= StrToDateTime(aDeger))
else Bicimlendir := eger(aString >= aDeger);
end;
end else begin
if (VarIsEmpty(aString) = FALSE) and (VarIsEmpty(aString2) = FALSE) then begin
if (ZamanVar = TRUE)
then Bicimlendir := eger(aZaman1 >= aZaman2)
else Bicimlendir := eger(aString >= aString2);
end;
end;
end else
if (aKriter = '<=') then begin
if (aAlan2 = '') then begin
if (VarIsEmpty(aString) = false) then begin
if (ZamanVar = TRUE)
then Bicimlendir := eger(aZaman1 <= StrToDateTime(aDeger))
else Bicimlendir := eger(aString <= aDeger);
end;
end else begin
if (VarIsEmpty(aString) = FALSE) and (VarIsEmpty(aString2) = FALSE) then begin
if (ZamanVar = TRUE)
then Bicimlendir := eger(aZaman1 <= aZaman2)
else Bicimlendir := eger(aString <= aString2);
end;
end;
end else
if (aKriter = 'içinde') then begin
if (aAlan2 = '')
then Bicimlendir := eger(AnsiPos(lowercase(VarToStr(aDeger)), lowercase(VarToStr(aString))) > 0)
else Bicimlendir := eger(AnsiPos(lowercase(VarToStr(aString2)), lowercase(VarToStr(aString))) > 0);
if (aAlan2 = '') then begin
if (VarIsEmpty(aString) = false) then begin
if (ZamanVar = TRUE)
then Bicimlendir := eger(aZaman1 < StrToDateTime(aDeger))
else Bicimlendir := eger(aString < aDeger);
end;
end else begin
if (VarIsEmpty(aString) = FALSE) and (VarIsEmpty(aString2) = FALSE) then begin
if (ZamanVar = TRUE)
then Bicimlendir := eger(aZaman1 < aZaman2)
else Bicimlendir := eger(aString < aString2);
end;
end;
end else
if (aKriter = 'gün farkı') then begin
if (aAlan2 = '') then begin
try if DaySpan( VarToDateTime(aString), NOW) > StrToInt(aDeger) then Bicimlendir := TRUE;
except end;
end else begin
try if DaySpan(VarToDateTime(aString), VarToDateTime(aString2)) > aDeger then Bicimlendir := TRUE;
except end;
end;
end else
if (aKriter = 'arasında') then begin
end else
if (aKriter = 'sayısal fark') then begin
{
if (aAlan2 = '') then begin
try
if abs(Integer(aString)) > abs(StrToInt(aDeger)) then Bicimlendir := TRUE;
except
Bicimlendir := FALSE;
end;
end else begin
try
if abs(Integer(aString)) > abs(Integer(aString2)) then Bicimlendir := TRUE;
except
Bicimlendir := FALSE;
end;
end;
}
end;
{Bu noktadan sonra biçimlendirme devreye giriyor...}
if (Bicimlendir = TRUE) then begin
if ( Bicim.ZeminRengi <> TColor(0) ) then aCanvas.Brush.Color := TColor( Bicim.ZeminRengi );
if ( Bicim.MetinRengi <> TColor(0) ) then aCanvas.Font.Color := TColor( Bicim.MetinRengi );
if ( Bicim.Kalin = TRUE ) then aCanvas.Font.Style := aCanvas.Font.Style + [fsBold] else aCanvas.Font.Style := aCanvas.Font.Style - [fsBold];
if ( Bicim.Yatik = TRUE ) then aCanvas.Font.Style := aCanvas.Font.Style + [fsItalic] else aCanvas.Font.Style := aCanvas.Font.Style - [fsItalic];
if ( Bicim.AltiCizik = TRUE ) then aCanvas.Font.Style := aCanvas.Font.Style + [fsUnderline] else aCanvas.Font.Style := aCanvas.Font.Style - [fsUnderline];
if ( Bicim.UstuCizik = TRUE ) then aCanvas.Font.Style := aCanvas.Font.Style + [fsStrikeOut] else aCanvas.Font.Style := aCanvas.Font.Style - [fsStrikeOut];
end;
end;
end;
end;