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

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

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

Восстановить пароль

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

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

Я пишу icq-бот, не могу разобраться с самым главным....

Надо сделать проверку: если присланое сообщение есть в списке StringGrid'а (в 2 колонке, тоесть !help, !стоп и другие которые будут введены) то ответить сообщением из той же строки следующей колонки...
Тоесть если прислали "!help" - ответить "Помошь......."

Последний раз редактировалось W0LF; 06.07.2009 в 17:53.
W0LF вне форума Ответить с цитированием
Старый 06.07.2009, 17:19   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ну предположим так:
Код:
s - строка которая пришла
i:=stringgrid.Cols[1].Indexof(s);
if i<>-1 then
 i - строка с найденной командой.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 06.07.2009, 17:39   #3
W0LF
Форумчанин
 
Аватар для W0LF
 
Регистрация: 28.03.2008
Сообщений: 940
По умолчанию

Я новичок в этом деле, по этому прошу обьяснить на примере. Вот процедура приема сообщения:
Код:
procedure TForm1.ICQClient1MessageRecv(Sender: TObject; Msg, UIN: String);
var
  ICQ: Cardinal;
begin
  icq := StrToInt(UIN);
  Memo1.Lines.Add(UIN + ': ' + Msg);
  if Msg=stringgrid1.Cells[1,1] then ICQClient1.SendMessage(icq, stringgrid1.Cells[2,1]);
end;
если текст из первой ячейки такойже как и принятый - отправлеят текст с соседней...
Цитата:
s - строка которая пришла
i:=stringgrid.Cols[1].Indexof(s);
if i<>-1 then
i - строка с найденной командой.
А как это использовать в таком случаи? Или можно както по-другому...
W0LF вне форума Ответить с цитированием
Старый 06.07.2009, 17:48   #4
ОДИНОЧЕСТВО В СЕТИ
Любопытная Вредина
Участник клуба
 
Аватар для ОДИНОЧЕСТВО В СЕТИ
 
Регистрация: 19.06.2009
Сообщений: 1,285
По умолчанию

а не проще БД использовать и sql!
Дурь - это особая форма материи, которая не возникает ниоткуда и не исчезает никуда, а лишь переходит из одной головы в другую.
ОДИНОЧЕСТВО В СЕТИ вне форума Ответить с цитированием
Старый 06.07.2009, 17:50   #5
W0LF
Форумчанин
 
Аватар для W0LF
 
Регистрация: 28.03.2008
Сообщений: 940
По умолчанию

Говорю, я начинающий.. использую что знаю. А в bd вообще "ноль" полный.
W0LF вне форума Ответить с цитированием
Старый 06.07.2009, 18:01   #6
Kotofff
Участник клуба
 
Аватар для Kotofff
 
Регистрация: 11.01.2009
Сообщений: 1,917
По умолчанию

Может так ?
Код:
procedure TForm1.ICQClient1MessageRecv(Sender: TObject; Msg, UIN: String);
var
  ICQ: Cardinal;
  i: integer;// переменная для цикла по строкам
begin
  icq := StrToInt(UIN);
  Memo1.Lines.Add(UIN + ': ' + Msg); // я не знаю зачем тут это ... 
  for i:=1 to StringGrid1.RowCount do
    if Msg=StringGrid1.Cells[1,i] then // если сообщение совпадает со значением в первом столбце ...
      ICQClient1.SendMessage(icq, StringGrid1.Cells[2,i]);// ... то отсылаем со второго столбца
end;
"Заряженному танку в дуло не смотрят" @Dekmer in WoT
Kotofff вне форума Ответить с цитированием
Старый 06.07.2009, 18:09   #7
W0LF
Форумчанин
 
Аватар для W0LF
 
Регистрация: 28.03.2008
Сообщений: 940
По умолчанию

Kotofff, благодарю тебя!)) Это то что надо... капец, про цикл думал, но не мог понять как его сделать, оказалось всё очень и очень проста...
Еще раз спс тебе...

Еще вопрос: как сохранить текст каждой ячейки 1 и 2 или добавить в переменную text и text2 и при создании формы из файла опять ячейки заполнить?
ЗЫ: прошу при возможности полный листинг процедуры

Последний раз редактировалось Stilet; 07.07.2009 в 13:41.
W0LF вне форума Ответить с цитированием
Старый 07.07.2009, 13:07   #8
psycho-coder
Участник клуба
 
Аватар для psycho-coder
 
Регистрация: 06.04.2009
Сообщений: 1,524
По умолчанию

Пользуйся
Код:
// Сохранение
procedure TForm1.Button1Click(Sender: TObject);
var
  botList: TStringList;
  i: Integer;
begin
  botList := TStringList.Create;
  botList.NameValueSeparator := '='; // Можно другой сивол. Например #0

  for i := 1 to StringGrid1.RowCount do
  begin
    botList.Values['1'+IntToStr(i)] := StringGrid1.Cells[1, i];
    botList.Values['2'+IntToStr(i)] := StringGrid1.Cells[2, i];
  end;

  // Что бы знать сколько записей, при загрузке файла
  botList.Values['count'] := IntToStr(StringGrid1.RowCount - 1);

  try
    botList.SaveToFile('botlist.txt'); // Сохраняем
  except
    MessageBox(Self.Handle, 'Невозможно сохранить "botlist.txt"', 'Ошибка!', MB_OK);
    Exit;
  end;
  botList.Free; // Освобождаем
end;

// Загрузка
procedure TForm1.Button2Click(Sender: TObject);
var
  botList: TStringList;
  i, count: Integer;
begin
  botList := TStringList.Create;
  botList.NameValueSeparator := '='; // Можно другой сивол. Например #0
  try
    // Загрузка. Путь можно любой главное что бы он был
    // верный при загрузке и сохранении  
    botList.LoadFromFile('botlist.txt');
  except
    // Месага об ошибке. Можно что то свое
    MessageBox(Self.Handle, 'Невозможно загрузить "botlist.txt"', 'Ошибка!', MB_OK);
    Exit;
  end;
  count := StrToInt(botList.Values['count']);
  StringGrid1.RowCount := count + 1;

  for i := 1 to count do
  begin
    StringGrid1.Cells[1, i] := botList.Values['1'+IntToStr(i)];
    StringGrid1.Cells[2, i] := botList.Values['2'+IntToStr(i)];
  end;

  botList.Free;
end;

Последний раз редактировалось psycho-coder; 07.07.2009 в 15:31.
psycho-coder вне форума Ответить с цитированием
Старый 07.07.2009, 18:12   #9
W0LF
Форумчанин
 
Аватар для W0LF
 
Регистрация: 28.03.2008
Сообщений: 940
По умолчанию

+ вопрос, это надеюсь последний:
Надо что бы при клике на определенную ячейку открывалось окно Form3 с названием этой ячейки и которое имело мемо, всмысле в мемо текст ячейки. (по тому что, в ячейку нельзя ввести крупный текст с ентером и т.д.). Форма должна иметь еще кнопку сохранения текста в ячейку из которой загрузился текст (всмысле редактировать ее). Прошу помочь мне в этом, для меня, не легком деле...
Вот примерно так:


PS: извините за мой напор
W0LF вне форума Ответить с цитированием
Старый 07.07.2009, 18:49   #10
psycho-coder
Участник клуба
 
Аватар для psycho-coder
 
Регистрация: 06.04.2009
Сообщений: 1,524
По умолчанию

Вот рас.
Код:
procedure TForm1.StringGrid1DblClick(Sender: TObject);
var
  _left, _top: Integer;
begin
  _left := StringGrid1.Selection.Left; // Выделенная ячейка слева
  _top := StringGrid1.Selection.Top; // Выделенная ячейка сверху
  if (_left < 1) and (_top < 1) then Exit; // Если они меньше 1 то это не наше

  // Загружаем в Memo1 текст из выделенной ячейки. По моему тут лучше использовать TEdit
  Form3.Memo1.Text := StringGrid1.Cells[_left, _top];
  Form3.Caption := 'Ячейка['+IntToStr(_left)+','+IntToStr(_top)+']'; // Заголовок
  Form3.ShowModal; // Отображаем как модальное окно
  StringGrid1.Cells[_left, _top] := Form3.Memo1.Text; // Загружаем в ячейку текст из Memo1
end;

Вот два.
Код:
unit Unit3
...
procedure TForm3.Button1Click(Sender: TObject);
begin
  Close;
end;
Изображения
Тип файла: png strgrid.PNG (14.9 Кб, 123 просмотров)

Последний раз редактировалось psycho-coder; 07.07.2009 в 18:52.
psycho-coder вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа со StringGrid'ом Rusl92 Общие вопросы Delphi 1 25.11.2008 23:54
Проблема со StringGrid'ом monushka Компоненты Delphi 8 31.10.2007 15:13
Помогите, пожалуйста, со StringGrid'ом! monushka Помощь студентам 3 27.10.2007 19:17