Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2011.12.04;
Скачать: CL | DM;

Вниз

Stringgrid   Найти похожие ветки 

 
Максон ©   (2011-03-29 12:49) [0]

Здравствуйте.
Столкнулся с такой проблемой. На форме 3 edit-a, 1 Combobox, 1stringGrid, 1button.
Суть вопроса: При каждом нажатии на кнопку данные из edit,combobox отображались в Stringgrid и добавлялась  новая строка.
Увы, у меня так не получается.
Подскажите, пожалуйста

procedure TForm2.addbtnClick(Sender: TObject);
var
 i:Integer;
begin
 strngrd1.RowCount:=0;
 strngrd1.RowCount:=strngrd1.RowCount+1; //Добавление строки
for i:=1 to (strngrd1.RowCount+1) do
 begin
   if strngrd1.Cells[0,i]="" then
   begin
      strngrd1.Cells[1,i]:=edt1.Text;
      strngrd1.Cells[2,i]:=edt2.Text;
      strngrd1.Cells[3,i]:=edt3.Text;
strngrd1.Cells[4,i]:=cbb1.Text;
      Exit;

     end;
     end;
end;

end.


 
Virgo_Style ©   (2011-03-29 13:11) [1]


> добавлялась  новая строка.


strngrd1.RowCount:=0;

вот здесь что происходит, как думаешь?


 
Максон ©   (2011-03-29 13:17) [2]


strngrd1.RowCount:=0;


видимо обнуление таблицы?


 
И. Павел ©   (2011-03-29 13:18) [3]

> for i:=1 to (strngrd1.RowCount+1) do

Тут будет выход за границы StringGrid.


 
И. Павел ©   (2011-03-29 13:22) [4]

> Exit;

нет, похоже что выхода за границы StringGrid все же не будет :)


 
И. Павел ©   (2011-03-29 13:24) [5]

Наверное, нужно как-то так:

procedure TForm2.addbtnClick(Sender: TObject);
begin
 strngrd1.RowCount:=strngrd1.RowCount + 1;
 strngrd1.Cells[1,strngrd1.RowCount-1]:=edt1.Text;
 strngrd1.Cells[2,strngrd1.RowCount-1]:=edt2.Text;
 strngrd1.Cells[3,strngrd1.RowCount-1]:=edt3.Text;
 strngrd1.Cells[4,strngrd1.RowCount-1]:=cbb1.Text;
end;


 
Юрий Зотов ©   (2011-03-29 13:28) [6]

> Максон ©   (29.03.11 12:49)  

Зачем цикл? Просто заполняем добавленную строку.

procedure TForm2.addbtnClick(Sender: TObject);
var
 i:Integer;
begin
 strngrd1.RowCount := strngrd1.RowCount+1; // Добавление строки
 i := strngrd1.RowCount-1; // Номер новой строки
 strngrd1.Cells[1,i]:=edt1.Text;
 strngrd1.Cells[2,i]:=edt2.Text;
 strngrd1.Cells[3,i]:=edt3.Text;
 strngrd1.Cells[4,i]:=cbb1.Text;
end;


 
Максон ©   (2011-03-29 16:13) [7]

Спасибо огромное, пригодилось, буду дальше воять свое приложение.


 
julia-julia ©   (2011-05-09 07:21) [8]

Помогите, пожалуйста. Нужно Заполнить ячейки StringGrid из Edit и MaskEdit, они расположенны на разных формах

procedure TForm1.BitBtn1Click(Sender: TObject);
var y: integer;
begin
stringgrid1.RowCount:=stringgrid1.RowCount+1;
Form2.ShowModal;
y:=StringGrid1.Row-1;
Form1.StringGrid1.Cells[1,y]:=Form2.Edit1.Text;
Form1.StringGrid1.Cells[2,y]:=Form2.MaskEdit2.Text;
Form1.StringGrid1.Cells[2,y]:=Form2.MaskEdit3.Text;
Form1.StringGrid1.Cells[4,y]:=Form2.MaskEdit4.Text;
end;


 
Anatoly Podgoretsky ©   (2011-05-09 08:55) [9]

> julia-julia  (09.05.2011 07:21:08)  [8]

Form1.StringGrid1.Cells[1,y]:=Form2.Edit1.Text;
Form1.StringGrid1.Cells[2,y]:=Form3.MaskEdit2.Text;
Form1.StringGrid1.Cells[2,y]:=Form4.MaskEdit3.Text;
Form1.StringGrid1.Cells[4,y]:=Form5.MaskEdit4.Text;

Но это не совсем верный дизайн, зависимый от внешних условий, надо все
свести к одной форме или хотя бы к свойствам класса.


 
julia-julia ©   (2011-05-09 09:38) [10]

Хм... Я, конечно, попробую, но все таки при возможности не хотела бы менять дизайн. А про сведение к свойствам класса можно узнать поподробней:)


 
Anatoly Podgoretsky ©   (2011-05-09 10:19) [11]

> julia-julia  (09.05.2011 09:38:10)  [10]

В классе определить свойства или поля и после ввода в них записывать, лучше
свойства, поскольку они могут быть управляемыми, а выглядеть как поля.


 
MsGuns ©   (2011-05-10 13:13) [12]

ИМХО, "знает" о том, что добавлять и что надо вообще добавлять, должна та форма, которая собственно и реализует этот ввод.
Поэтому следует, наверное сделать как-то так:

Форма вызывающая (Form1)
procedure TForm1.BitBtn1Click(Sender: TObject);
  var y: integer;
begin
  with TForm2.Create(Self) do
     begin
       sGrid := stringgrid1;
       iRow := -1;  // Добавление в конец
       ShowModal;
       Free;
     end;
end;


Форма с вводом:

TForm2 class (TForm)  

  private
    procedure ButtonOkClick(Sender: TObject);
       ...
  public
    sGrid: TStringGrid;
    iRow: unteger;    

       ...
procedure TForm2.ButtonOkClick(Sender: TObject);
var
  cRow: integer;
begin
  cRow := iRow;
  if cRow<0 then
    begin  // Добавить новую строку в конец сетки
     sGrid.RowCount := sGrid.RowCount + 1;  
     cRow := sGrid.RowCount - 1;
     sGrid.Row := cRow;  // Сделать добавленную строку текущей и видимой
    end;
  sGrid.Cells[1,cRow]:=Edit1.Text;
  sGrid.Cells[2,cRow]:=MaskEdit2.Text;
  sGrid.Cells[3,cRow]:=MaskEdit3.Text;
  sGrid.Cells[4,cRow]:=MaskEdit4.Text;
  Close;
end;


 
julia-julia ©   (2011-05-14 18:20) [13]

Файл создается в него записываются данные которые я ввожу в Edit и MaskEdit, но почему то только первые, если я введу другие то у меня появиться новая строка с новыми данными как и должно быть, но при этом еще и старые данные заменятся на новые. Где косяк опять у меня, посмотрите, пожалуйста.

procedure TForm1.BitBtn1Click(Sender: TObject);
//добавление записи из StringGrid в файлPoezd.txt
Var I : Byte;
   F : TextFile;
   S : String;
begin
StringGrid1.RowCount:=StringGrid1.RowCount+1;

 AssignFile(F, "Poezd.txt");
 Rewrite(F);
 For I := 0 to StringGrid1.RowCount - 1 do
 Begin
StringGrid1.Cells[0,I+1]:=Edit1.Text;
StringGrid1.Cells[1,I+1]:=MaskEdit1.Text;
StringGrid1.Cells[2,I+1]:=MaskEdit2.Text;
StringGrid1.Cells[3,I+1]:=MaskEdit3.Text;
S := StringGrid1.Cells[0,I] +" "+StringGrid1.Cells[1,I]+" "+StringGrid1.Cells[2,I]+" "+StringGrid1.Cells[3,I];
   Writeln(F,S)
 end;
 CloseFile(F)
end;


 
Palladin ©   (2011-05-14 20:36) [14]

прокомментируй каждую строчку и объясни чего ты хочешь


 
julia-julia ©   (2011-05-14 23:03) [15]

//Записать из StringGrid в файл
procedure TForm1.BitBtn1Click(Sender: TObject);
Var I : Byte;//Номер столбца
   F : TextFile;// Текстовый файл
   S : String;//Строка текстового файла
begin
 StringGrid1.RowCount:=StringGrid1.RowCount+1;//Создаем строку в StringGrid
 AssignFile(F, "Poezd.txt");//Установили связь с файлом
 Rewrite(F);//Перезаписали файл
 For I := 0 to StringGrid1.RowCount - 1 do //Проходим по всем строкам StringGrid
 Begin
// заполняем ячейки с помощь Edit и MaskEdit (соответственно)
StringGrid1.Cells[0,I+1]:=Edit1.Text;
StringGrid1.Cells[1,I+1]:=MaskEdit1.Text;
StringGrid1.Cells[2,I+1]:=MaskEdit2.Text;
StringGrid1.Cells[3,I+1]:=MaskEdit3.Text;
 S := StringGrid1.Cells[0,I] +" "+StringGrid1.Cells[1,I]+" "
 +StringGrid1.Cells[2,I]+" "+StringGrid1.Cells[3,I];//Преобразуем данные
//из StringGrig в файл

  Writeln(F,S)//Переписываем каждую строку в файл
 end;
 CloseFile(F) //Закрываем файл
end;


 
Palladin ©   (2011-05-14 23:41) [16]

) комментарии - твердая пятерка
теперь вопрос другой ) а Вы вообще знаете что такое - цикл for? )


 
julia-julia ©   (2011-05-14 23:54) [17]

Цикл с параметром, с шагом изменения счетчика 1


 
Palladin ©   (2011-05-15 00:12) [18]

то есть он повторяется от 0 до, скажем, 4, то есть пять раз, так?
от же самое значит что

StringGrid1.Cells[0,I+1]:=Edit1.Text;
StringGrid1.Cells[1,I+1]:=MaskEdit1.Text;
StringGrid1.Cells[2,I+1]:=MaskEdit2.Text;
StringGrid1.Cells[3,I+1]:=MaskEdit3.Text;

выполнится тоже 5 раз, и каждый раз с новым значением I, так?
какие выводы?


 
Palladin ©   (2011-05-15 02:17) [19]

надеюсь выводы его не парализовали и парень жив


 
Германн ©   (2011-05-15 06:17) [20]


> Palladin ©   (15.05.11 02:17) [19]
>
> надеюсь выводы его не парализовали и парень жив

Так тут уже два автора засветились. Думаю оба до сих пор живы.


 
КирилКА   (2011-08-13 14:48) [21]

Удалено модератором
Примечание: Offtopic


 
КирилКА   (2011-08-13 14:49) [22]

Удалено модератором
Примечание: Offtopic



Страницы: 1 вся ветка

Текущий архив: 2011.12.04;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.011 c
2-1313774122
Sega625
2011-08-19 21:15
2011.12.04
record в array of byte


4-1252596453
harisma
2009-09-10 19:27
2011.12.04
PasswordChar для TEdit


15-1313429581
alexdn
2011-08-15 21:33
2011.12.04
Гугл купил моторолу..!


6-1246383174
ganzzz
2009-06-30 21:32
2011.12.04
Кто нибудь встречал заголовок wget?


6-1206535564
XAOC
2008-03-26 15:46
2011.12.04
получить письмо в windows1251