unit uDialogElegirEMail; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, uDialogBase, ActnList, StdCtrls, ExtCtrls, dxSkinsCore, dxSkinBlue, dxSkinCaramel, dxSkinCoffee, dxSkinGlassOceans, dxSkiniMaginary, dxSkinLilian, dxSkinLiquidSky, dxSkinLondonLiquidSky, dxSkinMcSkin, dxSkinMoneyTwins, dxSkinOffice2007Black, dxSkinOffice2007Blue, dxSkinOffice2007Green, dxSkinOffice2007Pink, dxSkinOffice2007Silver, dxSkinSilver, dxSkinStardust, dxSkinsDefaultPainters, dxSkinValentine, dxSkinXmas2008Blue, cxControls, cxContainer, cxEdit, cxTextEdit, cxHyperLinkEdit; type TfDialogElegirEMail = class(TfDialogBase) Panel1: TPanel; rbCombo: TRadioButton; cbEMail: TComboBox; rbEdit: TRadioButton; edtEMail: TcxHyperLinkEdit; procedure rbComboClick(Sender: TObject); procedure rbEditClick(Sender: TObject); procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean); procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure FormShow(Sender: TObject); procedure actAceptarExecute(Sender: TObject); procedure actCancelarExecute(Sender: TObject); private FListaDirecciones: TStringList; function GetEMailElegido: String; procedure ActualizarOpciones; public property EMailElegido: String read GetEMailElegido; property ListaDirecciones : TStringList read FListaDirecciones write FListaDirecciones; end; function ElegirEMail(const AListaEMails : TStringList; var AEMailElegido : String): Boolean; implementation {$R *.dfm} uses uStringsUtils, uDialogUtils, uEMailUtils; function ElegirEMail(const AListaEMails : TStringList; var AEMailElegido : String): Boolean; var AEditor : TfDialogElegirEMail; begin AEditor := TfDialogElegirEMail.Create(NIL); try AEditor.ListaDirecciones := AListaEMails; Result := (AEditor.ShowModal = mrOk); if Result then AEMailElegido := AEditor.EMailElegido; finally AEditor.Release; end; end; { TfDialogElegirEMail } procedure TfDialogElegirEMail.actAceptarExecute(Sender: TObject); begin inherited; ModalResult := mrOk end; procedure TfDialogElegirEMail.actCancelarExecute(Sender: TObject); begin inherited; ModalResult := mrCancel; end; procedure TfDialogElegirEMail.ActualizarOpciones; begin if rbEdit.Checked then begin edtEMail.Enabled := True; rbCombo.Checked := False; cbEMail.Enabled := False; end else begin if rbCombo.Enabled then begin cbEMail.Enabled := True; edtEMail.Enabled := False; rbEdit.Checked := False; end else rbEdit.Checked := True; end; end; procedure TfDialogElegirEMail.FormCloseQuery(Sender: TObject; var CanClose: Boolean); begin inherited; if (ModalResult = mrOk) and rbEdit.Checked then begin if not EsCadenaVacia(edtEMail.Text) then begin if not IsValidEmail(edtEMail.Text) then begin ShowErrorMessage('Elegir dirección de correo electrónico', 'La dirección de correo electrónica no es válida. Compruebe que está bien escrita.'); edtEMail.SetFocus; CanClose := False; end; end else begin ShowErrorMessage('Elegir dirección de correo electrónico', 'Debe indicar una dirección de correo electrónico.'); edtEMail.SetFocus; CanClose := False; end; end; end; procedure TfDialogElegirEMail.FormCreate(Sender: TObject); begin inherited; //FListaDirecciones := TStringList.Create; <- La lista se da mediante la propiedad. end; procedure TfDialogElegirEMail.FormDestroy(Sender: TObject); begin inherited; //FreeAndNIL(FListaDirecciones) <- La lista se da mediante la propiedad. end; procedure TfDialogElegirEMail.FormShow(Sender: TObject); begin inherited; cbEMail.Items.Clear; cbEMail.Items := FListaDirecciones; if cbEMail.Items.Count = 0 then begin rbCombo.Enabled := False; rbEdit.Checked; end else begin cbEMail.ItemIndex := 0; rbCombo.Checked := True; end; ActualizarOpciones; end; function TfDialogElegirEMail.GetEMailElegido: String; begin if rbCombo.Checked then Result := cbEMail.Text else Result := edtEMail.Text; end; procedure TfDialogElegirEMail.rbComboClick(Sender: TObject); begin inherited; rbEdit.Checked := False; ActualizarOpciones; end; procedure TfDialogElegirEMail.rbEditClick(Sender: TObject); begin inherited; rbEdit.Checked := True; ActualizarOpciones; end; end.