Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Delphi7: очистить ячейки Stringgrid если не выполняется условие  (Прочитано 9009 раз)
0 Пользователей и 1 Гость смотрят эту тему.
СвоЕобразнаЯ
Участник

ru
Offline Offline

« : 02-05-2010 16:54 » 

Добрый вечер! Что, съел?
У меня курсовой проект... Дожила!  Жжешь
Всё шло гладко, но сегодня вот застряла на чистой глупости... Я зол!
Задание следующее:
•Дана символьная квадратная матрица порядка 6. Заменить буквой а все ее элементы, расположенные выше строки с номером k.

Мне нужно сделать так, чтобы если за компьютер сядет дворник дядя Вася то он ничего не смог напортачить. Вдруг он например создаст матрицу 3*3 и потребует чтобы заменились символы находящиеся выше 10-ой строки . А 10-ой строки-то и нету. На этот случай предусмотрено ШоуМесседж "Некорректное значение!" и чтобы все элементы матрицы стирались. Сообщение-то показывается, но ячейки не очищаются, а заполняются буквами "а"  Меня одолевают смутные сомнения Вот текст программы и архив на всякий случай:

Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons, Spin, Grids, Menus, ImgList, XPMan;

type
  TForm1 = class(TForm)
    XPManifest1: TXPManifest;
    ImageList1: TImageList;
    MainMenu1: TMainMenu;
    N1: TMenuItem;
    N2: TMenuItem;
    N3: TMenuItem;
    N4: TMenuItem;
    N5: TMenuItem;
    StringGrid1: TStringGrid;
    N6: TMenuItem;
    N7: TMenuItem;
    N8: TMenuItem;
    Label1: TLabel;
    SpinEdit1: TSpinEdit;
    BitBtn1: TBitBtn;
    SpinEdit2: TSpinEdit;
    SpinEdit3: TSpinEdit;
    Label2: TLabel;
    Label3: TLabel;
    BitBtn2: TBitBtn;
    procedure N5Click(Sender: TObject);
    procedure N6Click(Sender: TObject);
    procedure N8Click(Sender: TObject);
    procedure BitBtn1Click(Sender: TObject);
    procedure StringGrid1KeyPress(Sender: TObject; var Key: Char);
    procedure BitBtn2Click(Sender: TObject);
    procedure StringGrid1SetEditText(Sender: TObject; ACol, ARow: Integer;
      const Value: String);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
 procedure TForm1.BitBtn1Click(Sender: TObject);
var
  i, j   : Byte;
const
  Por    : Byte =5;
begin
if (SpinEdit1.Value>SpinEdit2.Value) or (SpinEdit1.Value>SpinEdit3.Value) then begin
      ShowMessage('Некорректное значение!');
      For i:=0 to SpinEdit1.Value-2 do
    For j:=0 to SpinEdit1.Value-2 do
      StringGrid1.Cells[j,i]:='';
      end;
  For i:=0 to SpinEdit1.Value-2 do
    For j:=0 to Por do
      StringGrid1.Cells[j,i]:='a'
end;

procedure TForm1.StringGrid1KeyPress(Sender: TObject; var Key: Char);
begin
    if key=#13
    then
    begin
      with StringGrid1 do
        if Col < ColCount - 1
        then
          Col := Col + 1
        else
          if Row < RowCount - 1
          then
          begin
            Row := Row + 1;
            Col := 0;
          end
          else
          begin
            Row := 0;
            Col := 0;
          end;
    end
    else
      key:=key;
end;

procedure TForm1.N8Click(Sender: TObject);
begin
MessageDlg('Чтобы запустить программу, нажмите кнопку "Запусить".'+#10#13+
'Чтобы выйти из программы нажмите пункт меню "Файл->Выход"',mtConfirmation,[mbOK],0);
end;


procedure TForm1.N5Click(Sender: TObject);
begin
Close;
end;

procedure TForm1.N6Click(Sender: TObject);
begin
  MessageDlg('Разработала: Агапчева Юлия Романовна'+#10#13+
             'Группа: ПИЮ-Д21'+#10#13+
             'Предмет: Разработка и стандартизация программных средств и технологий'+#10#13+
             'Вариант: 15',mtConfirmation,[mbOK],0);
end;

procedure TForm1.BitBtn2Click(Sender: TObject);
begin
StringGrid1.RowCount:=SpinEdit3.Value;
StringGrid1.ColCount:=SpinEdit2.Value;
end;

procedure TForm1.StringGrid1SetEditText(Sender: TObject; ACol,
  ARow: Integer; const Value: String);
begin
if StringGrid1.Cells[ACol,ARow]<>'' then begin
    BitBtn1.Enabled:=True;
    N3.Enabled:=True;
  end
  else
  begin
    BitBtn1.Enabled:=False;
    N3.Enabled:=False;
  end
end;

end.

Кто чем сможет... Скромно так...

* №3.rar (194.58 Кб - загружено 713 раз.)
Записан
СвоЕобразнаЯ
Участник

ru
Offline Offline

« Ответ #1 : 02-05-2010 17:03 » 

А может быть вообще поставить ограничение: чтобы дядя Вася не смог ввести в СпинЭдит1 значение большее чем строчек в матрице?  :idea2:Только как ЭТО сделать я точно не знаю  А черт его знает...
Записан
Элексир
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #2 : 03-05-2010 10:59 » 

попробуй так
Код:
procedure TForm1.SpinEdit1Exit(Sender: TObject);
begin
if StrToInt(spinedit1.Text)>memo1.Lines.Count then begin
ShowMessage('Неправильно дядя дворник');
spinedit1.Text:=IntToStr(memo1.Lines.Count);
end;
end;
« Последнее редактирование: 03-05-2010 11:13 от Элексир » Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #3 : 03-05-2010 11:25 » 

Сообщение-то показывается, но ячейки не очищаются, а заполняются буквами "а"

А что тебя удивляет? Вот смотри что здесь происходит:


Код:
if (SpinEdit1.Value>SpinEdit2.Value) or (SpinEdit1.Value>SpinEdit3.Value) then begin
      ShowMessage('Некорректное значение!');
      For i:=0 to SpinEdit1.Value-2 do
    For j:=0 to SpinEdit1.Value-2 do
      StringGrid1.Cells[j,i]:='';
      end;
  For i:=0 to SpinEdit1.Value-2 do
    For j:=0 to Por do
      StringGrid1.Cells[j,i]:='a'
end;

Сначала все ячейки заполняются пустышками, а потом буквами а. Ну и в чём проблема? Программа делает именно так, как она запрограммирована.

Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
zubr
Гость
« Ответ #4 : 03-05-2010 12:44 » 

TSpinEdit.MaxValue
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines