unit uDAClientDataModuleEditorForm; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, uDAClientDataModule, StdCtrls, Buttons, DesignIntf; type TDAClientDataModuleEditorForm = class(TForm) btn_CreateTables: TBitBtn; BitBtn2: TBitBtn; lbl_ServerUrl1: TLabel; ed_ServerUrl: TEdit; lbl_ServerUrl2: TLabel; lbl_ServerUrl3: TLabel; Label4: TLabel; Label5: TLabel; cb_Services: TComboBox; BitBtn1: TBitBtn; procedure ed_ServerUrlChange(Sender: TObject); procedure cb_ServicesEnter(Sender: TObject); procedure BitBtn2Click(Sender: TObject); procedure btn_CreateTablesClick(Sender: TObject); procedure cb_ServicesChange(Sender: TObject); private fServerUrlChanged: boolean; fRestoreServerUrl: string; fModule:TDAClientDataModule; fCreateDataTables: boolean; procedure FillServiceCombo; public class function Execute(aOwner: TCOmponent; aModule:TDAClientDataModule; aDesigner:IDesigner):boolean; end; var DAClientDataModuleEditorForm: TDAClientDataModuleEditorForm; implementation uses uROClasses, TypInfo, uDAIDERes, uDAPleaseWaitForm, uDAClientDataModuleDataTableWizardForm; {$R *.dfm} { TDAClientDataModuleEditorForm } class function TDAClientDataModuleEditorForm.Execute(aOwner: TCOmponent; aModule: TDAClientDataModule; aDesigner:IDesigner): boolean; begin if not Assigned(aModule.RemoteService) then RaiseError(err_AssignRemoteService); if not Assigned(aModule.RemoteService.Channel) then RaiseError(err_AssignRemoteServiceChannel); if not Assigned(aModule.RemoteService.Message) then RaiseError(err_AssignRemoteServiceMessage); with self.Create(aOwner) do try fModule := aModule; Caption := Format(Caption,[fModule.Name]); try fRestoreServerUrl := GetStrProp(fModule.RemoteService.Channel,'TargetURL'); ed_ServerUrl.Text := fRestoreServerUrl; fServerUrlChanged := false; except ed_ServerUrl.Enabled := false; lbl_ServerUrl1.Enabled := false; lbl_ServerUrl2.Enabled := false; lbl_ServerUrl3.Enabled := false; end; FillServiceCombo(); cb_Services.ItemIndex := cb_Services.Items.IndexOf(fModule.RemoteService.ServiceName); cb_ServicesChange(nil); result := ShowModal() = idOk; if result then begin if ed_ServerUrl.Enabled then SetStrProp(fModule.RemoteService.Channel,'TargetURL',ed_ServerUrl.Text); fModule.RemoteService.ServiceName := cb_Services.Text; if fCreateDataTables then begin TDAClientDataModuleDataTableWizardForm.Execute(aOwner, fModule, aDesigner); end; end; finally Free(); end; end; procedure TDAClientDataModuleEditorForm.ed_ServerUrlChange( Sender: TObject); begin fServerUrlChanged := true; end; procedure TDAClientDataModuleEditorForm.FillServiceCombo; var lServiceNames: IROStrings; i:integer; begin Screen.Cursor := crHourGlass; try cb_Services.Items.Clear(); lServiceNames := fModule.RemoteService.GetServiceNames(); if Assigned(lServiceNames) then begin for i := 0 to (lServiceNames.Count-1) do cb_Services.Items.Add(lServiceNames[i]); end else begin cb_Services.Text := ''; end; cb_ServicesChange(nil); finally Screen.Cursor := crDefault; end; end; procedure TDAClientDataModuleEditorForm.cb_ServicesEnter(Sender: TObject); begin if fServerUrlChanged then begin if ed_ServerUrl.Enabled then begin SetStrProp(fModule.RemoteService.Channel,'TargetURL',ed_ServerUrl.Text); FillServiceCombo(); end; fServerUrlChanged := true; end end; procedure TDAClientDataModuleEditorForm.BitBtn2Click(Sender: TObject); begin if ed_ServerUrl.Enabled then SetStrProp(fModule.RemoteService.Channel,'TargetURL',fRestoreServerUrl); end; procedure TDAClientDataModuleEditorForm.btn_CreateTablesClick(Sender: TObject); begin fCreateDataTables := true; end; procedure TDAClientDataModuleEditorForm.cb_ServicesChange(Sender: TObject); begin btn_CreateTables.Enabled := cb_Services.Text <> ''; end; end.