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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.11.2013, 09:14   #1
nikita2480
 
Регистрация: 02.12.2012
Сообщений: 6
По умолчанию нужно свойства полей вывести в stringgrid через comobox

Здравствуйте.
У меня есть класс мне нужно свойства полей вывести в stringgrid через comobox
Код:
 type
  TPlane = class(TTransport)
  private
  Fcompany: string;
  FNMPlane: integer; // счетчик кол-ва самолетов
  class var FPlanes: TObjectList;
  class function GetListPlanes(Index: Integer): Tplane; static;
  class procedure SetListPlanes(Index: Integer; const Value: Tplane); static;
  public
  class property ListPlanes[Index: Integer]: TPlane read GetListPlanes write    SetListPlanes;
  property company: string read Fcompany write Fcompany;
  property NMPlane: integer read FNMPlane write FNMPlane;
  constructor Create (vid: string; year: integer; company: string);
  end;

implementation

{ TPlane }
constructor TPlane.Create(vid: string; year: integer; company: string);
begin
inherited Create(vid, year);
Fcompany:=company;
end;
class function TPlane.GetListPlanes(Index: Integer): TPlane;
begin
  if (FPlanes = nil) then Exit;
  result := TPlane(FPlanes.Items[Index]);
end;
class procedure TPlane.SetListPlanes(Index: Integer; const Value: TPlane);
begin
  if (FPlanes = nil) then Fplanes := TObjectList.Create;
  Fplanes.Insert(Index, Value);
end;
end.
На форме делаю считывание с editов все кладу в массив Planelist

Код:
planes: Tplane;
   Planelist: array of Tplane;

implementation
procedure TForm9.SaveClick(Sender: TObject);
var i: integer;
begin
planes:= Tplane.Create(vidtxt.Text, strtoint(yeartxt.Text), companytxt.Text );
planes.vid:=vidtxt.Text;
planes.year:=strtoint(yeartxt.Text);
planes.company:=companytxt.Text;
Planelist[i].NMPlane:= Planelist[i].NMPlane+1;
Planelist[i]:=planes;
end;
Код:
procedure TForm6.ComboPlaneDropDown(Sender: TObject);
var k: integer;
begin
ComboPlane.Clear();
for k := 0 to Planecount-1 do
begin
comboPlane.AddItem( Planelist[k].vid, Planelist[k]);
end;
end;

procedure TForm6.ButPokPlaneClick(Sender: TObject);     
var i, temp, k: integer;
begin
Transportgrid.RowCount:=Planelist[comboPlane.ItemIndex].NMPlane+1;   
Transportgrid.ColCount:= 3;                                         
Transportgrid.Cells[0,0]:= 'Вид';
Transportgrid.Cells[1,0]:= 'Год';
Transportgrid.Cells[2,0]:= 'Компания';
 temp:=Planelist[comboPlane.ItemIndex].NMPlane-1;
with TransportGrid do
for i := 0 to temp do       
begin

cells[0,i+1]:= planelist[i].vid;
cells[1,i+1]:=inttostr( planelist[i].year);
cells[2,i+1]:= planelist[i].company;
end;
end;
Что то делаю не так...
Помогите пожалуйста разобраться=(
nikita2480 вне форума Ответить с цитированием
Старый 01.11.2013, 09:21   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Что то делаю не так...
А что не так?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 01.11.2013, 09:25   #3
nikita2480
 
Регистрация: 02.12.2012
Сообщений: 6
По умолчанию

Вот скрины. При нажатие сохранить такое вылазит
Изображения
Тип файла: jpg Безымянный.jpg (37.3 Кб, 143 просмотров)
Тип файла: jpg Безымянный1.jpg (35.1 Кб, 142 просмотров)
nikita2480 вне форума Ответить с цитированием
Старый 01.11.2013, 09:33   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

я не смотрел, что у Вас там с классами накручено, НО
если на кнопке сохранить вот этот код:
Цитата:
Код:
planes: Tplane;
   Planelist: array of Tplane;

implementation
procedure TForm9.SaveClick(Sender: TObject);
var i: integer;
begin
planes:= Tplane.Create(vidtxt.Text, strtoint(yeartxt.Text), companytxt.Text );
planes.vid:=vidtxt.Text;
planes.year:=strtoint(yeartxt.Text);
planes.company:=companytxt.Text;
Planelist[i].NMPlane:= Planelist[i].NMPlane+1;
Planelist[i]:=planes;
end;
то это страх и ужас!!

во-первых, если используете динамический массив (у вас это array of Tplane), то перед его использованием ему ОБЯЗАТЕЛЬНО нужно выделить место в памяти через SetLength(имя_дин_массива, количество_элементов);

во-вторых, как можно писать Planelist[i] ?!!!
Чему у Вас i в этот момент равно?! Мусору? И Вы в ячейку с неизвестным индексом, к тому же в массиве, которому не выделили память пытаетесь писать?!
Неудивительно, что получаете Access Violation!!!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 01.11.2013, 09:47   #5
nikita2480
 
Регистрация: 02.12.2012
Сообщений: 6
По умолчанию

Спасибо. Исправляю на это

Planecount: integer;
Код:
planecount:=0;
Planecount:= Planecount+1;
setLength(Planelist,Planecount);
Planelist[Planecount-1]:=planes;
Так не выдает ошибок, но не выводит vidы в комбобоксе.
А ещё можно отвлеченный вопрос с контейнером Toobjectlist как бы это выглядело?
nikita2480 вне форума Ответить с цитированием
Старый 01.11.2013, 10:36   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Код:
Var ol:TObjectList;
...
ol:=TObjectList.Create;
...
plane:= Tplane.Create(vidtxt.Text, strtoint(yeartxt.Text), companytxt.Text );
ol.add(plane);
...
Tplane(ol[i]) вернет объект.
...
ol.clear;
ol.free;
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 01.11.2013, 11:08   #7
nikita2480
 
Регистрация: 02.12.2012
Сообщений: 6
По умолчанию

Stilet, спасибо большое=)
А с комбобоксом что не так?
nikita2480 вне форума Ответить с цитированием
Старый 01.11.2013, 11:44   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
А с комбобоксом что не так?
Да откуда же я знаю )
Одно могу сказать точно: Я бы наполнение комбика в DropDown не писал.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 01.11.2013, 12:13   #9
nikita2480
 
Регистрация: 02.12.2012
Сообщений: 6
По умолчанию

Да?!)) Интересно почему и что вы пишите?))
nikita2480 вне форума Ответить с цитированием
Старый 01.11.2013, 12:28   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Тоже самое но не в этом событии.
Если комбик нужен как справочный инструмент то наполняю его в начале работы программы.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ComoBox Andrey770 Общие вопросы Delphi 1 18.03.2012 14:07
Вывести окно с дополнительными настройками свойства компонента. vedro-compota C# (си шарп) 18 27.06.2011 22:40
Comobox AlexMe Общие вопросы Delphi 3 26.06.2011 19:28
Изменение свойства width в тегах через PHP Kasper1 PHP 6 09.03.2011 10:05
Как вывести значение полей из выделенной записи в DBGrid ? DS75 БД в Delphi 5 30.04.2009 13:40