Cambio COLORI nei campi!!! AIUTO !!

di il
6 risposte

Cambio COLORI nei campi!!! AIUTO !!

Ciao a tutti ragazzi o bisogno di aiuto...allora io volevo fare una cosa carina nel mio programma in Borland C++ Builder 6!
Quando uno cambia campo il colore deve cambiare per esempio da bianco a blu poi quando si esce da campo deve tornare bianco!
Sono riuscito con gli eventi Enter e Exit ma...ho una schermata con 30 campi...non avrei voglia di scrivere tutto...

Qualcuno conosce un metodo più rapido??
I avevo pensato di fare un evento Exit e uno Enter comuni poi quando l'oggetto richiama uno dei due eventi gli passa il suo nome o il tipo...però non ci riesco!!!

Datemi un aiuto...anche se conoscete il metodo non in C++ fatemelo sapere!!!

6 Risposte

  • Re: Cambio COLORI nei campi!!! AIUTO !!

    Non conosco Borland C++ Builder 6, ma te lo posso dire in Delphi che dovrebbe essere simile se non uguale.

    Devi creare una procedura del tipo:

    Procedure ObjectEnter(Oggetto : TObject);
    begin
    if Oggetto is TEdit then
    TEdit(Oggetto).Color := clBlue;

    if Oggetto is TComboBox then
    TComboBox(Oggetto).Color := clBlue;
    End;

    Con un if per ogni tipo di oggetto che puoi utilizzare.
    Poi crei una procedura ObjectExit con le stesse caratteristiche, ma con il colore bianco.

    L’evento Enter sarà:
    procedure TForm1.Edit1Enter(Sender: TObject);
    begin
    inherited;
    ObjectEnter(Sender);
    end;

    Stessa cosa per l’evento Exit

    In questo modo devi riportare solo 1 riga per ogni evento

    Spero di esserti stato utile.
    Ciao.
  • Re: Cambio COLORI nei campi!!! AIUTO !!

    I suggerimenti di delphi non sono corretti né nella forma né nel contenuto. Per fare una cosa fatta bene dovresti rieditarti il componente che ti server ed aggiungere due eventi: onMouseOver, onMouseLeave; anche perchè ,da come la persona di prima ha scritto, non si capisce chi ti faccia scattare l'evento!!!

    Programmatore Delphi di livello avanzato sempre pronto a collaborazioni soprattutto se remunerative.
  • Re: Cambio COLORI nei campi!!! AIUTO !!

    Scusa se non sono stato chiaro,
    ObjectEnter è una semplice procedura,
    mentre l’evento utilizzato, Edit1Enter, sarebbe l’evento OnEnter dell’oggetto Edit1 di tipo TEdit inserito nella mappa.
    Mi sembrava una buona soluzione in quanto editando la sola procedura ObjectEnter, si poteva gestire il colore dell’oggetto selezionato di qualunque tipo esso sia (TEdit, TcomboBox, TcheckBox, ecc…).

    Ma mi piacerebbe molto approfondire la soluzione di Morpheus, se mi potresti far sapere come si fa ad editare un componete standard, e magari aggiungerlo alla palette di Delphi te ne sarei grato.
  • Re: Cambio COLORI nei campi!!! AIUTO !!

    Questo per esempio è un componente che mi sono fatto io. Non è altro che un TImage con in + gli eventi mouse enter, mouse leave.

    TImageEx = class (TImage)
    private
    { Private declarations }
    FOnMouseLeave: TNotifyEvent;
    FOnMouseEnter: TNotifyEvent;
    procedure CMMouseEnter(var msg: TMessage);
    message CM_MOUSEENTER;
    procedure CMMouseLeave(var msg: TMessage);
    message CM_MOUSELEAVE;
    protected
    { Protected declarations }
    procedure DoMouseEnter; dynamic;
    procedure DoMouseLeave; dynamic;
    public
    { Public declarations }
    published
    { Published declarations }
    property OnMouseEnter: TNotifyEvent read FOnMouseEnter write FOnMouseEnter;
    property OnMouseLeave: TNotifyEvent read FOnMouseLeave write FOnMouseLeave;
    end;


    il codice degli eventi e delle procedure è

    procedure TImageEx.CMMouseEnter(var msg: TMessage);
    begin
    DoMouseEnter;
    end;

    procedure TImageEx.CMMouseLeave(var msg: TMessage);
    begin
    DoMouseLeave;
    end;

    procedure TImageEx.DoMouseEnter;
    begin
    if Assigned(FOnMouseEnter) then FOnMouseEnter(Self);
    end;

    procedure TImageEx.DoMouseLeave;
    begin
    if Assigned(FOnMouseLeave) then FOnMouseLeave(Self);
    end;

    Spero di essere stato chiaro. Se vuoi altri suggerimenti dimmelo

    Programmatore Delphi di livello avanzato sempre pronto a collaborazioni soprattutto se remunerative.
  • Re: Cambio COLORI nei campi!!! AIUTO !!

    Ciao…
    Ho creato la nuova classe TImageEx, ma non sono riuscito a capire chi e come richiama le procedure:
    procedure TImageEx.CMMouseEnter(var msg: TMessage);
    procedure TImageEx.CMMouseLeave(var msg: TMessage);

    e a che cosa serve nella dichiarazione “dynamic” delle procedure:
    procedure DoMouseEnter; dynamic;
    procedure DoMouseLeave; dynamic;

    Grazie.
  • Re: Cambio COLORI nei campi!!! AIUTO !!

    Se ci fai caso dopo la dichiarazione della procedura CMMouseEnter
    c'è specificato il messaggio di windows da trappare e cioè
    message CM_MOUSEENTER;
    dunque non troverai una procedura che lo richiama ma è lo stesso windows che richiama la procedura al verificarsi dell'evento mouse enter. Dynamic specifica che il metodo dichiarato può essere reeditato e reimplementto da altre classi come lo specificatore virtual. L'unica differenza tra i 2 è che virtual è ottimizzato per la velocità di esecuzione mentre dynamic per memoria utilizzata. Per esempio se dichiari molti metodi virtual che sai che solo pochi verranno reimplementati dalla classe che li utilizza ti conviene dichiararli dynamic per il semplice fatto che solo dynamic non utilizza memoria se il metodo non è reimplementato. Spero di essere stato chiaro. Non è facile spiegare cose che sono abbastanza difficili per sviluppatori non molto esperti.

    Programmatore Delphi di livello avanzato sempre pronto a collaborazioni soprattutto se remunerative.
Devi accedere o registrarti per scrivere nel forum
6 risposte