Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Combobox.Items.Objects


Автор: firs70 13.6.2007, 09:47
есть такая задачка: Логин (Combobox) и пароль(Edit) и 2 параметра (RadioButton) кнопочка добавить и удалить. 
user posted image
По кнопочке Add добавляю логин, пароль и параметры через Combobox.Items.Objects, для реализации выбор логина и авто подстановки его пароля и параметров. Впринцыпе работает, Но при первом вводе логина выдаёт ошибку delphi и сама программа
user posted image
user posted image

Подскажите, пожалуйста, что это за ошибка и как её побороть  smile 
вот код:
Код

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
//----------
  TUser = class
  public
    login: string;
    password: string;
    param1: boolean;
    param2: boolean;
  end;
//-------
  TForm1 = class(TForm)
    Button1: TButton;
    ComboBox1: TComboBox;
    Edit1: TEdit;
    RadioButton1: TRadioButton;
    RadioButton2: TRadioButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure ComboBox1Change(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure AddUser;
var
   User: TUser;
begin
 if Form1.combobox1.items.indexof(Form1.combobox1.text) < 0 then
 begin
  User := TUser.Create;
  User.login := Form1.combobox1.text;
  User.password := Form1.edit1.text;
  User.param1 := Form1.RadioButton1.Checked;
  User.param2 := Form1.RadioButton2.Checked;
  Form1.combobox1.itemindex := Form1.combobox1.items.addobject(Form1.combobox1.text, User);
 end;
end;

procedure GetUser;
begin
 if (Form1.combobox1.itemindex >= 0) and (Form1.combobox1.itemindex < Form1.combobox1.items.count) then
  Form1.edit1.text := TUser(Form1.combobox1.items.objects[Form1.combobox1.itemindex]).password;
  Form1.RadioButton1.Checked := TUser(Form1.combobox1.items.objects[Form1.combobox1.itemindex]).param1;
  Form1.RadioButton2.Checked := TUser(Form1.combobox1.items.objects[Form1.combobox1.itemindex]).param2;
end;

procedure DelUser;
begin
TUser(Form1.combobox1.items.objects[Form1.combobox1.itemindex]).Free;
Form1.combobox1.items.Delete(Form1.combobox1.itemindex);
Form1.Edit1.Clear;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 AddUser;
end;

procedure TForm1.ComboBox1Change(Sender: TObject);
begin
 GetUser;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
DelUser;
end;

end.


и второе:
мне бы хотелось сохранять эти данные в реестре(или хотя бы куда нибудь, но в реестр предпочтительнее) что бы потом при запуске программы они подгружались, сечас программа работает только для текущего сеанса, после перезапуска всё сбрасывается.

Заранее всем спасибо

Автор: Snowy 13.6.2007, 10:31
Код

procedure GetUser;
begin
 if (Form1.combobox1.itemindex >= 0) and (Form1.combobox1.itemindex < Form1.combobox1.items.count) then
  begin // <--
    Form1.edit1.text := TUser(Form1.combobox1.items.objects[Form1.combobox1.itemindex]).password;
    Form1.RadioButton1.Checked := TUser(Form1.combobox1.items.objects[Form1.combobox1.itemindex]).param1;
    Form1.RadioButton2.Checked := TUser(Form1.combobox1.items.objects[Form1.combobox1.itemindex]).param2;
  end; // <--
end;

Автор: firs70 13.6.2007, 12:00
 smile  спасибо, чёт правда тупанул  smile 

 а кто подскажет как всё это дело сохранить? или хотя бы получить в читабельном виде.
В мемо не сохраняет, так как пишет не соответсвие типов...

Автор: Snowy 13.6.2007, 13:00
Сохранить куда?
Класс в читабельном виде? Никак. Сохраняй поотдельности все поля. Благо у тебя их всего 4.

Автор: firs70 13.6.2007, 14:21
Цитата

и второе:
мне бы хотелось сохранять эти данные в реестре(или хотя бы куда нибудь, но в реестр предпочтительнее) что бы потом при запуске программы они подгружались, сечас программа работает только для текущего сеанса, после перезапуска всё сбрасывается.

вот написано же  smile 
хочу в реестр сохранять, но как сделать что бы сохранялись в любом количестве? то есть динамически изменялись (от кол-ва сохранённых логинов и их атрибутов)

Автор: Sunvas 13.6.2007, 20:15
Реестр ИМХО неудачная идея для хранения длинных текстов. Да и неудобно это. Лучше храни все в файл. Но если уж хочется в реестр - на форуме тонны примеров работы с реестром.

Автор: firs70 14.6.2007, 13:21
сделал всё. спасибо кто отвечал. тему закрываем.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)