tüm editlerim için içine girilince rengini değiştirebilirmim
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
tüm editlerim için içine girilince rengini değiştirebilirmim
yoksa hepsinin onenter olayına
edit1.color:=clskyblue;
mu yapacağım ??
teşekür şimdiden
edit1.color:=clskyblue;
mu yapacağım ??
teşekür şimdiden
Çözüm sırasında hata verecek, hayır de.
Edit1'in OnEnter olayına şunu yaz;
ObjectIns'den diğer editlerin OnEnter'ını Edit1Enter seç.
Edit1'in OnEnter prosedürünün tanımlandığı yerde
procedure Edit1Enter(Sender: TObject);
yazıyor, ordaki TObject'i TEdit olarak değiştir.
Procedure'nin kodlarını yazdığın yerde de TObject'i TEdit yap.
ilk çalıştırdığında hata veriyor, sonra boyun eğiyor.
Son olarak; bence bunu OnChange'e yapıp, boş olup olmamasını kontrol edersen daha hoş olur.
Edit1'in OnEnter olayına şunu yaz;
Kod: Tümünü seç
sender.Color:=clblue;
Edit1'in OnEnter prosedürünün tanımlandığı yerde
procedure Edit1Enter(Sender: TObject);
yazıyor, ordaki TObject'i TEdit olarak değiştir.
Procedure'nin kodlarını yazdığın yerde de TObject'i TEdit yap.
ilk çalıştırdığında hata veriyor, sonra boyun eğiyor.
Son olarak; bence bunu OnChange'e yapıp, boş olup olmamasını kontrol edersen daha hoş olur.
ulu coder yazdı: procedure Edit1Enter(Sender: TObject);
yazıyor, ordaki TObject'i TEdit olarak değiştir.
Procedure'nin kodlarını yazdığın yerde de TObject'i TEdit yap.
ilk çalıştırdığında hata veriyor, sonra boyun eğiyor.
Kod: Tümünü seç
TEdit(Sender).Color:= clBlue
Sorunu görünce aklıma ilk şu geldi; OnEnter'ları ortaklaşa kullanmak.AliErdem yazdı:teşekürler arkadaşlar ulu coder senin yaptığın işimi fazlasıyla gördü ama bu object i edit yapmanın mantığı ne ?
Yaptım, hangi edit'e girilirse girilsin aynı edit'in rengini değiştiriyordu.
Sender'ı kullanmam gerektiğini anladım.
Ama sender TObject idi, ve bu yüzden Sender.Color diye bi şey kullanamadım.
Ben de Sender'ı TEdit yapmayı denedim oldu

@Coderlord'un yöntemi daha uygun.
Peki form sadece editlerden oluşmuyorsa? o zaman tek tek her tip için typecast yapmak gerekir. TComboBox(Sender), TListBox(Sender) vs.. gibi.
Bir başka yöntemde açık açık nesnenin sınıfına typecast yapmak yerine şunu denemek olabilir.
Ama bunu yazdığımızda da hata alırız çünkü TWinControl sınıfında Color Propertysi protected olarak tanımlanmış ve dolayısıyla buna erişemiyoruz. Bu sorunu da şöyle çözebilirsiniz:
Bu kodda hiç bir sorun çıkmayacaktır.
Denemek için Yeni bir form yaratın ve içine şu kodu yazın
Sonra designerda açıp üstüne istediğiniz türde bileşen yerleştirin, hepsinin renkleri odaklandıklarında değişecektir.
Bir başka yöntemde açık açık nesnenin sınıfına typecast yapmak yerine şunu denemek olabilir.
Kod: Tümünü seç
TWinControl(Sender).Color = clYellow
Kod: Tümünü seç
type
TWinControlHack = class(TWinControl)
...
begin
TWinControlHack(Sender).Color := clYellow;
end;
Denemek için Yeni bir form yaratın ve içine şu kodu yazın
Kod: Tümünü seç
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls;
type
TForm1 = class(TForm)
procedure WinControlEnter(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure WinControlExit(Sender: TObject);
private
public
end;
TWinControlHack = class(TWinControl);
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.WinControlEnter(Sender: TObject);
begin
TWinControlHack(Sender).color := clYellow;
end;
procedure TForm1.WinControlExit(Sender: TObject);
begin
TWinControlhack(Sender).color := clWindow;
end;
procedure TForm1.FormCreate(Sender: TObject);
var
i : integer;
begin
for i:= 0 to ControlCount-1 do
if Controls[i] is TWinControl then begin
TWinControlHack(Components[i]).OnEnter := WinControlEnter;
TWinControlHack(Components[i]).OnExit := WinControlExit;
end;
end;
end.
- Trial_Cooder
- Üye
- Mesajlar: 236
- Kayıt: 17 Nis 2006 04:44
Edit'in OnClick'ine;
OnExit'ine'de;
Aktif Olduğunda Mavi, Olmadığında Beyaz Olur.
Kod: Tümünü seç
Sender.Color := clBlue;
Kod: Tümünü seç
Sender.Color := clWhite;
Onclick te rengi değiştirdik diyelim. Adam TAB tuşu ile edit e gelirse ne olacak?Edit'in OnClick'ine;
Kod:
Sender.Color := clBlue;
Birde OnEnter OnExit eventları ile renk geçişi yapmanın şöyle bir sorunu olabiliyor. Eğer ilgili edit içinde istisna yaratan bir durum olursa. Mesela bir tip dönüşümü falan, OnExit gerçekleşmeden odak başka edit e geçebiliyor o zaman sizin ayarladığınız renklere göre iki tane ODAKlanmış Edit görünüyor formda. Çirkin bir durum. Bu durumu göz önüne almanızı tavsiye ederim.