Модераторы: Snowy, MetalFan, bems, Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> StringGrid раскраска, Матрица 
:(
    Опции темы
DRAGON88
Дата 28.3.2010, 12:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 20.11.2008

Репутация: нет
Всего: нет



Всем привет!. Помогите мне дорешать лабораторную. Вот сама задача

Дана целочисленная матрица {Aij} i=1..n, j=1..m (n,mє(6..11)). Конкретный размер задается 
списками ComboBox. Занесение исходных компонентов в матрицу осуществляется с 
помощью StringGrid. Элементы матрицы формируются генератором случайных чисел в 
диапазоне -100..100. Занесение исходных значений в матрицу производится по двойному 
щелчку мыши. По команде главного меню столбцы с одинаковым количеством положительных и 
отрицательных элементов выделяются разноцветными рамками. Пароль: на экране появляются восемь 
случайных цифр, в ответ надо ввести разность второй и пятой. Трехкратный неправильный ввод 
пароля приводит к выходу из программы.


Вот сам код. В общем я не знаю, как сделать так, чтобы по команде главного меню столбцы с одинаковым количеством положительных и отрицательных элементов выделяются разноцветными рамками. А все остальное я сделал. Свой проект прилагаю

Код

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Edit1: TEdit;
    Label2: TLabel;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Edit5: TEdit;
    Edit6: TEdit;
    Edit7: TEdit;
    Edit8: TEdit;
    Edit9: TEdit;
    Button1: TButton;
    Label3: TLabel;
    CheckBox1: TCheckBox;
    Button2: TButton;
    Edit10: TEdit;
    procedure FormCreate(Sender: TObject);
    procedure AppOnIdle(Sender: TObject; var Done: Boolean);     // Caps_LOCK
    procedure Edit1Change(Sender: TObject);
    procedure Edit1KeyPress(Sender: TObject; var Key: Char);
    procedure Button2Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  a, b, c, d, e, f, g, h: integer;   // случайные номера символов
  k:  integer;                       // количество ввода пароля
  l:  integer;                       // разность второй и пятой цифр

implementation

uses Unit2;

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
Application.OnIdle:= AppOnIdle;       // состояние CAPS_LOCK
randomize;
  a:=random(50)+1;
  edit2.Text:=IntToStr(a);
  a:=StrToInt(edit2.Text);

  b:=random(50)+1;
  edit3.Text:=IntToStr(b);
  b:=StrToInt(edit3.Text);

  c:=random(50)+1;
  edit4.Text:=IntToStr(c);
  c:=StrToInt(edit4.Text);

  d:=random(50)+1;
  edit5.Text:=IntToStr(d);
  d:=StrToInt(edit5.Text);


  e:=random(50)+1;
  edit6.Text:=IntToStr(e);
  e:=StrToInt(edit6.Text);

  f:=random(50)+1;
  edit7.Text:=IntToStr(f);
  f:=StrToInt(edit7.Text);

  g:=random(50)+1;
  edit8.Text:=IntToStr(g);
  g:=StrToInt(edit8.Text);

  h:=random(50)+1;
  edit9.Text:=IntToStr(h);
  h:=StrToInt(edit9.Text);

  l:=b - e;
  edit10.Text:=IntToStr(l);

  k:=0;     // Счетчик, количесво попыток
end;




// Определяем состояние CAPS LOCK
procedure TForm1.AppOnIdle(Sender: TObject; var Done: Boolean);
begin
  CheckBox1.Checked:=Odd(GetKeyState(VK_CAPITAL));
  Done:=False;
end;


procedure TForm1.Edit1Change(Sender: TObject);
begin
  if checkBox1.Checked = True then
  begin
     messagedlg('Включен Caps_Lock! Выключите его!',mtError,[mbOk],0);
     edit1.Clear;
  end;
end;



//Нажатие клавиши в поле Дистанция
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
   //Key - символ, соответствующий нажатой клавише
   //Если символ недопустимый, то процедура заменяет его
   //на символ с кодом 0. В результате этого символ в поле
   //редактирования не появляется и у пользователя создаётся
   //впечатления, что программа не реагирует на
   //нажатие некоторых клавиш
      case key of
        '0'..'9':               ;      //цифра
        #8      :               ;     //<Backspace>
        '-'     :               ;     // минус
   //остальные символы запрещены
         else key:=Chr(0);   //символ не отображать
      end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  application.Terminate;    // Валим отсыда
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  if edit1.Text<>edit10.Text then
    begin
      k:=k+1;
      messagedlg('Неверный пароль! Осталось '+inttostr(3-k)+' попытки',mtError,[mbOk],0);
      edit1.Clear;
        if k>=3 then
          begin
            application.Terminate;
          end;
    end
  else
  begin
    if edit1.Text=edit10.Text then
      begin
        form1.Hide;
        form2.Show;
      end;
  end;
end;

end.



Код

unit Unit2;

interface

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

type
  TForm2 = class(TForm)
    ComboBox1: TComboBox;
    Label1: TLabel;
    Label2: TLabel;
    ComboBox2: TComboBox;
    StringGrid1: TStringGrid;
    MainMenu1: TMainMenu;
    N1: TMenuItem;
    N2: TMenuItem;
    BitBtn1: TBitBtn;
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure ComboBox1Click(Sender: TObject);
    procedure ComboBox2Click(Sender: TObject);
    procedure StringGrid1DblClick(Sender: TObject);
    procedure FormActivate(Sender: TObject);
    procedure BitBtn1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form2: TForm2;
  i, j: byte;

implementation

{$R *.dfm}

procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  application.Terminate;
end;


procedure TForm2.ComboBox1Click(Sender: TObject);
begin
  Case Combobox1.ItemIndex of
    0:  begin
          StringGrid1.ColCount:=7;
        end;

    1:  begin
          StringGrid1.ColCount:=8;
        end;

    2:  begin
          StringGrid1.ColCount:=9;
        end;

    3:  begin
          StringGrid1.ColCount:=10;
        end;

    4:  begin
          StringGrid1.ColCount:=11;
        end;

    5:  begin
          StringGrid1.ColCount:=12;
        end;

  end;
end;

procedure TForm2.ComboBox2Click(Sender: TObject);
begin
  Case Combobox2.ItemIndex of
    0:  begin
          StringGrid1.RowCount:=7;
        end;

    1:  begin
          StringGrid1.RowCount:=8;
        end;

    2:  begin
          StringGrid1.RowCount:=9;
        end;

    3:  begin
          StringGrid1.RowCount:=10;
        end;

    4:  begin
          StringGrid1.RowCount:=11;
        end;

    5:  begin
          StringGrid1.RowCount:=12;
        end;
  end;
end;

procedure TForm2.StringGrid1DblClick(Sender: TObject);
begin
for i:=form2.StringGrid1.FixedRows to form2.StringGrid1.RowCount-1 do
    begin
      for j := form2.StringGrid1.FixedCols to form2.StringGrid1.ColCount-1 do
          begin
            form2.StringGrid1.Cells[j, i] := IntToStr( Random(200)-100);
          end;
    end;
end;

procedure TForm2.FormActivate(Sender: TObject);
begin
form2.StringGrid1.Cells[0,0]:='Матрица';
form2.StringGrid1.Cells[0,1]:='A11';
form2.StringGrid1.Cells[0,2]:='A21';
form2.StringGrid1.Cells[0,3]:='A31';
form2.StringGrid1.Cells[0,4]:='A41';
form2.StringGrid1.Cells[0,5]:='A51';
form2.StringGrid1.Cells[0,6]:='A61';
form2.StringGrid1.Cells[0,7]:='A71';
form2.StringGrid1.Cells[0,8]:='A81';
form2.StringGrid1.Cells[0,9]:='A91';
form2.StringGrid1.Cells[0,10]:='A101';
form2.StringGrid1.Cells[0,11]:='A111';

form2.StringGrid1.Cells[1,0]:='A11';
form2.StringGrid1.Cells[2,0]:='A12';
form2.StringGrid1.Cells[3,0]:='A13';
form2.StringGrid1.Cells[4,0]:='A14';
form2.StringGrid1.Cells[5,0]:='A15';
form2.StringGrid1.Cells[6,0]:='A16';
form2.StringGrid1.Cells[7,0]:='A17';
form2.StringGrid1.Cells[8,0]:='A18';
form2.StringGrid1.Cells[9,0]:='A19';
form2.StringGrid1.Cells[10,0]:='A110';
form2.StringGrid1.Cells[11,0]:='A111';
end;

procedure TForm2.BitBtn1Click(Sender: TObject);
begin
  application.Terminate;
end;

end.



Присоединённый файл ( Кол-во скачиваний: 7 )
Присоединённый файл  kr.zip 263,23 Kb
PM MAIL   Вверх
Keeper89
Дата 28.3.2010, 14:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2580
Регистрация: 26.2.2009

Репутация: 9
Всего: 58



Вот тема про раскраску: http://forum.vingrad.ru/act-ST/f-331/t-260...getnewpost.html


--------------------
PM MAIL WWW   Вверх
DRAGON88
Дата 28.3.2010, 14:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 20.11.2008

Репутация: нет
Всего: нет



Keeper89, спасибо за ссылку, но она мне не помогла! Можешь мне код к моей задаче подсказать! И не ужели больше никто ничего не знает. Я не верю smile 
PM MAIL   Вверх
Keeper89
Дата 29.3.2010, 01:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2580
Регистрация: 26.2.2009

Репутация: 9
Всего: 58



DRAGON88, чем не помогла и что получилось?


--------------------
PM MAIL WWW   Вверх
JIIOTbIU
Дата 24.4.2012, 18:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 24.4.2012

Репутация: нет
Всего: нет



Доброго времени суток) мне скоро предстоит работа над подобной программой, но так как еще очень плохо в этом разбираюсь решил спросить у вас) можно ли сделать такую же программу без окна ввода пароля и как это сделать) и к примеру если выделять столбец каким либо цветом, в котором находится наибольший элемент матрицы)
PM MAIL ICQ   Вверх
northener
Дата 24.4.2012, 23:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1361
Регистрация: 2.9.2010

Репутация: 12
Всего: 20



Цитата(JIIOTbIU @  24.4.2012,  18:52 Найти цитируемый пост)
можно ли сделать такую же программу без окна ввода пароля и как это сделать) и к примеру если выделять столбец каким либо цветом, в котором находится наибольший элемент матрицы

Можно. Начинайте делать, а если в ходе работы возникнут конкретные вопросы - поможем их решить.


--------------------
Но только лошади летают вдохновенно.
Иначе лошади разбились бы мгновенно!
PM MAIL   Вверх
JIIOTbIU
Дата 25.4.2012, 18:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 24.4.2012

Репутация: нет
Всего: нет



вот такая вот программка) преподаватель дал как пример и сказал сделать из нее нечто другое на завтрашнее занятие)
вот исходная программа(ее условие):

Дана целочисленная матрица {Aij} i=1..n, j=1..m (n,m є (7..9)). Конкретный размер задается  контекстным меню (строки) и линейкой ScrollBar (столбцы). Внизу в дополнительной строке выводится наименьший отрицательный элемент в каждом столбце.  При нажатии клавиши Enter столбец с наибольшим таким элементом выделяется синей рамкой.
 
И вот что из нее надо сделать:
Дана целочисленная матрица {Aij} i=1..n, j=1..m (n,m є (6..10)). Конкретный размер задается  главным меню (строки) и списком ComboBox (столбцы). Внизу в дополнительной строке выводится наибольший элемент в каждом столбце. По команде контекстного меню столбец с наибольшим элементом в матрице выделяется красной рамкой. 

Я уже смог разобраться и поменял наименьший элемент на наибольший, и поменял цвет рамки в которую выделяется на красный), а дальше что то неполучается)

вот код проги:
Код


unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    StringGrid1: TStringGrid;
    PopupMenu1: TPopupMenu;
    N71: TMenuItem;
    N81: TMenuItem;
    N91: TMenuItem;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    ScrollBar1: TScrollBar;
    Label4: TLabel;
    Button1: TButton;
    procedure N71Click(Sender: TObject);
    procedure N81Click(Sender: TObject);
    procedure N91Click(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure ScrollBar1Change(Sender: TObject);
    procedure StringGrid1DblClick(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure StringGrid1KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  a:array [1..9,1..9]of integer;
  min:array [1..9] of integer;
  t:boolean;
implementation

{$R *.dfm}

procedure TForm1.N71Click(Sender: TObject);
 var i:integer;
begin
  stringgrid1.RowCount:=8;
  stringgrid1.Height:= 9*stringgrid1.DefaultRowHeight-10;
  label2.Caption:='×èñëî ñòðîê = '+inttostr(stringgrid1.RowCount-1)+' (êîíòåêñòíîå ìåíþ ôîðìû)';
  for i:=0 to stringgrid1.RowCount-1 do
  stringgrid1.Rows[i].Clear;
  Button1.Enabled:=false;
end;

procedure TForm1.N81Click(Sender: TObject);
var i:integer;
begin
 stringgrid1.RowCount:=9;
 stringgrid1.Height:= 10* stringgrid1.DefaultRowHeight-10;
 label2.Caption:='×èñëî ñòðîê = '+inttostr(stringgrid1.RowCount-1)+' (êîíòåêñòíîå ìåíþ ôîðìû)';
 for i:=0 to stringgrid1.RowCount-1 do
  stringgrid1.Rows[i].Clear;
  Button1.Enabled:=false;
end;

procedure TForm1.N91Click(Sender: TObject);
var i:integer;
begin
stringgrid1.RowCount:=10;
stringgrid1.Height:= 11* stringgrid1.DefaultRowHeight-10;
label2.Caption:='×èñëî ñòðîê = '+inttostr(stringgrid1.RowCount-1)+' (êîíòåêñòíîå ìåíþ ôîðìû)';
for i:=0 to stringgrid1.RowCount-1 do
  stringgrid1.Rows[i].Clear;
  Button1.Enabled:=false;
end;

procedure TForm1.FormShow(Sender: TObject);
var i:integer;
begin
label2.Caption:='×èñëî ñòðîê = '+inttostr(stringgrid1.RowCount-1)+' (êîíòåêñòíîå ìåíþ ôîðìû)';
label4.Caption:=inttostr(scrollbar1.Position);
end;

procedure TForm1.ScrollBar1Change(Sender: TObject);
var i:integer;
begin
label4.Caption:=inttostr(scrollbar1.Position);
stringgrid1.colCount:=scrollbar1.Position;
stringgrid1.Width:= stringgrid1.DefaultColWidth*(scrollbar1.Position)+15;
for i:=0 to stringgrid1.RowCount-1 do
  stringgrid1.Rows[i].Clear;
  Button1.Enabled:=false;
end;

procedure TForm1.StringGrid1DblClick(Sender: TObject);
var i,j,n,m:integer;
begin
randomize;
 n:= stringgrid1.RowCount;
 m:=stringgrid1.colCount;
 for i:=1 to n-1 do
  for  j:=1 to m do
  begin
   a[i,j]:=random(200)-100;
   form1.StringGrid1.Cells[j-1,i-1]:=inttostr(a[i,j]);
  end;
Button1.Enabled:=true;
end;

procedure TForm1.Button1Click(Sender: TObject);
var i,j,n,m:integer;
begin
 n:= stringgrid1.RowCount;
 m:=stringgrid1.colCount;
 for i:=1 to m do
  begin
   min[i]:=a[1,i];
   for j:=2 to n-1 do
    if a[j,i]<min[i] then  min[i]:=a[j,i];
   if min[i]<0 then stringgrid1.Cells[i-1,stringgrid1.RowCount-1]:=inttostr(min[i]);
  end;
 stringgrid1.SetFocus;
end;

procedure TForm1.StringGrid1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
  var x,y,i,j,k,m,n:integer;
begin
 x:=StringGrid1.DefaultColWidth;
 y:=StringGrid1.DefaultRowHeight;
 n:= stringgrid1.ColCount;
 k:=1;
   while (k<=n)and(min[k]>=0) do
   k:=k+1;
  if (key=13) and (k<=n) then
   begin
   m:=min[k];
   for j:=k+1 to n do
   if (min[j]<0)and(min[j]>m) then m:=min[j]   ;
   StringGrid1.Repaint;
   StringGrid1.Canvas.Create;
   StringGrid1.Canvas.Brush.Style:=bsClear;
   StringGrid1.Canvas.Pen.Width:=2;
   StringGrid1.Canvas.Pen.Color:=clred;
   j:=0;
    for i:=0 to stringgrid1.ColCount-1  do
   if min[i+1]=m then
   StringGrid1.Canvas.Rectangle(i*x+i,j*y+j,i*x+x+i,j*y+(y+j)*(stringgrid1.RowCount-1)+10);
   end;
end;

end.



M
THandle
Модератор: используйте подсветку кода!

PM MAIL ICQ   Вверх
JIIOTbIU
Дата 25.4.2012, 20:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 24.4.2012

Репутация: нет
Всего: нет



проект который я уже немного переделал)

Присоединённый файл ( Кол-во скачиваний: 7 )
Присоединённый файл  212.7z 188,38 Kb
PM MAIL ICQ   Вверх
northener
Дата 26.4.2012, 16:53 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1361
Регистрация: 2.9.2010

Репутация: 12
Всего: 20



Цитата(JIIOTbIU @  25.4.2012,  18:51 Найти цитируемый пост)
а дальше что то неполучается

А что дальше не получается? Вроде все работает как написано тут:

Цитата(JIIOTbIU @  25.4.2012,  18:51 Найти цитируемый пост)
Дана целочисленная матрица {Aij} i=1..n, j=1..m (n,m є (7..9)). Конкретный размер задается  контекстным меню (строки) и линейкой ScrollBar (столбцы). Внизу в дополнительной строке выводится наименьший отрицательный элемент в каждом столбце.  При нажатии клавиши Enter столбец с наибольшим таким элементом выделяется синей рамкой.
 
И вот что из нее надо сделать:
Дана целочисленная матрица {Aij} i=1..n, j=1..m (n,m є (6..10)). Конкретный размер задается  главным меню (строки) и списком ComboBox (столбцы). Внизу в дополнительной строке выводится наибольший элемент в каждом столбце. По команде контекстного меню столбец с наибольшим элементом в матрице выделяется красной рамкой. 




--------------------
Но только лошади летают вдохновенно.
Иначе лошади разбились бы мгновенно!
PM MAIL   Вверх
JIIOTbIU
Дата 26.4.2012, 16:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 24.4.2012

Репутация: нет
Всего: нет



у меня не получается переделать так чтобы операции контекстного меню из первой задачи работали теперь с помощью главного меню, список Scrollbar теперь должен стать списком Combobox и ткже функционировать. И чтобы выделение рамкой происходило теперь не с помощью клавиши Enter, а с помощью пункта контекстного меню "Выделить". Немогу вот никак переназначить функции. прочитал столько литературы и не доходит, практики нет(

Присоединённый файл ( Кол-во скачиваний: 4 )
Присоединённый файл  212.7z 188,38 Kb
PM MAIL ICQ   Вверх
northener
Дата 26.4.2012, 17:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1361
Регистрация: 2.9.2010

Репутация: 12
Всего: 20



Цитата(JIIOTbIU @  26.4.2012,  16:59 Найти цитируемый пост)
у меня не получается переделать так чтобы операции контекстного меню из первой задачи работали теперь с помощью главного меню

Банальный Copy+Paste перенесет код из одного обработчика в другой.
Цитата(JIIOTbIU @  26.4.2012,  16:59 Найти цитируемый пост)
список Scrollbar теперь должен стать списком Combobox и ткже функционировать.

Создать Combobox со стилем csDropDownList и в событии OnClick устанавливать кол-во столбцов в гриде используя ComboBox.ItemIndex.
Цитата(JIIOTbIU @  26.4.2012,  16:59 Найти цитируемый пост)
И чтобы выделение рамкой происходило теперь не с помощью клавиши Enter, а с помощью пункта контекстного меню "Выделить".

Выделение должно быть как в первом примере "однократным" или выделение должно показываться постоянно?


--------------------
Но только лошади летают вдохновенно.
Иначе лошади разбились бы мгновенно!
PM MAIL   Вверх
JIIOTbIU
Дата 26.4.2012, 17:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 24.4.2012

Репутация: нет
Всего: нет



Выделение должно быть однократным, также, но теперь через контекстное меню с помощью кнопки выделить)
сейчас попробую ваш совет по выше указанному)

Цитата

и в событии OnClick устанавливать кол-во столбцов в гриде используя ComboBox.ItemIndex.

это просто вручную прописать в OnClick?) а из скроллбара перенести функцию в ComboBox?)

Это сообщение отредактировал(а) JIIOTbIU - 26.4.2012, 17:38
PM MAIL ICQ   Вверх
JIIOTbIU
Дата 26.4.2012, 18:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 24.4.2012

Репутация: нет
Всего: нет



делаю через ItemIndex, но показывает ошибку в самом конце в операторе end.    Либо что то незавершено либо я что то не так сделал)
Код

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    StringGrid1: TStringGrid;
    PopupMenu1: TPopupMenu;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    ScrollBar1: TScrollBar;
    Label4: TLabel;
    Button1: TButton;
    MainMenu1: TMainMenu;
    N1: TMenuItem;
    N72: TMenuItem;
    N82: TMenuItem;
    N92: TMenuItem;
    ComboBox1: TComboBox;
    N101: TMenuItem;
    N102: TMenuItem;
    procedure N71Click(Sender: TObject);
    procedure N81Click(Sender: TObject);
    procedure N91Click(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure ScrollBar1Change(Sender: TObject);
    procedure StringGrid1DblClick(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure StringGrid1KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure N72Click(Sender: TObject);
    procedure N82Click(Sender: TObject);
    procedure N92Click(Sender: TObject);
    procedure N101Click(Sender: TObject);
    procedure N102Click(Sender: TObject);
    procedure ComboBox1Change(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  a:array [1..9,1..9]of integer;
  min:array [1..9] of integer;
  t:boolean;
implementation

{$R *.dfm}

procedure TForm1.N71Click(Sender: TObject);
 var i:integer;
begin
  stringgrid1.RowCount:=8;
  stringgrid1.Height:= 9*stringgrid1.DefaultRowHeight-10;
  label2.Caption:='×èñëî ñòðîê = '+inttostr(stringgrid1.RowCount-1)+' (ãëàâíîå ìåíþ ôîðìû)';
  for i:=0 to stringgrid1.RowCount-1 do
  stringgrid1.Rows[i].Clear;
  Button1.Enabled:=false;
end;

procedure TForm1.N81Click(Sender: TObject);
var i:integer;
begin
 stringgrid1.RowCount:=9;
 stringgrid1.Height:= 10* stringgrid1.DefaultRowHeight-10;
 label2.Caption:='×èñëî ñòðîê = '+inttostr(stringgrid1.RowCount-1)+' (ãëàâíîå ìåíþ ôîðìû)';
 for i:=0 to stringgrid1.RowCount-1 do
  stringgrid1.Rows[i].Clear;
  Button1.Enabled:=false;
end;

procedure TForm1.N91Click(Sender: TObject);
var i:integer;
begin
stringgrid1.RowCount:=10;
stringgrid1.Height:= 11* stringgrid1.DefaultRowHeight-10;
label2.Caption:='×èñëî ñòðîê = '+inttostr(stringgrid1.RowCount-1)+' (ãëàâíîå ìåíþ ôîðìû)';
for i:=0 to stringgrid1.RowCount-1 do
  stringgrid1.Rows[i].Clear;
  Button1.Enabled:=false;
end;

procedure TForm1.FormShow(Sender: TObject);
var i:integer;
begin
label2.Caption:='×èñëî ñòðîê = '+inttostr(stringgrid1.RowCount-1)+' (ãëàâíîå ìåíþ ôîðìû)';
label4.Caption:=inttostr(scrollbar1.Position);
end;

procedure TForm1.ScrollBar1Change(Sender: TObject);
var i:integer;
begin
label4.Caption:=inttostr(scrollbar1.Position);
stringgrid1.colCount:=scrollbar1.Position;
stringgrid1.Width:= stringgrid1.DefaultColWidth*(scrollbar1.Position)+15;
for i:=0 to stringgrid1.RowCount-1 do
  stringgrid1.Rows[i].Clear;
  Button1.Enabled:=false;
end;

procedure TForm1.StringGrid1DblClick(Sender: TObject);
var i,j,n,m:integer;
begin
randomize;
 n:= stringgrid1.RowCount;
 m:=stringgrid1.colCount;
 for i:=1 to n-1 do
  for  j:=1 to m do
  begin
   a[i,j]:=random(200)-100;
   form1.StringGrid1.Cells[j-1,i-1]:=inttostr(a[i,j]);
  end;
Button1.Enabled:=true;
end;

procedure TForm1.Button1Click(Sender: TObject);
var i,j,n,m:integer;
begin
 n:= stringgrid1.RowCount;
 m:=stringgrid1.colCount;
 for i:=1 to m do
  begin
   min[i]:=a[1,i];
   for j:=2 to n-1 do
    if a[j,i]<min[i] then  min[i]:=a[j,i];
   if min[i]<0 then stringgrid1.Cells[i-1,stringgrid1.RowCount-1]:=inttostr(min[i]);
  end;
 stringgrid1.SetFocus;
end;

procedure TForm1.StringGrid1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
  var x,y,i,j,k,m,n:integer;
begin
 x:=StringGrid1.DefaultColWidth;
 y:=StringGrid1.DefaultRowHeight;
 n:= stringgrid1.ColCount;
 k:=1;
   while (k<=n)and(min[k]>=0) do
   k:=k+1;
  if (key=13) and (k<=n) then
   begin
   m:=min[k];
   for j:=k+1 to n do
   if (min[j]<0)and(min[j]>m) then m:=min[j]   ;
   StringGrid1.Repaint;
   StringGrid1.Canvas.Create;
   StringGrid1.Canvas.Brush.Style:=bsClear;
   StringGrid1.Canvas.Pen.Width:=2;
   StringGrid1.Canvas.Pen.Color:=clred;
   j:=0;
    for i:=0 to stringgrid1.ColCount-1  do
   if min[i+1]=m then
   StringGrid1.Canvas.Rectangle(i*x+i,j*y+j,i*x+x+i,j*y+(y+j)*(stringgrid1.RowCount-1)+10);
   end;
end;

procedure TForm1.N72Click(Sender: TObject);
var i:integer;
begin
  stringgrid1.RowCount:=7;
  stringgrid1.Height:= 9*stringgrid1.DefaultRowHeight-10;
  label2.Caption:='×èñëî ñòðîê = '+inttostr(stringgrid1.RowCount-1)+' (ãëàâíîå ìåíþ ôîðìû)';
  for i:=0 to stringgrid1.RowCount-1 do
  stringgrid1.Rows[i].Clear;
  Button1.Enabled:=false;
end;

procedure TForm1.N82Click(Sender: TObject);
var i:integer;
begin
 stringgrid1.RowCount:=8;
 stringgrid1.Height:= 10* stringgrid1.DefaultRowHeight-10;
 label2.Caption:='×èñëî ñòðîê = '+inttostr(stringgrid1.RowCount-1)+' (ãëàâíîå ìåíþ ôîðìû)';
 for i:=0 to stringgrid1.RowCount-1 do
  stringgrid1.Rows[i].Clear;
  Button1.Enabled:=false;
end;

procedure TForm1.N92Click(Sender: TObject);
var i:integer;
begin
stringgrid1.RowCount:=9;
stringgrid1.Height:= 11* stringgrid1.DefaultRowHeight-10;
label2.Caption:='×èñëî ñòðîê = '+inttostr(stringgrid1.RowCount-1)+' (ãëàâíîå ìåíþ ôîðìû)';
for i:=0 to stringgrid1.RowCount-1 do
  stringgrid1.Rows[i].Clear;
  Button1.Enabled:=false;
end;

procedure TForm1.N101Click(Sender: TObject);
var i:integer;
begin
stringgrid1.RowCount:=10;
stringgrid1.Height:= 11* stringgrid1.DefaultRowHeight-10;
label2.Caption:='×èñëî ñòðîê = '+inttostr(stringgrid1.RowCount-1)+' (ãëàâíîå ìåíþ ôîðìû)';
for i:=0 to stringgrid1.RowCount-1 do
  stringgrid1.Rows[i].Clear;
  Button1.Enabled:=false;
end;

procedure TForm1.N102Click(Sender: TObject);
var i:integer;
begin
stringgrid1.RowCount:=11;
stringgrid1.Height:= 11* stringgrid1.DefaultRowHeight-10;
label2.Caption:='×èñëî ñòðîê = '+inttostr(stringgrid1.RowCount-1)+' (ãëàâíîå ìåíþ ôîðìû)';
for i:=0 to stringgrid1.RowCount-1 do
  stringgrid1.Rows[i].Clear;
  Button1.Enabled:=false;
end;

procedure TForm1.ComboBox1Change(Sender: TObject);
begin
  Case Combobox1.ItemIndex of
    0:  begin
          StringGrid1.RowCount:=7;
        end;

    1:  begin
          StringGrid1.RowCount:=8;
        end;

    2:  begin
          StringGrid1.RowCount:=9;
        end;

    3:  begin
          StringGrid1.RowCount:=10;
        end;

    4:  begin
          StringGrid1.RowCount:=11;
        end;

    5:  begin
          StringGrid1.RowCount:=12;
        end;
        end.


PM MAIL ICQ   Вверх
northener
Дата 26.4.2012, 22:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1361
Регистрация: 2.9.2010

Репутация: 12
Всего: 20



Цитата(JIIOTbIU @  26.4.2012,  18:21 Найти цитируемый пост)
Либо что то незавершено

Код

procedure TForm1.ComboBox1Change(Sender: TObject);
begin
  Case Combobox1.ItemIndex of
    0:  begin
          StringGrid1.RowCount:=7;
        end;
    1:  begin
          StringGrid1.RowCount:=8;
        end;
    2:  begin
          StringGrid1.RowCount:=9;
        end;
    3:  begin
          StringGrid1.RowCount:=10;
        end;
    4:  begin
          StringGrid1.RowCount:=11;
        end;
    5:  begin
          StringGrid1.RowCount:=12;
        end;
  end;   //of case
end;  //of ComboBox1Change

end.  //of unit


Это сообщение отредактировал(а) northener - 26.4.2012, 22:44


--------------------
Но только лошади летают вдохновенно.
Иначе лошади разбились бы мгновенно!
PM MAIL   Вверх
JIIOTbIU
Дата 27.4.2012, 08:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 24.4.2012

Репутация: нет
Всего: нет



все спасибо огромное, до меня дошло сделал и рамку через контекстное меню))))
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0615 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.