Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.10.2014, 01:35   #1
sanji2010
Пользователь
 
Регистрация: 25.11.2013
Сообщений: 52
По умолчанию Работа в Delphi 7 с типом записью

Доброй ночи. Писал программу и столкнулся с проблемой. Задание:
Пользователь ICQ решил создать резервную копию своего списка контактов
случай взлома учётной записи. Один элемент списка контактов включает в себя UIN, отображаемое имя, адрес электронной почты и телефон. Реализовать поиск нужного элемента списка по подстроке любого из полей. Адрес электронной почты проверять на правильность.
Необходимо сделать через TListBox и TComboBox.
Программа
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Mask, IdGlobal;
 Type
  TForm1 = class(TForm)
    lst1: TListBox;
    ArrUins: TComboBox;
    ButtonRun: TButton;
    InfoOfPeople: TLabel;
    ChooseUIN: TLabel;
    Output: TLabel;
    EditUin: TEdit;
    EditName: TEdit;
    EditMail: TMaskEdit;
    EditPhone: TEdit;
    InputUin: TLabel;
    InputName: TLabel;
    InputMale: TLabel;
    InputPhone: TLabel;
    ButtonChoose: TButton;
    procedure ButtonRunClick(Sender: TObject);
    procedure ButtonChooseClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
type
  Ticq=record
       Uin: integer;
       Name: string;
       mail: string;
       phone: string;
  end;
var
  Form1: TForm1;
  ICQ: Ticq;
  MasIcq: array [1..20] of Ticq;
  p: Integer;
implementation

{$R *.dfm}
procedure TForm1.ButtonRunClick(Sender: TObject);
var i:Integer;
begin
  i:=1;
  p:=p+i;
  MasIcq[p].Uin:=StrToCard(EditUin.Text);
  MasIcq[p].Name:=EditName.Text;
  MasIcq[p].mail:=EditMail.Text;
  MasIcq[p].phone:=EditPhone.Text;
  ArrUins.Items.Add(EditUin.Text);
  EditUin.Clear;
  EditPhone.Clear;
  EditName.Clear;
  EditMail.Clear;
end;

procedure TForm1.ButtonChooseClick(Sender: TObject);
var s:integer;
begin
 lst1.Clear;
 s:=StrToInt(ArrUins.items[arruins.ItemIndex]);
 Lst1.Items.Add('UIN '+IntToStr((MasIcq[s].Uin)));
 lst1.Items.Add('Имя '+MasIcq[s].Name);
 lst1.Items.Add('E-Mail '+MasIcq[s].mail);
 lst1.Items.Add('Номер телефона '+(MasICQ[s].phone));
end;

begin
  p:=0;
end.
При нажатии кнопки вывод в TListBox, программа крашится
Сам проект
Вложения
Тип файла: rar Unit1.rar (189.3 Кб, 6 просмотров)
Skype sanji-dim
Свою благодарность можно выразить на счёт R393628098492
sanji2010 вне форума Ответить с цитированием
Старый 27.10.2014, 02:05   #2
sanji2010
Пользователь
 
Регистрация: 25.11.2013
Сообщений: 52
По умолчанию

Заметил, что если вводу юин из 1 числа, то программа работает исправно. Если 2 или больше - выдаёт фигню
Skype sanji-dim
Свою благодарность можно выразить на счёт R393628098492
sanji2010 вне форума Ответить с цитированием
Старый 27.10.2014, 07:31   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
программа крашится
Вау. Слово "краш" выучили. Отлично. Тогда скоро и начнем тексты ошибок выкладывать. Будущее прям аж сияет перспективами.
Цитата:
p:=p+i;
MasIcq[p].Uin:=StrToCard(EditUin.Text);
А почему не проверяешь на выход "p" за пределы диапазона массива?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 27.10.2014, 09:14   #4
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Поставь брейкпойнт на "lst1.Clear;" и потыкай F8.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 27.10.2014, 11:18   #5
Вадим Мошев

Старожил
 
Аватар для Вадим Мошев
 
Регистрация: 12.11.2010
Сообщений: 8,568
По умолчанию

Цитата:
Сообщение от min@y™ Посмотреть сообщение
Поставь брейкпойнт на "lst1.Clear;" и потыкай F8.
Думаю, лучше F7 - пошаговая трассировка. Помогает обнаружить ошибку в 99% случаях.
Вадим Мошев вне форума Ответить с цитированием
Старый 27.10.2014, 11:27   #6
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
Думаю, лучше F7
Думаю, здесь, таки, лучше F8.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с типом real Sparky Помощь студентам 8 18.10.2013 09:57
Работа с текстовым типом brednew Общие вопросы Delphi 5 28.10.2012 10:12
Работа с ограниченным типом Alexan-Dwer Паскаль, Turbo Pascal, PascalABC.NET 4 05.02.2012 14:24
Работа с комбинированным типом Stuff Паскаль, Turbo Pascal, PascalABC.NET 1 02.06.2010 23:17
Работа с типом Record TheNovice Помощь студентам 4 28.02.2007 17:52