tüm editlerim için içine girilince rengini değiştirebilirmim

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
AliErdem
Üye
Mesajlar: 157
Kayıt: 16 Nis 2006 02:57

tüm editlerim için içine girilince rengini değiştirebilirmim

Mesaj gönderen AliErdem »

yoksa hepsinin onenter olayına

edit1.color:=clskyblue;

mu yapacağım ??


teşekür şimdiden
ulu coder
Üye
Mesajlar: 838
Kayıt: 01 Nis 2006 06:46
Konum: Ankara

Mesaj gönderen ulu coder »

Çözüm sırasında hata verecek, hayır de.
Edit1'in OnEnter olayına şunu yaz;

Kod: Tümünü seç

sender.Color:=clblue;
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.
Kullanıcı avatarı
nitro
Üye
Mesajlar: 1112
Kayıt: 23 Ağu 2004 01:18
Konum: Çanakkale
İletişim:

Mesaj gönderen nitro »

OMEEDİT diye bi bileşen seti var. ücretsiz.
ondaki edit ve dbedit nesneleri içine girince rengi değişiyor.
kolay gelsin.
Kullanıcı avatarı
AliErdem
Üye
Mesajlar: 157
Kayıt: 16 Nis 2006 02:57

Mesaj gönderen AliErdem »

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 ?
fduman
Moderator
Mesajlar: 2749
Kayıt: 17 Ara 2004 12:02
Konum: Ankara

Mesaj gönderen fduman »

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
yapmak yeterlidir. Event handler parametrelerini değiştirmenize gerek yok.
Kullanıcı avatarı
AliErdem
Üye
Mesajlar: 157
Kayıt: 16 Nis 2006 02:57

Mesaj gönderen AliErdem »

coderlord peki ben bu onenter olayını önceden onenter olayına kod yazılmış kontrole uygulayabilirmiyim?
fduman
Moderator
Mesajlar: 2749
Kayıt: 17 Ara 2004 12:02
Konum: Ankara

Mesaj gönderen fduman »

Aynı OnEnter event'i içine yazman mümkün ise öyle yapabilirsin.
Kullanıcı avatarı
AliErdem
Üye
Mesajlar: 157
Kayıt: 16 Nis 2006 02:57

Mesaj gönderen AliErdem »

teşekkür ederim bi kaç tane önceden onenter eventine kod yazılmış editim vardı onlarında kodların arasına sıkıştırdım renk değişimini hallettim saol tekrar
ulu coder
Üye
Mesajlar: 838
Kayıt: 01 Nis 2006 06:46
Konum: Ankara

Mesaj gönderen ulu coder »

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 ?
Sorunu görünce aklıma ilk şu geldi; OnEnter'ları ortaklaşa kullanmak.
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 :lol:

@Coderlord'un yöntemi daha uygun.
t-hex
Kıdemli Üye
Mesajlar: 531
Kayıt: 18 Mar 2005 02:45
Konum: İstanbul/Antalya
İletişim:

Mesaj gönderen t-hex »

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.

Kod: Tümünü seç

TWinControl(Sender).Color =  clYellow
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:

Kod: Tümünü seç

type
 TWinControlHack = class(TWinControl)
...
begin
 TWinControlHack(Sender).Color := clYellow;
end;
Bu kodda hiç bir sorun çıkmayacaktır.

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.
Sonra designerda açıp üstüne istediğiniz türde bileşen yerleştirin, hepsinin renkleri odaklandıklarında değişecektir.
Kullanıcı avatarı
Trial_Cooder
Üye
Mesajlar: 236
Kayıt: 17 Nis 2006 04:44

Mesaj gönderen Trial_Cooder »

Edit'in OnClick'ine;

Kod: Tümünü seç

Sender.Color := clBlue;
OnExit'ine'de;

Kod: Tümünü seç

Sender.Color := clWhite;
Aktif Olduğunda Mavi, Olmadığında Beyaz Olur.
poshet303
Üye
Mesajlar: 235
Kayıt: 26 Eki 2005 01:15

Mesaj gönderen poshet303 »

Edit'in OnClick'ine;

Kod:
Sender.Color := clBlue;
Onclick te rengi değiştirdik diyelim. Adam TAB tuşu ile edit e gelirse ne olacak?

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.
Cevapla