|
#1
|
||||
|
||||
Одинаковые числа
Добрый день! Подскажите пожалуйста как сделать так, чтобы в заполненном стринг гриде цифрами, я мог выбрать два любых числа и если они одинаковые, то они удалялись бы в тот момент, когда я выбрал второе число. Цель: по нажатию на какие-то ячейки в таблице, удалять два числа, находящиеся в выбранных ячейках, если они равны друг другу. Или любые числа. Как это можно сделать? Заранее Спасибо за помощь.
|
#2
|
|||
|
|||
Машина состояний.
У тебя следующие состояния: 1. Не выбрано ни одно число. 2. Выбрано 1е число 3. Выбрано второе число. Делаешь где-то переменную, инициализируя ее значением 1. При первом щелчке меняешь ее на 2. При втором щелчке а) проверяешь одинаковые числа или нет и если одинаковые - удаляешь; б) сбрасываешь выделение и меняешь переменную состояния обратно на 1. |
#3
|
||||
|
||||
lmikle, не могли бы помочь с кодом? А то слишком серьезно для меня объяснили). Я тут пробовал так:
Код:
procedure TForm1.SG1Click(Sender: TObject); var OldVal: string; OldX, OldY: integer; begin OldVal:=''; if (OldVal <> '') and (OldVal = SG1.Cells[OldX,OldY]) then begin OldVal:=SG1.Cells[OldX,OldY]; end; end; |
#4
|
|||
|
|||
Да уж куда проще-то???
Код:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Grids; type TForm1 = class(TForm) StringGrid1: TStringGrid; procedure StringGrid1Click(Sender: TObject); procedure FormCreate(Sender: TObject); private { Private declarations } FState : Integer; FSel : TPoint; public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.StringGrid1Click(Sender: TObject); begin Case FState Of 1 : // No selected Begin FSel.X := StringGrid1.Col; FSel.Y := StringGrid1.Row; FState := 2; Exit; End; 2 : // 1 selected Begin If StringGrid1.Cells[StringGrid1.Col,StringGrid1.Row] = StringGrid1.Cells[FSel.X,FSel.Y] Then Begin StringGrid1.Cells[StringGrid1.Col,StringGrid1.Row] := ''; StringGrid1.Cells[FSel.X,FSel.Y] := ''; End; FState := 1; Exit; End; End; end; procedure TForm1.FormCreate(Sender: TObject); begin FState := 1; end; end. |
#5
|
||||
|
||||
lmikle, спасибо тебе дружище!!!)))) очень помог. Красавчик!)) Спасибо
|