как вытащить данные из TStringGrid и поместить их в форму

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

как вытащить данные из TStringGrid и поместить их в форму

Сообщение Dark Ichigo » 29.05.2009 10:48:01

Не могу догадаться, как вытащить данные из TStringGrid и поместить их в форму.

Например, есть форма TForm6 с комбобоксом с готовыми значениями (от 1 до 5).
Есть таблица TForm1.StringGrid1, где в ячейке [1,1] стоит значение 3.

Я пытаюсь вывести это значение в комбобокс:

Код: Выделить всё
unit Unit6;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
  StdCtrls;

type

  { TForm6 }

  TForm6 = class(TForm)
    redkomnat: TComboBox;
    procedure FormCreate(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;

var
  Form6: TForm6;

implementation

uses Unit1;

{ TForm6 }

procedure TForm6.FormCreate(Sender: TObject);
begin

  redkomnat.ItemIndex:=Form1.StringGrid1.Cells[1,1];

end;

initialization
  {$I unit6.lrs}

end. 


Лазарь мне пишет:
Код: Выделить всё
unit6.pas(36,52) Error: Incompatible type for arg no. 1: Got "AnsiString", expected "LongInt"
Аватара пользователя
Dark Ichigo
новенький
 
Сообщения: 44
Зарегистрирован: 12.03.2009 19:06:51

Re: как вытащить данные из TStringGrid и поместить их в форму

Сообщение Mr.Smart » 29.05.2009 10:56:53

.... жесть ....

Код: Выделить всё
...
redkomnat.ItemIndex:=StrToInt(Form1.StringGrid1.Cells[1,1]);
...


п.с. Вы вообще читаете, что пишет компилятор?
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: как вытащить данные из TStringGrid и поместить их в форму

Сообщение Vadim » 29.05.2009 11:19:44

Какой ужас!!!
TComboBox.ItemIndex - это текущий номер той строки, которая выбрана в комбобоксе.
Вы пытаетесь выбрать номер строки согласно тому значению, которое находится в ячейке таблицы Cells[1,1] или всё таки хотите занести значение из таблицы в комбобокс? Сформулируйте по человечески вопрос...
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: как вытащить данные из TStringGrid и поместить их в форму

Сообщение Climber » 29.05.2009 11:48:58

Я пытаюсь вывести это значение в комбобокс:

Правильный ответ -redkomnat.Text:=Form1.StringGrid1.Cells[1,1];
Climber
постоялец
 
Сообщения: 415
Зарегистрирован: 03.06.2007 20:09:57
Откуда: Москва

Re: как вытащить данные из TStringGrid и поместить их в форму

Сообщение Mr.Smart » 29.05.2009 12:58:36

Climber писал(а):
Я пытаюсь вывести это значение в комбобокс:

Правильный ответ -redkomnat.Text:=Form1.StringGrid1.Cells[1,1];

а если почитать внимательней?
Dark Ichigo писал(а):...
Например, есть форма TForm6 с комбобоксом с готовыми значениями (от 1 до 5).
Есть таблица TForm1.StringGrid1, где в ячейке [1,1] стоит значение 3.

Я пытаюсь вывести это значение в комбобокс:
...
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: как вытащить данные из TStringGrid и поместить их в форму

Сообщение Climber » 29.05.2009 14:50:44

а если почитать внимательней?

Я понял это
Например, есть форма TForm6 с комбобоксом с готовыми значениями (от 1 до 5).
Есть таблица TForm1.StringGrid1, где в ячейке [1,1] стоит значение 3.
Я пытаюсь вывести это значение в комбобокс:

так: на форме TForm6 есть комбобокс с циферками от 1 до 5. В сетке в какой-то ячейке стоит циферка 3. Надо циферку 3 вставить в комбобокс. Тогда мой ответ правильный.
А если автор имел ввиду, что в комбобоксе есть пять каких-то неведомых строк (которые, как он считает, имеют номера от 1 до 5, а на самом деле от 0 до 4), и ему надо взять из сетки число, а потом в комбобоксе вывести строку с этим номером... Так вот, если автор это имел ввиду, то почему он так не написал?
Тогда ответ будет:
Код: Выделить всё
redkomnat.ItemIndex:=StrToInt(Form1.StringGrid1.Cells[1,1]-1;

А еще лучше, если не StrToInt, а TryStrToInt. Но это много строчек писать надо.
Climber
постоялец
 
Сообщения: 415
Зарегистрирован: 03.06.2007 20:09:57
Откуда: Москва

Re: как вытащить данные из TStringGrid и поместить их в форму

Сообщение Dark Ichigo » 29.05.2009 15:04:03

Итоговый код такой:
Код: Выделить всё
redkomnat.ItemIndex:=StrToInt(Form1.StringGrid1.Cells[1,1]-1;

Так как комбобоксе есть пять значений. Соответственно
индекс 0 это 1
1 - 2
2 - 3
3 - 4
4 - 5.

Спасибо, Mr.Smart и Climber.

По поводу
п.с. Вы вообще читаете, что пишет компилятор?

Читаю, но не всегда понимаю, как с этим правильно поступать.

Добавлено спустя 20 минут 16 секунд:
Ещё хотел спросить, а если это не числовые данные, а длинющий список слов? И, допустим, в ячейке [1,1] находится слово "молоко", а в комбобоксе слово "молоко" имеет индекс 89.

Мне присваиваить индекс "молоку"? И так каждому слову?

Код: Выделить всё
if Form1.StringGrid1.Cells[1,1]='молоко' then
redkomnat.ItemIndex:=89;
Аватара пользователя
Dark Ichigo
новенький
 
Сообщения: 44
Зарегистрирован: 12.03.2009 19:06:51

Re: как вытащить данные из TStringGrid и поместить их в форму

Сообщение Mr.Smart » 29.05.2009 15:59:08

Зачем же.
У вас свойтство TComboBox.Items имеет тип TStrings, а у класса TStrings есть метод IndexOf() который возвращает позицию строки в списке.
Код: Выделить всё
redkomnat.ItemIndex:=redkomnat.Items.IndexOf(StringGrid1.Cells[1,1]);
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: как вытащить данные из TStringGrid и поместить их в форму

Сообщение Dark Ichigo » 08.06.2009 12:40:22

Код: Выделить всё
redkomnat.ItemIndex:=redkomnat.Items.IndexOf(TForm1.StringGrid1.Cells[1,1]);


Не хочет так работать. Пишет:
Error: Only class methods can be referred with class references
Аватара пользователя
Dark Ichigo
новенький
 
Сообщения: 44
Зарегистрирован: 12.03.2009 19:06:51

Re: как вытащить данные из TStringGrid и поместить их в форму

Сообщение Vadim » 08.06.2009 12:53:14

Dark Ichigo
Код: Выделить всё
ComboBox1.ItemIndex:=ComboBox1.Items.IndexOf(StringGrid1.Cells[StringGrid1.Col, StringGrid1.Row]);

Работает так, что уши заворачиваются. :) Наверное Вы куда-то не туда смотрите.
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: как вытащить данные из TStringGrid и поместить их в форму

Сообщение Dark Ichigo » 08.06.2009 14:02:23

А можно Ваш пример? Возможно, я так быстрее пойму, где сидит эррор.
Аватара пользователя
Dark Ichigo
новенький
 
Сообщения: 44
Зарегистрирован: 12.03.2009 19:06:51

Re: как вытащить данные из TStringGrid и поместить их в форму

Сообщение Mr.Smart » 08.06.2009 15:23:13

Dark Ichigo писал(а):А можно Ваш пример? Возможно, я так быстрее пойму, где сидит эррор.

У вас ошибка не на этой строке!

Весь код в студию!
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: как вытащить данные из TStringGrid и поместить их в форму

Сообщение Vadim » 08.06.2009 15:25:46

Dark Ichigo писал(а):А можно Ваш пример?

Постом выше я как раз его и привёл. ;) Событию DblClick StringGrida назначена именно эта строка, больше там ничего нет. Видимо рассматривать надо всё таки Ваш код, т.к. в моём ничего интересного нет. :)
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: как вытащить данные из TStringGrid и поместить их в форму

Сообщение Alexx2000 » 08.06.2009 15:50:21

Dark Ichigo писал(а):
Код: Выделить всё
redkomnat.ItemIndex:=redkomnat.Items.IndexOf(TForm1.StringGrid1.Cells[1,1]);


Не хочет так работать. Пишет:
Error: Only class methods can be referred with class references

Может все-таки Form1.StringGrid1.Cells[1,1], а не TForm1.StringGrid1.Cells[1,1]
Аватара пользователя
Alexx2000
постоялец
 
Сообщения: 488
Зарегистрирован: 25.10.2006 00:22:07
Откуда: Мытищи

Re: как вытащить данные из TStringGrid и поместить их в форму

Сообщение Mr.Smart » 08.06.2009 17:10:20

Alexx2000 писал(а):Может все-таки Form1.StringGrid1.Cells[1,1], а не TForm1.StringGrid1.Cells[1,1]

Блин как заметил :shock: я раза четыре просматривал :oops:
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

След.

Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot] и гости: 26

Рейтинг@Mail.ru