| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679 |
- unit IdDsnPropEdBindingNET;
- interface
- uses
- System.Drawing, System.Collections, System.ComponentModel,
- System.Windows.Forms, System.Data, IdObjs, IdSocketHandle;
- type
- TIdDsnPropEdBindingNET = class(System.Windows.Forms.Form)
- {$REGION 'Designer Managed Code'}
- strict private
- /// <summary>
- /// Required designer variable.
- /// </summary>
- Components: System.ComponentModel.Container;
- btnOk: System.Windows.Forms.Button;
- btnCancel: System.Windows.Forms.Button;
- lblBindings: System.Windows.Forms.Label;
- lbBindings: System.Windows.Forms.ListBox;
- btnNew: System.Windows.Forms.Button;
- btnDelete: System.Windows.Forms.Button;
- lblIPAddress: System.Windows.Forms.Label;
- edtIPAddress: System.Windows.Forms.ComboBox;
- lblPort: System.Windows.Forms.Label;
- edtPort: System.Windows.Forms.NumericUpDown;
- cboIPVersion: System.Windows.Forms.ComboBox;
- lblIPVersion: System.Windows.Forms.Label;
- /// <summary>
- /// Required method for Designer support - do not modify
- /// the contents of this method with the code editor.
- /// </summary>
- procedure InitializeComponent;
- procedure btnNew_Click(sender: System.Object; e: System.EventArgs);
- procedure btnDelete_Click(sender: System.Object; e: System.EventArgs);
- procedure edtPort_ValueChanged(sender: System.Object; e: System.EventArgs);
- procedure edtIPAddress_SelectedValueChanged(sender: System.Object; e: System.EventArgs);
- procedure cboIPVersion_SelectedValueChanged(sender: System.Object; e: System.EventArgs);
- procedure lbBindings_SelectedValueChanged(sender: System.Object; e: System.EventArgs);
- {$ENDREGION}
- strict protected
- /// <summary>
- /// Clean up any resources being used.
- /// </summary>
- procedure Dispose(Disposing: Boolean); override;
- private
- FHandles : TIdSocketHandles;
- FDefaultPort : Integer;
- FIPv4Addresses : TIdStrings;
- FIPv6Addresses : TIdStrings;
- FCurrentHandle : TIdSocketHandle;
- { Private Declarations }
- procedure SetHandles(const Value: TIdSocketHandles);
- procedure SetIPv4Addresses(const Value: TIdStrings);
- procedure SetIPv6Addresses(const Value: TIdStrings);
- procedure UpdateBindingList;
- procedure UpdateEditControls;
- procedure FillComboBox(ACombo : System.Windows.Forms.ComboBox; AStrings :TIdStrings);
- public
- constructor Create;
- function Execute : Boolean;
- function GetList: string;
- procedure SetList(const AList: string);
- property Handles : TIdSocketHandles read FHandles write SetHandles;
- property DefaultPort : Integer read FDefaultPort write FDefaultPort;
- property IPv4Addresses : TIdStrings read FIPv4Addresses write SetIPv4Addresses;
- property IPv6Addresses : TIdStrings read FIPv6Addresses write SetIPv6Addresses;
- end;
- [assembly: RuntimeRequiredAttribute(TypeOf(TIdDsnPropEdBindingNET))]
- procedure FillHandleList(const AList: string; ADest: TIdSocketHandles);
- function GetListValues(const ASocketHandles : TIdSocketHandles) : String;
- implementation
- uses
- IdGlobal,
- IdIPAddress,
- IdDsnCoreResourceStrings, IdStack, IdSys;
- const
- IPv6Wildcard1 = '::'; {do not localize}
- IPv6Wildcard2 = '0:0:0:0:0:0:0:0'; {do not localize}
- IPv6Loopback = '::1'; {do not localize}
- IPv4Wildcard = '0.0.0.0'; {do not localize}
- IPv4Loopback = '127.0.0.1'; {do not localize}
- function IsValidIP(const AAddr : String): Boolean;
- var LIP : TIdIPAddress;
- begin
- LIP := TIdIPAddress.MakeAddressObject(AAddr);
- Result := Assigned(LIP);
- if Result then
- begin
- Sys.FreeAndNil(LIP);
- end;
- end;
- function StripAndSymbol(s : String) : String;
- begin
- Result := '';
- repeat
- if s='' then
- begin
- Break;
- end;
- Result := Result + Fetch(s,'&');
- until False;
- end;
- procedure FillHandleList(const AList: string; ADest: TIdSocketHandles);
- var
- LItems: TIdStringList;
- i: integer;
- LIPVersion: TIdIPVersion;
- LAddr, LText: string;
- LPort: integer;
- begin
-
- ADest.Clear;
- LItems := TIdStringList.Create;
- try
- LItems.CommaText := AList;
- for i := 0 to LItems.Count-1 do begin
- if Length(LItems[i]) > 0 then begin
- if TextStartsWith(LItems[i], '[') then begin
- // ipv6
- LIPVersion := Id_IPv6;
- LText := Copy(LItems[i], 2, MaxInt);
- LAddr := Fetch(LText, ']:');
- LPort := Sys.StrToInt(LText, -1);
- end else begin
- // ipv4
- LIPVersion := Id_IPv4;
- LText := LItems[i];
- LAddr := Fetch(LText, ':');
- LPort := Sys.StrToInt(LText, -1);
- //Note that 0 is legal and indicates the server binds to a random port
- end;
- if IsValidIP(LAddr) and (LPort > -1) and (LPort < 65536) then begin
- with ADest.Add do begin
- IPVersion := LIPVersion;
- IP := LAddr;
- Port := LPort;
- end;
- end;
- end;
- end;
- finally
- LItems.Free;
- end;
- end;
- function NumericOnly(const AText : String) : String;
- var i : Integer;
- begin
- Result := '';
- for i := 1 to Length(AText) do
- begin
- if IsNumeric(AText[i]) then
- begin
- Result := Result + AText[i];
- end
- else
- begin
- Break;
- end;
- end;
- if (Length(Result) = 0) then
- begin
- Result := '0';
- end;
- end;
- function IndexOfNo(const ANo : Integer; AItems : System.Windows.Forms.ComboBox.ObjectCollection) : Integer;
- begin
- for Result := 0 to AItems.Count -1 do
- begin
- if ANo = Sys.StrToInt( NumericOnly(AItems[Result].ToString )) then
- begin
- Exit;
- end;
- end;
- Result := -1;
- end;
- function GetDisplayString(const AIP : String; const APort : Integer; AIPVer : TIdIPVersion): string;
- begin
- Result := '';
- case AIPVer of
- Id_IPv4 : Result := Sys.Format('%s:%d',[AIP,APort]);
- Id_IPv6 : Result := Sys.Format('[%s]:%d',[AIP,APort]);
- end;
- end;
- function GetListValues(const ASocketHandles : TIdSocketHandles) : String;
- var i : Integer;
- begin
- Result := '';
- for i := 0 to ASocketHandles.Count -1 do begin
- Result := Result + ',' + GetDisplayString(ASocketHandles[i].IP,ASocketHandles[i].Port,ASocketHandles[i].IPVersion );
- end;
- Delete(Result,1,1);
- end;
- {$AUTOBOX ON}
- {$REGION 'Windows Form Designer generated code'}
- /// <summary>
- /// Required method for Designer support -- do not modify
- /// the contents of this method with the code editor.
- /// </summary>
- procedure TIdDsnPropEdBindingNET.InitializeComponent;
- type
- TArrayOfInteger = array of Integer;
- begin
- Self.btnOk := System.Windows.Forms.Button.Create;
- Self.btnCancel := System.Windows.Forms.Button.Create;
- Self.lblBindings := System.Windows.Forms.Label.Create;
- Self.lbBindings := System.Windows.Forms.ListBox.Create;
- Self.btnNew := System.Windows.Forms.Button.Create;
- Self.btnDelete := System.Windows.Forms.Button.Create;
- Self.lblIPAddress := System.Windows.Forms.Label.Create;
- Self.edtIPAddress := System.Windows.Forms.ComboBox.Create;
- Self.lblPort := System.Windows.Forms.Label.Create;
- Self.edtPort := System.Windows.Forms.NumericUpDown.Create;
- Self.cboIPVersion := System.Windows.Forms.ComboBox.Create;
- Self.lblIPVersion := System.Windows.Forms.Label.Create;
- (System.ComponentModel.ISupportInitialize(Self.edtPort)).BeginInit;
- Self.SuspendLayout;
- //
- // btnOk
- //
- Self.btnOk.Anchor := (System.Windows.Forms.AnchorStyles((System.Windows.Forms.AnchorStyles.Bottom
- or System.Windows.Forms.AnchorStyles.Right)));
- Self.btnOk.DialogResult := System.Windows.Forms.DialogResult.OK;
- Self.btnOk.Location := System.Drawing.Point.Create(312, 160);
- Self.btnOk.Name := 'btnOk';
- Self.btnOk.TabIndex := 0;
- //
- // btnCancel
- //
- Self.btnCancel.Anchor := (System.Windows.Forms.AnchorStyles((System.Windows.Forms.AnchorStyles.Bottom
- or System.Windows.Forms.AnchorStyles.Right)));
- Self.btnCancel.DialogResult := System.Windows.Forms.DialogResult.Cancel;
- Self.btnCancel.Location := System.Drawing.Point.Create(392, 160);
- Self.btnCancel.Name := 'btnCancel';
- Self.btnCancel.TabIndex := 1;
- //
- // lblBindings
- //
- Self.lblBindings.AutoSize := True;
- Self.lblBindings.Location := System.Drawing.Point.Create(8, 8);
- Self.lblBindings.Name := 'lblBindings';
- Self.lblBindings.Size := System.Drawing.Size.Create(42, 16);
- Self.lblBindings.TabIndex := 2;
- Self.lblBindings.Text := '&Binding';
- //
- // lbBindings
- //
- Self.lbBindings.Anchor := (System.Windows.Forms.AnchorStyles(((System.Windows.Forms.AnchorStyles.Top
- or System.Windows.Forms.AnchorStyles.Bottom) or System.Windows.Forms.AnchorStyles.Left)));
- Self.lbBindings.Location := System.Drawing.Point.Create(8, 24);
- Self.lbBindings.Name := 'lbBindings';
- Self.lbBindings.Size := System.Drawing.Size.Create(137, 121);
- Self.lbBindings.TabIndex := 3;
- Include(Self.lbBindings.SelectedValueChanged, Self.lbBindings_SelectedValueChanged);
- //
- // btnNew
- //
- Self.btnNew.Location := System.Drawing.Point.Create(152, 56);
- Self.btnNew.Name := 'btnNew';
- Self.btnNew.TabIndex := 4;
- Include(Self.btnNew.Click, Self.btnNew_Click);
- //
- // btnDelete
- //
- Self.btnDelete.Location := System.Drawing.Point.Create(152, 88);
- Self.btnDelete.Name := 'btnDelete';
- Self.btnDelete.TabIndex := 5;
- Include(Self.btnDelete.Click, Self.btnDelete_Click);
- //
- // lblIPAddress
- //
- Self.lblIPAddress.Location := System.Drawing.Point.Create(240, 8);
- Self.lblIPAddress.Name := 'lblIPAddress';
- Self.lblIPAddress.Size := System.Drawing.Size.Create(100, 16);
- Self.lblIPAddress.TabIndex := 6;
- Self.lblIPAddress.Text := 'Label1';
- //
- // edtIPAddress
- //
- Self.edtIPAddress.Anchor := (System.Windows.Forms.AnchorStyles(((System.Windows.Forms.AnchorStyles.Top
- or System.Windows.Forms.AnchorStyles.Left) or System.Windows.Forms.AnchorStyles.Right)));
- Self.edtIPAddress.DropDownStyle := System.Windows.Forms.ComboBoxStyle.DropDownList;
- Self.edtIPAddress.Location := System.Drawing.Point.Create(240, 24);
- Self.edtIPAddress.Name := 'edtIPAddress';
- Self.edtIPAddress.Size := System.Drawing.Size.Create(224, 21);
- Self.edtIPAddress.TabIndex := 7;
- Include(Self.edtIPAddress.SelectedValueChanged, Self.edtIPAddress_SelectedValueChanged);
- //
- // lblPort
- //
- Self.lblPort.Location := System.Drawing.Point.Create(240, 58);
- Self.lblPort.Name := 'lblPort';
- Self.lblPort.Size := System.Drawing.Size.Create(100, 16);
- Self.lblPort.TabIndex := 8;
- Self.lblPort.Text := 'Label1';
- //
- // edtPort
- //
- Self.edtPort.Anchor := (System.Windows.Forms.AnchorStyles(((System.Windows.Forms.AnchorStyles.Top
- or System.Windows.Forms.AnchorStyles.Left) or System.Windows.Forms.AnchorStyles.Right)));
- Self.edtPort.Location := System.Drawing.Point.Create(240, 74);
- Self.edtPort.Maximum := System.Decimal.Create(TArrayOfInteger.Create(65535,
- 0, 0, 0));
- Self.edtPort.Name := 'edtPort';
- Self.edtPort.Size := System.Drawing.Size.Create(224, 20);
- Self.edtPort.TabIndex := 9;
- Include(Self.edtPort.ValueChanged, Self.edtPort_ValueChanged);
- //
- // cboIPVersion
- //
- Self.cboIPVersion.DropDownStyle := System.Windows.Forms.ComboBoxStyle.DropDownList;
- Self.cboIPVersion.Location := System.Drawing.Point.Create(240, 124);
- Self.cboIPVersion.Name := 'cboIPVersion';
- Self.cboIPVersion.Size := System.Drawing.Size.Create(224, 21);
- Self.cboIPVersion.TabIndex := 10;
- Include(Self.cboIPVersion.SelectedValueChanged, Self.cboIPVersion_SelectedValueChanged);
- //
- // lblIPVersion
- //
- Self.lblIPVersion.Location := System.Drawing.Point.Create(240, 108);
- Self.lblIPVersion.Name := 'lblIPVersion';
- Self.lblIPVersion.Size := System.Drawing.Size.Create(100, 16);
- Self.lblIPVersion.TabIndex := 11;
- Self.lblIPVersion.Text := 'Label1';
- //
- // TIdDsnPropEdBindingNET
- //
- Self.AcceptButton := Self.btnOk;
- Self.AutoScaleBaseSize := System.Drawing.Size.Create(5, 13);
- Self.CancelButton := Self.btnCancel;
- Self.ClientSize := System.Drawing.Size.Create(470, 189);
- Self.Controls.Add(Self.lblIPVersion);
- Self.Controls.Add(Self.cboIPVersion);
- Self.Controls.Add(Self.edtPort);
- Self.Controls.Add(Self.lblPort);
- Self.Controls.Add(Self.edtIPAddress);
- Self.Controls.Add(Self.lblIPAddress);
- Self.Controls.Add(Self.btnDelete);
- Self.Controls.Add(Self.btnNew);
- Self.Controls.Add(Self.lbBindings);
- Self.Controls.Add(Self.lblBindings);
- Self.Controls.Add(Self.btnCancel);
- Self.Controls.Add(Self.btnOk);
- Self.FormBorderStyle := System.Windows.Forms.FormBorderStyle.Fixed3D;
- Self.MaximizeBox := False;
- Self.MaximumSize := System.Drawing.Size.Create(480, 225);
- Self.MinimizeBox := False;
- Self.MinimumSize := System.Drawing.Size.Create(480, 225);
- Self.Name := 'TIdDsnPropEdBindingNET';
- Self.ShowInTaskbar := False;
- Self.StartPosition := System.Windows.Forms.FormStartPosition.CenterScreen;
- Self.Text := 'WinForm';
- (System.ComponentModel.ISupportInitialize(Self.edtPort)).EndInit;
- Self.ResumeLayout(False);
- end;
- {$ENDREGION}
- procedure TIdDsnPropEdBindingNET.Dispose(Disposing: Boolean);
- begin
- if Disposing then
- begin
- if Components <> nil then
- begin
- Components.Dispose();
- Sys.FreeAndNil(FHandles);
- Sys.FreeAndNil( FIPv4Addresses);
- Sys.FreeAndNil( FIPv6Addresses);
- //don't free FCurrentHandle; - it's in the handles collection
- TIdStack.DecUsage;
- end;
- end;
- inherited Dispose(Disposing);
- end;
- constructor TIdDsnPropEdBindingNET.Create;
- begin
- inherited Create;
- //
- // Required for Windows Form Designer support
- //
- InitializeComponent;
- //
- // TODO: Add any constructor code after InitializeComponent call
- //
- FHandles := TIdSocketHandles.Create(nil);
- FIPv4Addresses := TIdStringList.Create;
- FIPv6Addresses := TIdStringList.Create;
- SetIPv4Addresses(nil);
- SetIPv6Addresses(nil);
- TIdStack.IncUsage;
- IPv4Addresses := GStack.LocalAddresses;
- UpdateEditControls;
- //captions
- btnNew.Text := RSBindingNewCaption;
- btnDelete.Text := RSBindingDeleteCaption;
- lblIPAddress.Text := RSBindingHostnameLabel;
- lblPort.Text := RSBindingPortLabel;
- lblIPVersion.Text := RSBindingIPVerLabel;
- btnOk.Text := RSOk;
- btnCancel.Text := RSCancel;
- //IPVersion choices
- //we yhave to strip out the & symbol. In Win32, we use this
- //in a radio-box so a user could select by pressingg the 4 or 6
- //key. For this, we don't have a radio box and I'm too lazy
- //to use two Radio Buttons.
- cboIPVersion.Items.Add(StripAndSymbol(RSBindingIPV4Item));
- cboIPVersion.Items.Add(StripAndSymbol(RSBindingIPV6Item));
- end;
- procedure TIdDsnPropEdBindingNET.SetHandles(const Value: TIdSocketHandles);
- begin
- FHandles.Assign(Value);
- UpdateBindingList;
- end;
- function TIdDsnPropEdBindingNET.GetList: string;
- begin
- Result := GetListValues(Handles);
- end;
- procedure TIdDsnPropEdBindingNET.SetIPv6Addresses(const Value: TIdStrings);
- begin
- if Assigned(Value) then
- begin
- FIPv6Addresses.Assign(Value);
- end;
- // Ensure that these two are always present
- if FIPv6Addresses.IndexOf(IPv6Loopback)=-1 then
- begin
- FIPv6Addresses.Insert(0,IPv6Loopback);
- end;
- if FIPv6Addresses.IndexOf(IPv6Wildcard1)=-1 then
- begin
- FIPv6Addresses.Insert(0,IPv6Wildcard1);
- end;
- end;
- procedure TIdDsnPropEdBindingNET.SetIPv4Addresses(const Value: TIdStrings);
- begin
- if Assigned(Value) then
- begin
- FIPv4Addresses.Assign(Value);
- end;
- // Ensure that these two are always present
- if FIPv4Addresses.IndexOf(IPv6Loopback)=-1 then
- begin
- FIPv4Addresses.Insert(0,IPv4Loopback);
- end;
- if FIPv4Addresses.IndexOf(IPv4Wildcard)=-1 then
- begin
- FIPv4Addresses.Insert(0,IPv4Wildcard);
- end;
- end;
- procedure TIdDsnPropEdBindingNET.SetList(const AList: string);
- begin
- FCurrentHandle := nil;
- FillHandleList(AList, Handles);
- UpdateBindingList;
- UpdateEditControls;
- end;
- procedure TIdDsnPropEdBindingNET.lbBindings_SelectedValueChanged(sender: System.Object;
- e: System.EventArgs);
- begin
- if lbBindings.SelectedIndex >= 0 then begin
- btnDelete.Enabled := True;
- FCurrentHandle := FHandles[lbBindings.SelectedIndex];
- end else begin
- btnDelete.Enabled := False;
- FCurrentHandle := nil;
- end;
- UpdateEditControls;
- end;
- procedure TIdDsnPropEdBindingNET.cboIPVersion_SelectedValueChanged(sender: System.Object;
- e: System.EventArgs);
- begin
- case cboIPVersion.SelectedIndex of
- 0 :
- begin
- if FCurrentHandle.IPVersion <> Id_IPv4 then
- begin
- FCurrentHandle.IPVersion := Id_IPv4;
- FillComboBox(edtIPAddress,FIPv4Addresses);
- FCurrentHandle.IP := IPv4Wildcard;
- end;
- end;
- 1 :
- begin
- if FCurrentHandle.IPVersion <> Id_IPv6 then
- begin
- FCurrentHandle.IPVersion := Id_IPv6;
- FillComboBox(edtIPAddress,FIPv6Addresses);
- FCurrentHandle.IP := IPv6Wildcard1;
- end;
- end;
- end;
- UpdateEditControls;
- UpdateBindingList;
- end;
- procedure TIdDsnPropEdBindingNET.edtIPAddress_SelectedValueChanged(sender: System.Object;
- e: System.EventArgs);
- begin
- FCurrentHandle.IP := edtIPAddress.SelectedItem.ToString;
- UpdateBindingList;
- end;
- procedure TIdDsnPropEdBindingNET.edtPort_ValueChanged(sender: System.Object;
- e: System.EventArgs);
- begin
- if Assigned(FCurrentHandle) then
- begin
- FCurrentHandle.Port := edtPort.Value.ToInt16(edtPort.Value);
- end;
- UpdateBindingList;
- end;
- procedure TIdDsnPropEdBindingNET.btnDelete_Click(sender: System.Object; e: System.EventArgs);
- var LSH : TIdSocketHandle;
- i : Integer;
- begin
- if lbBindings.SelectedIndex >= 0 then
- begin
- // Delete is not available in D4's collection classes
- // This should work just as well.
- i := lbBindings.get_SelectedIndex;
- LSH := Handles[i];
- Sys.FreeAndNil(LSH);
- lbBindings.Items.Remove(i);
- FCurrentHandle := nil;
- UpdateBindingList;
-
- end;
- Self.lbBindings_SelectedValueChanged(nil,nil);
- UpdateEditControls;
- end;
- procedure TIdDsnPropEdBindingNET.btnNew_Click(sender: System.Object; e: System.EventArgs);
- begin
- FCurrentHandle := FHandles.Add;
- FCurrentHandle.IP := IPv4Wildcard;
- FCurrentHandle.Port := FDefaultPort;
- UpdateBindingList;
- FillComboBox(edtIPAddress,FIPv4Addresses);
- UpdateEditControls;
- end;
- procedure TIdDsnPropEdBindingNET.UpdateBindingList;
- var
- i: integer;
- selected: integer;
- s: string;
- begin
- selected := lbBindings.SelectedIndex;
- lbBindings.BeginUpdate;
- try
- if lbBindings.Items.Count = FHandles.Count then begin
- for i := 0 to FHandles.Count - 1 do begin
- s := GetDisplayString(FHandles[i].IP, FHandles[i].Port, FHandles[i].IPVersion);
- if s <> lbBindings.Items[i].ToString then begin
- lbBindings.Items[i] := s;
- end;
- end;
- end else begin
- lbBindings.Items.Clear;
- for i := 0 to FHandles.Count-1 do begin
- lbBindings.Items.Add(GetDisplayString(FHandles[i].IP, FHandles[i].Port,FHandles[i].IPVersion));
- end;
- end;
- finally
- lbBindings.EndUpdate;
- if Assigned(FCurrentHandle) then begin
- lbBindings.SelectedIndex := FCurrentHandle.Index;
- end else begin
- lbBindings.SelectedIndex := Min(selected, lbBindings.Items.Count-1);
- end;
- end;
- { selected := lbBindings.SelectedItem;
- lbBindings.Items.BeginUpdate;
- try
- if lbBindings.Items.Count = FHandles.Count then begin
- for i := 0 to FHandles.Count - 1 do begin
- s := GetDisplayString(FHandles[i].IP, FHandles[i].Port, FHandles[i].IPVersion);
- if s <> lbBindings.Items[i] then begin
- lbBindings.Items[i] := s;
- end;
- end;
- end else begin
- lbBindings.Items.Clear;
- for i := 0 to FHandles.Count-1 do begin
- lbBindings.Items.Add(GetDisplayString(FHandles[i].IP, FHandles[i].Port,FHandles[i].IPVersion));
- end;
- end;
- finally
- lbBindings.Items.EndUpdate;
- if Assigned(FCurrentHandle) then begin
- lbBindings.ItemIndex := FCurrentHandle.Index;
- end else begin
- lbBindings.ItemIndex := Min(selected, lbBindings.Items.Count-1);
- end;
- end; }
- end;
- procedure TIdDsnPropEdBindingNET.UpdateEditControls;
- begin
- if Assigned(FCurrentHandle) then
- begin
- edtPort.Text := '';
- edtPort.Value := FCurrentHandle.Port;
- case FCurrentHandle.IPVersion of
- Id_IPv4 :
- begin
- FillComboBox(edtIPAddress,FIPv4Addresses);
- edtIPAddress.SelectedItem := edtIPAddress.Items[0];
- cboIPVersion.SelectedItem := cboIPVersion.Items[0];
- end;
- Id_IPv6 :
- begin
- FillComboBox(edtIPAddress,FIPv6Addresses);
- edtIPAddress.SelectedItem := edtIPAddress.Items[0];
- cboIPVersion.SelectedItem := cboIPVersion.Items[1];
- end;
- end;
- edtIPAddress.SelectedIndex := edtIPAddress.Items.IndexOf(FCurrentHandle.IP);
- end;
- lblIPAddress.Enabled := Assigned(FCurrentHandle);
- edtIPAddress.Enabled := Assigned(FCurrentHandle);
- lblPort.Enabled := Assigned(FCurrentHandle);
- edtPort.Enabled := Assigned(FCurrentHandle);
- lblIPVersion.Enabled := Assigned(FCurrentHandle);
- cboIPVersion.Enabled := Assigned(FCurrentHandle);
- end;
- procedure TIdDsnPropEdBindingNET.FillComboBox(
- ACombo: System.Windows.Forms.ComboBox; AStrings: TIdStrings);
- var i : INteger;
- begin
- ACombo.Items.Clear;
- for i := 0 to AStrings.Count -1 do
- begin
- ACombo.Items.Add(AStrings[i]);
- end;
- end;
- function TIdDsnPropEdBindingNET.Execute: Boolean;
- begin
- Result := Self.ShowDialog = System.Windows.Forms.DialogResult.OK;
- end;
- end.
|