Delphide nesneleri renklendirmek istiyorsunuz. editler içine girilince kırmızı olsun çıkınca yeşil olsun aktif combobox lacivert olsun. ama memoların içi portakal turuncusu ile havuç turuncusu arasında bir renk olsun…
İnternette biraz araştırdım, delphi form nesneleri nasıl renklendirilir diye. biçok yerde, o edite tıkla, on enter olayında rengini değiştir, on exit olayında eski rengine çevir, işte bu kadar. delphi edit renklendirme bitti. Soruyorlar e 100 tane edit var benim programda napcaz, cevap: üzgünüm çözümü yok tek tek yapacaksın.
Uzun lafın kısası, tek tek yazmadan, tek bir defada, formunuzdaki bütün nesnelerin program akışında nasıl renklendirileceğini aşağıda anlatacağım.
Konunun kaynağı burasıdır.
Ama orası çok uzun ve ingilizce, ben kısa ve hızlı halini anlattım.
uses satırına eğer ekli değilse ekleyiniz: System.TypInfo;
eğer formu olmayan bir fonksiyon dosyasında vs tutmak istiyorsanız, Vcl.StdCtrls class’ını da uses bloğuna dahil edin.
Sadece otomatik olarak oluşturulan ve ilk açılan ekranınızda
{ Private declarations } bölümüne
Kod:
procedure ScreenActiveControlChange
(Sender : TObject);
procedure EnterColor(Sender : TWinControl);
procedure ExitColor(Sender : TWinControl);implementation bölümünün üzerine ekleyin
Kod:const
focusColor = clSkyBlue;var
lastFocused : TWinControl;
originalColor : TColor;
İşlem yaptığımız formda program kodlarını yazdığınız bölümde, son end’den önce olabilir. Aşağıdaki kodları ekleyin.
Kod:
procedure TMainForm.ScreenActiveCon
trolChange(Sender: TObject);
var
doEnter, doExit : boolean;
previousActiveControl : TWinControl;
begin
if Screen.ActiveControl = nil then
begin
lastFocused := nil;
Exit;
end;doEnter := true;
doExit := true;//CheckBox
if Screen.ActiveControl is TButtonControl then doEnter := false;previousActiveControl := lastFocused;
if previousActiveControl <> nil then
begin
//CheckBox
if previousActiveControl is TButtonControl then doExit := false;
end;lastFocused := Screen.ActiveControl;
if doExit then ExitColor(previousActiveC
ontrol);
if doEnter then EnterColor(lastFocused);
end;procedure TMainForm.EnterColor(Send
er: TWinControl);
begin
if Sender <> nil then
begin
if IsPublishedProp(Sender,’Color’) then
begin
originalColor := GetOrdProp(Sender,’Color’);
SetOrdProp(Sender,’Color’, focusColor);
end;
end;
end;procedure TMainForm.ExitColor(Sende
r: TWinControl);
begin
if Sender <> nil then
begin
if IsPublishedProp(Sender,’Color’) then
begin
SetOrdProp(Sender,’Color’,originalColor);
end;
end;
end;
Form Create Olayına
Screen.OnActiveControlCha
nge := ScreenActiveControlChange ; Form Destroy Olayına
Kod:Screen.OnActiveControlCha
nge := nil;