unit TfrmServerSelectSrc; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, CheckLst, TXPBrdCastServerSrc, uROServer; type TfrmServerSelect = class(TForm) lbServers: TCheckListBox; pnlButtons: TPanel; btnOk: TButton; btCancel: TButton; procedure lbServersClickCheck(Sender: TObject); private fBrdCstSvr: TXPBrdCastServer; fSvrItems: TXPServerCollection; protected procedure RefreshServers; procedure AddServer(aServer: TROServer); procedure RemoveServer(aServer: TROServer); public constructor Create(aBrdCstServer : TXPBrdCastServer); reintroduce; end; implementation {$R *.dfm} { TfrmServerSelect } constructor TfrmServerSelect.Create(aBrdCstServer: TXPBrdCastServer); begin inherited Create(nil); fBrdCstSvr := aBrdCstServer; if Assigned(fBrdCstSvr) then fSvrItems := fBrdCstSvr.ExportedServers else fSvrItems := nil; RefreshServers; end; procedure TfrmServerSelect.RefreshServers; var lOwner: TComponent; i,Idx: Integer; begin lbServers.Clear; if not(Assigned(fBrdCstSvr)) then Exit; lOwner := fBrdCstSvr.Owner; if not(Assigned(lOwner)) then Exit; // Get all the ROServers from the owner of the TXPBrdCastServer for i := 0 to lOwner.ComponentCount-1 do begin if lOwner.Components[i].InheritsFrom(TROServer) then begin if not(lOwner.Components[i].InheritsFrom(TXPBrdCastServer)) then lbServers.AddItem(lOwner.Components[i].Name,lOwner.Components[i]); end; end; // Set checkmark for all servers containd in ExposedServers for i := 0 to fSvrItems.Count-1 do begin Idx := lbServers.Items.IndexOfObject(fSvrItems.Servers[i]); if Idx >= 0 then begin lbServers.Checked[Idx] := True; end; end; end; procedure TfrmServerSelect.lbServersClickCheck(Sender: TObject); begin if lbServers.Checked[lbServers.ItemIndex] then AddServer(TROServer(lbServers.Items.Objects[lbServers.ItemIndex])) else RemoveServer(TROServer(lbServers.Items.Objects[lbServers.ItemIndex])); end; procedure TfrmServerSelect.AddServer(aServer: TROServer); begin if not(Assigned(aServer)) then Exit; fSvrItems.AddServer(aServer); end; procedure TfrmServerSelect.RemoveServer(aServer: TROServer); begin if not(Assigned(aServer)) then Exit; fSvrItems.DeleteServer(aServer); end; end.