Arşiv Anasayfa Veritabanı Makaleleri
Sayfalar: 1
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: