![]() |
|
|
#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, спасибо тебе дружище!!!)))) очень помог. Красавчик!)) Спасибо
|