Newsgroup: it.comp.lang.delphi
Titolo: cambiare il colore degli Edit

ciao a tutti,
come faccio a cambiare il colore di tutti gli edit di una form in giallo
nell'evento "On Enter" e a farlo tornare bianco nell'evento "On Exit"???
ciao!

usa questo:
procedure TMainForm.Attiva_colore(Sender: TObject);
begin
  if sender.ClassType = Tedit then
    (Sender as TEdit).Color := colore_scelto_in_entrata;
end;
procedure TMainForm.Disattiva_colore(Sender: TObject);
begin
  if sender.ClassType = Tedit then
   (Sender as TEdit).Color := colore_scelto_in_uscita;
end;
ciao, omerosx

[cut]
dove lo inserisco questo codice???
ciao

se vuoi, le due procedure le dichiari public nel MainForm e poi una la
richiami nell'evento OnEnter del TEdit e l'altra nell'evento OnExit
omerosx

 richiami nell'evento OnEnter del TEdit e l'altra nell'evento OnExit
ma devo richiamarle per ogni Tedit???
ciao

> ma devo richiamarle per ogni Tedit???
certamente. Il vantaggio delle routine che ti ho passato è quello che non
devi per ogni TEdit gestire il proprio evento OnExit.ecc..
ad esempio l'evento OnEnter del componente TEdit1.text genera di solito
TEdit1.OnEnter(sender); ecc. Tu in questo modo eviti di far generare nuove
routine per ogni componente.
Quindi OGNI componente TEdit avrà nel suo evento OnEnter la routine
MainForm.Attiva_colore e nel suo evento OnExit la routine
MainForm.Disattiva_colore
ciao, omerosx

 devi per ogni TEdit gestire il proprio evento OnExit.ecc..
scusa ma non ho capito se devo incollare il tuo codice negli eventi OnExit e
On enter di tutti gli edit presenti nella form oppure no...

Allora ... potevi dirlo subito che eri un novizio :)
Crea due procedure nel form che hai creato in questo modo:
procedure TMainForm.Attiva_colore(Sender: TObject);
begin
  if sender.ClassType = Tedit then
    (Sender as TEdit).Color := clyellow;
end;
procedure TMainForm.Disattiva_colore(Sender: TObject);
begin
  if sender.ClassType = Tedit then
   (Sender as TEdit).Color := clwhite;
end;
aggiungi nelle dichiarazioni del form le due righe :
procedure Attiva_colore(Sender: TObject);
procedure Disattiva_colore(Sender: TObject);
(se vuoi riutilizzare queste procedure per altri form della tua applicazione
le devi mettere sotto la voce public)
poi nella TUA FORM (che io ho indicato com TMainForm ma tu cambia il nome
con il tuo) seleziona tutti i TEdit e poi premi F11. Ti apparirà Object
Inspector. Vai nella parte degli eventi e sull'evento OnEnter indica
Attiva_Colore e sull'evento OnExit indica Disattiva_Colore.
Funzionamento : ogni volta che un TEdit acquista il focus si attiva l'evento
OnEnter che passarà alla funzione Attiva_Colore le coordinare dell'TEdit in
questione e ne cambierà il colore da bianco a giallo. Viceversa nell'evento
OnExit.
Perchè utilizzare questo algoritmo ?
Perchè non ci dobbiamo più preoccupare di quanti TEdit abbiamo e non
dobbiamo per ognuno di loro scrivere righe di codice per il proprio evento.
Questa volta sono stato esauriente ?? :))
ciao, e buon lavoro
omerosx

 nell'evento "On Enter" e a farlo tornare bianco nell'evento "On
Exit"???
Oltre a quanto scrive omerosx, potresti subclassare TEdit per dargli le
proprieta' che desideri. Per fare quanto descrivi 5-10 minuti dovrebbero
essere sufficienti: v.esempio. Ovviamente dovrai usare i componenti
derivati e non i TEdit.
Saluti
Paolo Arosio
{
Questo codice e' fornito senza alcuna garanzia
This code is published as-is
}
unit ShowEdit;
interface
uses
  Windows, Messages, SysUtils, Classes, Controls, StdCtrls, Graphics;
type
  TShowEdit = class(TEdit)
  private      { Private declarations }
    fExitColor: TColor;
    fEnterColor: TColor;
    fDontShowIfReadOnly: boolean;
    procedure SetDontShowIfReadOnly(const Value: boolean);
    procedure SetEnterColor(const Value: TColor);
    procedure SetExitColor(const Value: TColor);
  protected    { Protected declarations }
    procedure ApplyColor; dynamic;
    procedure DoEnter; override;
    procedure DoExit; override;
  public       { Public declarations }
    constructor Create(aOwner: TComponent); override;
  published    { Published declarations }
    property EnterColor: TColor read fEnterColor write SetEnterColor;
    property ExitColor: TColor read fExitColor write SetExitColor;
    property DontShowIfReadOnly: boolean read fDontShowIfReadOnly write
SetDontShowIfReadOnly
      default False;
  end;
procedure Register;
implementation
procedure Register;
begin
  RegisterComponents('Samples', [TShowEdit]);
end;
{ TShowEdit }
constructor TShowEdit.Create(aOwner: TComponent);
begin
  inherited Create(aOwner);
  fDontShowIfReadOnly := True;
  fExitColor := clWindow;
  fEnterColor := clYellow;
end;
procedure TShowEdit.ApplyColor;
begin
  if Focused then begin
    if fDontShowIfReadOnly and ReadOnly then
      Color := fExitColor
    else
      Color := fEnterColor;
  end
  else
    Color := fExitColor;
end;
procedure TShowEdit.DoEnter;
begin
  ApplyColor;
  inherited;
end;
procedure TShowEdit.DoExit;
begin
  ApplyColor;
  inherited;
end;
procedure TShowEdit.SetDontShowIfReadOnly(const Value: boolean);
begin
  if fDontShowIfReadOnly <> Value then begin
    fDontShowIfReadOnly := Value;
    ApplyColor;
  end;
end;
procedure TShowEdit.SetEnterColor(const Value: TColor);
begin
  if fEnterColor <> Value then begin
    fEnterColor := Value;
    ApplyColor;
  end;
end;
procedure TShowEdit.SetExitColor(const Value: TColor);
begin
  if fExitColor <> Value then begin
    fExitColor := Value;
    ApplyColor;
  end;
end;
end.