Renkleri Veritabanına Kaydetmek Gönderen: dynamo Tarih: 26 April 2007 18:26:20
Renkler delphi de 3 şekilde tanımlayabiliriz:
1-)TColor sınıfından
2-)Decimal olarak
3-)Hexadecimal olaral:
TColor Decimal Hexadecimal
-------------------------------------
clRed 255 FF0000
Delphi'de ColorBox nesnesini kullanışsız olduğundan onun yerine MCColorPanel adlı komponenti kullanıyoruz.anadb veritabanında renk_kayit tablomuz olsun.

MCColorPanel1 de seçilen rengin renk değerlerini editlere atmak ve panel1 de göstermek için OnChange olayını kullanıyoruz:
procedure TForm1.MCColorPanel1Change(Sender: TObject);
var
L: Longint;
begin
L := ColorToRGB(MCColorPanel1.Color);
edRed.Text := IntToStr(GetRValue(L));
edGreen.Text := IntToStr(GetGValue(L));
edBlue.Text := IntToStr(GetBValue(L));
edHex.Text := GetHexColor(L);
//edit1.Text:= IntToStr(MCColorPanel1.Color);
panel1.Color:= TColor(MCColorPanel1.Color);
end;
Tabloya kaydetme:
procedure TForm1.BitBtn2Click(Sender: TObject);
begin
ADOQuery1.Close;
ADOQuery1.SQL.Text:='select * from renk_kayit where renk_kodu='''+Edit1.Text+'''';
ADOQuery1.Open;
if (ADOQuery1.RecordCount =0 ) then begin
ADOQuery1.Insert;
ADOQuery1.FieldByName('renk_kodu').AsString:=Edit1.Text;
ADOQuery1.FieldByName('aciklama').AsString:=Edit2.Text;
ADOQuery1.FieldByName('renk_id').AsInteger:=MCColorPanel1.Color;
ADOQuery1.Post;
end
else begin
ADOQuery1.Edit;
ADOQuery1.FieldByName('renk_kodu').AsString:=Edit1.Text;
ADOQuery1.FieldByName('aciklama').AsString:=Edit2.Text;
ADOQuery1.FieldByName('renk_id').AsInteger:=MCColorPanel1.Color;
ADOQuery1.Post;
end;
end;
tabloya renkleri decimal olarak integer tanımlanmış
renk_id alanına kaydediyorum.istenirse hexadecimal olarak da kaydedilebilir.
Renkleri DBGrid'te göstermek için DBGridin
OnDrawColumnCell olayına bu kodu yazalım:
procedure TfrmRenk_Listesi.DBGrid1DrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumn;
State: TGridDrawState);
begin
if DataCol = 2 then begin //2 nolu kolon renk_id
DBGrid1.Canvas.Brush.Color:=ADOQuery1.FieldByName('renk_id').AsInteger;
DBGrid1.Canvas.Font.Color:=ADOQuery1.FieldByName('renk_id').AsInteger;
end;
DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;

eğer bu kodu yazmazsak renk_id alanında dbgridte rengin sayısal değeri görünür.
örnek proje içinde ekte,MCColorPanel kompnenti içinde: