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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.08.2009, 14:16   #1
W0LF
Форумчанин
 
Аватар для W0LF
 
Регистрация: 28.03.2008
Сообщений: 940
Вопрос StringGrid

Здравствуйте, меня интересует одна "штука": у меня есть StringGrid, нада определить есть ли в первой колонке текст который повторяеться и если есть выдать ошибку. Спс заранее
W0LF вне форума Ответить с цитированием
Старый 26.08.2009, 14:26   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ну знач примерно так:
Код:
var j,i:integer;
begin
with StringGrid1 do
 for i:=0 to Cols[0].Count-1 do
  for j:=i+1 to Cols[0].Count-1 do begin
    if cols[0].Strings[j]:=cols[0].Strings[i] then // Повторение найдено
  end;
end;
Не проверял.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 26.08.2009, 14:31   #3
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Вроде этого?
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
i,j : integer;
b : boolean;
begin
b := true;
for i:=1 to StringGrid1.RowCount-2 do
 begin
 for j:=i+1 to StringGrid1.RowCount-1 do
  if StringGrid1.Cells[0,i]=StringGrid1.Cells[0,j] then
   begin
   b := false;
   break;
   end;
 if not b then break;
 end;
if not b then ShowMessage('Error!');

end;
Опередил
Stilet маленькая опечатка в ифе )
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 26.08.2009, 16:28   #4
W0LF
Форумчанин
 
Аватар для W0LF
 
Регистрация: 28.03.2008
Сообщений: 940
По умолчанию

Еще одно:

Код:
function proverka:boolean;
var
i,j : integer;
b : boolean;
begin
b := true;
result:=false;
for i:=1 to form1.StringGrid1.RowCount-2 do
 begin
 for j:=i+1 to form1.StringGrid1.RowCount-1 do
  if form1.StringGrid1.Cells[0,i]=form1.StringGrid1.Cells[0,j] then
   begin
   b := false;
   break;
   end;
 if not b then break;
 end;
if not b then result:=true;
end;


procedure TForm1.LOAD(fn:string);
var
i:integer;
s:tstringlist;
begin
s:=tstringlist.Create;
s.LoadFromFile(fn);
for i:=1 to 29 do begin
  if not proverka=false then begin
ShowMessage('Существуют повторяющиеся команды, исправьте ошибку!');
 break end else
 Form1.StringGrid1.Cells[0,i]:=s.Strings[i-1]
end;
s.Free;
end;


procedure TForm1.SAVE(fn:string);
var
i:integer;
s:tstringlist;
a:array[1..29] of String;
begin
s:=tstringlist.Create;
for i:=1 to 29 do begin
if proverka=false then begin
a[i]:=form1.StringGrid1.Cells[0,i];
s.Add(a[i]);
s.SaveToFile(fn);
end
else begin ShowMessage('Существуют повторяющиеся команды, исправьте ошибку!');
break;
end;
end;
s.Free;
end;
если изменить текст вручную (в файле) то первая повторяющеяся строка всеравно загружаеться в список (при LOAD), а следующие нет... Как это можно исправить?
W0LF вне форума Ответить с цитированием
Старый 26.08.2009, 16:53   #5
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Если у вас в гриде нет фиксированной строки, то в цикле по i идите от нуля.

Функция "проверка" у вас заточена под функцию "SAVE", потому что в ней проверяются элементы грида. А в функции "LOAD" вы имеете дело со Стринглистом.

Как вариант: измените "проверку", чтобы она работала со стринглистом. А в функции сохранения сначала помещайте элементы грида в стринглист и вызывайте проверку.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 26.08.2009, 17:17   #6
W0LF
Форумчанин
 
Аватар для W0LF
 
Регистрация: 28.03.2008
Сообщений: 940
По умолчанию

я не знаю чо де паправить, нечего не выходит (((
W0LF вне форума Ответить с цитированием
Старый 26.08.2009, 17:55   #7
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Код:
function check(list : TStringList) : boolean;
var i,j : integer;
b : boolean;
begin
b := true;
for i:=0 to list.Count-2 do
 begin
 for j:=i+1 to list.Count-1 do
  if list.Strings[i]=list.Strings[j] then
   begin
   b := false;
   break;
   end;
 if not b then break;
 end;
result := b;
end;



// сохранение
procedure TForm1.Save(fn : string);
var
s : TStringList;
i : integer;

begin
s := TStringList.Create;
for i:=0 to StringGrid1.RowCount-1 do
 s.Add(StringGrid1.Cells[0,i]);
if check(s) then
 s.SaveToFile(fn)
else
 ShowMessage('Error!');

s.Free;
end;

procedure TForm1.Load(fn : string);
var
s : TStringList;
i : integer;
begin
s := TStringList.Create;
s.LoadFromFile(fn);
if check(s) then
 begin
 StringGrid1.RowCount := s.Count;
 for i:=0 to s.Count-1 do
  StringGrid1.Cells[0,i] := s.Strings[i];
 end
else
 ShowMessage('Error!');

s.Free;
end;
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 26.08.2009, 18:55   #8
W0LF
Форумчанин
 
Аватар для W0LF
 
Регистрация: 28.03.2008
Сообщений: 940
По умолчанию

так спс)))
но, а как сделать что бы верхнюю строку не щетало, а начинало со следующей, верхняя у меня фиксированая и не изменяеться..
W0LF вне форума Ответить с цитированием
Старый 26.08.2009, 19:04   #9
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Код:
procedure TForm1.Save(fn : string);
var
s : TStringList;
i : integer;

begin
s := TStringList.Create;
for i:=1 to StringGrid1.RowCount-1 do
 s.Add(StringGrid1.Cells[0,i]);
if check(s) then
 s.SaveToFile(fn)
else
 ShowMessage('Error!');

s.Free;
end;

procedure TForm1.Load(fn : string);
var
s : TStringList;
i : integer;
begin
s := TStringList.Create;
s.LoadFromFile(fn);
if check(s) then
 begin
 StringGrid1.RowCount := s.Count+1;
 for i:=0 to s.Count-1 do
  StringGrid1.Cells[0,i+1] := s.Strings[i];
 end
else
 ShowMessage('Error!');

s.Free;
end;
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 27.08.2009, 09:19   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Stilet маленькая опечатка в ифе )
Я случайно...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
StringGrid stp56 Общие вопросы Delphi 4 27.07.2009 20:44
StringGrid Chudo4258 Помощь студентам 1 17.03.2009 09:24
StringGrid StartMis Общие вопросы Delphi 5 21.11.2008 15:11
StringGrid Devikss Общие вопросы Delphi 8 25.05.2008 16:14
StringGrid MAcK Общие вопросы .NET 2 31.03.2008 11:40