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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.04.2013, 19:09   #1
qpuTuJlb
Пользователь
 
Аватар для qpuTuJlb
 
Регистрация: 31.03.2012
Сообщений: 67
По умолчанию Таблица

Добрый вечер, как сделать так чтобы если в таблице StringGrid в первой строке все ячейки имеют текст, то чтобы следующая запись из Edit выводилась уже на другой строке где свободные ячейки?
qpuTuJlb вне форума Ответить с цитированием
Старый 17.04.2013, 03:02   #2
xrob
Форумчанин
 
Регистрация: 18.10.2010
Сообщений: 419
По умолчанию

ответ содержится в вашем вопросе:
если в StringGrid в строке все ячейки имеют текст,
то следующая запись выводилась уже на другой строке


надо только записать это на языке программирования...
а вообще вам надо найти первую строку со свободным местом

конкретно для этого действия я бы написал функцию:

// она получает вашу таблицу, а возвращает индекс нужной строки, или -1, если все строки заполнены
Код:
function GetFirstEmptyLine(T:TStringGrid):integer;
var
i,d:integer;
begin
Result:=-1; // предположим, что пустых строчек нет
// а дальше нам нужно просто найти первую пустую ячейку

for d:=0 to T.RowCount-1 do
for i:=0 to T.ColCount-1 do 
  if T.Cells[i,d]='' then  // если найдем пустую ячейку
  begin
  Result:=d; // возвращаем индекс текущей строки
  Exit; // выходим из функции, поскольку продолжение не имеет смысла
  end;

end;

пример использования:


d:=GetFirstEmptyLine(StringGrid1);

if d=-1 then
begin
d:=StringGrid1.RowCount; // запоминаем текущее кол-во строк
StringGrid1.RowCount:=d+1; // добавляем еще одну строку
end;

StringGrid1.Cells[ваша ячейка, d]:='ваш текст';

Последний раз редактировалось xrob; 17.04.2013 в 03:07.
xrob вне форума Ответить с цитированием
Старый 17.04.2013, 19:04   #3
qpuTuJlb
Пользователь
 
Аватар для qpuTuJlb
 
Регистрация: 31.03.2012
Сообщений: 67
По умолчанию

ничего не помогло, у меня просто есть 4 edit'a и к каждому прикреплена ячейка в строке как тут быть?
Код:
begin
Result:=-1;
for d:=0 to StringGrid1.RowCount-1 do
for i:=0 to StringGrid1.ColCount-1 do
if StringGrid1.Cells[i,d]='' then
begin
Result:=d;
Exit;
StringGrid1.Cells[0,d]:=Edit1.Text;
StringGrid1.Cells[1,d]:=Edit2.Text;
StringGrid1.Cells[2,d]:=Edit3.Text;
StringGrid1.Cells[3,d]:=Edit4.Text;
qpuTuJlb вне форума Ответить с цитированием
Старый 17.04.2013, 19:08   #4
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,285
По умолчанию

Опишите более подробно, что у Вас есть, и что Вы хотите получить.
Как я понял (предполагаю):
Есть стринггрид
Есть 4 едита
После ввода значений в едиты и нажатия кнопки (предположительно) информация из едитов и результат (предположительно) должны быть помещены в стринггрид
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 17.04.2013, 19:16   #5
qpuTuJlb
Пользователь
 
Аватар для qpuTuJlb
 
Регистрация: 31.03.2012
Сообщений: 67
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Опишите более подробно, что у Вас есть, и что Вы хотите получить.
Как я понял (предполагаю):
Есть стринггрид
Есть 4 едита
После ввода значений в едиты и нажатия кнопки (предположительно) информация из едитов и результат (предположительно) должны быть помещены в стринггрид
да,и после того как был выведен результат в стринггрид перейти на новую строку в нем
qpuTuJlb вне форума Ответить с цитированием
Старый 17.04.2013, 19:37   #6
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,285
По умолчанию

Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Button1: TButton;
    StringGrid1: TStringGrid;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  current: integer;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  if StringGrid1.RowCount <= current then
    StringGrid1.RowCount := StringGrid1.RowCount + 10;
  StringGrid1.Cells[0, current] := Edit1.Text;
  StringGrid1.Cells[1, current] := Edit2.Text;
  StringGrid1.Cells[2, current] := Edit3.Text;
  StringGrid1.Cells[3, current] := Edit4.Text;
  StringGrid1.Cells[4, current] := 'result';
  inc(current);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  current := 0;
end;

end.
UPD
Пожалуйста
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 17.04.2013 в 20:02.
BDA вне форума Ответить с цитированием
Старый 17.04.2013, 19:55   #7
qpuTuJlb
Пользователь
 
Аватар для qpuTuJlb
 
Регистрация: 31.03.2012
Сообщений: 67
По умолчанию

спасибо, работает
qpuTuJlb вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
таблица в VB 6.5 levity_92 Помощь студентам 0 26.05.2010 17:03
Таблица Namolem Общие вопросы .NET 4 15.05.2010 00:41
Таблица V@mpir Помощь студентам 5 20.01.2010 23:04
таблица тася Microsoft Office Excel 17 25.01.2009 00:29
таблица artemavd Общие вопросы Delphi 3 23.07.2008 13:56