• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 1029
  • Last Modified:

Example of MRU in ComboBox

HI

Im making an app that can log onto different servers but only one at once. I would like it that when the app loads it can read the registry and grab a list of servers that have been used before and put them into a combobox OR if they enter a new name it stores it into the registry with the others.

I have looked at some components but they all seem to be with files and not entries in a registry like i need.

Example will get the points.
Many thanks
B.
0
BRowley
Asked:
BRowley
  • 4
  • 2
1 Solution
 
geobulCommented:
Hi,
Form.OnCreate loads server names from HKEY_CURRENT_USER\Software\Geobul\Servers

ComboBox1.OnKeyPress adds a new server name entered in the combobox.

type
  TForm1 = class(TForm)
    ComboBox1: TComboBox;
    procedure FormCreate(Sender: TObject);
    procedure ComboBox1KeyPress(Sender: TObject; var Key: Char);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  KeyPath: string = 'Software\Geobul\Servers';
  ValueNames: TStringList;

implementation

{$R *.DFM}

uses Registry;

procedure TForm1.FormCreate(Sender: TObject);
var
  i: integer;
begin
  with TRegistry.Create do begin
    // HKEY_CURRENT_USER by default
    if OpenKey(KeyPath, false) then begin
      ValueNames := TStringList.Create;
      try
        ComboBox1.Items.Clear;
        GetValueNames(ValueNames);
        for i := 0 to ValueNames.Count - 1 do begin
          ComboBox1.Items.Add(ReadString(ValueNames[i]));
        end;
      finally
        ValueNames.Free;
      end;
      CloseKey;
    end;
    Free;
  end;
end;

procedure TForm1.ComboBox1KeyPress(Sender: TObject; var Key: Char);
begin
  if Key = #13 then begin // Enter key
    if ComboBox1.Items.IndexOf(ComboBox1.Text) = -1 then begin // new server was entered
      with TRegistry.Create do begin
        if OpenKey(KeyPath, true) then begin
          WriteString('Server'+ IntToStr(ComboBox1.Items.Count), ComboBox1.Text);
          ComboBox1.Items.Add(ComboBox1.Text);
        end;
      end;
    end;
  end;
end;

Regards, Geo
0
 
geobulCommented:
I'm sorry, use the following KeyPress event instead of the previous one. Registry.Free is missing there.

procedure TForm1.ComboBox1KeyPress(Sender: TObject; var Key: Char);
begin
  if Key = #13 then begin // Enter key
    if ComboBox1.Items.IndexOf(ComboBox1.Text) = -1 then begin // new server was entered
      with TRegistry.Create do begin
        if OpenKey(KeyPath, true) then begin
          WriteString('Server'+ IntToStr(ComboBox1.Items.Count), ComboBox1.Text);
          ComboBox1.Items.Add(ComboBox1.Text);
        end;
        Free;
      end;
    end;
  end;
end;
0
 
BRowleyAuthor Commented:
Excellent. Dont suppose you know how to stop the beep on enter on the combobox do you please?

Anyway many thanks for your time and help.
Regards
Barry
0
Upgrade your Question Security!

Your question, your audience. Choose who sees your identity—and your question—with question security.

 
geobulCommented:
Thank for the points, Barry.

About beep:

procedure TForm1.ComboBox1KeyPress(Sender: TObject; var Key: Char);
...
  ComboBox1.Items.Add(ComboBox1.Text);
  Key := #0; // add this line to suppress the beep
...
end;

Regards, Geo
0
 
geobulCommented:
Actually, it'd be better to place that line (Key := #0;)immediately after:
if Key = #13 then begin // Enter key

That way all beeps will be ignored. In my previous comment only the beeps when adding new items are suppressed.

Regards, Geo
0
 
BRowleyAuthor Commented:
Thank you.
regards
B.
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

Free Tool: IP Lookup

Get more info about an IP address or domain name, such as organization, abuse contacts and geolocation.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

  • 4
  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now