Форум: "Начинающим";
Текущий архив: 2008.12.07;
Скачать: [xml.tar.bz2];
ВнизВыделение ячейкив DrawGrid Найти похожие ветки
← →
Андрей (2008-10-17 13:05) [0]Здравствуйте! Помогите, пожалуйста, решить небольшую проблему.
Есть DrawGrid в который помещаются картинки из внешних bmp. Как обработать первый клик на ячейке, чтобы картинка только в ней выделилась (подсветилась, сменила фон, нарисовалась рамка, ...), а по второму клику (не обязательно в эту же ячейку) выделение убралось?
При ресайзе формы должно все сохраняться как перед ресайзом.
procedure Tfrm.DrawGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
var
bm : TBitmap;
begin
if (ARow mod 2) = 0 then DrawGrid1.Tag := 0 // четная строка
else DrawGrid1.Tag := 1; // нечетная строка
with Sender as TDrawGrid, Canvas do begin
Brush.Color := clGray;
if (ACol mod 2) = 0 then // четная колонка
if DrawGrid1.Tag = 0
then Brush.Color := clScrollBar
else Brush.Color := clGray
else // нечетная колонка
if DrawGrid1.Tag = 0
then Brush.Color := clGray
else Brush.Color := clScrollBar;
FillRect(CellRect(ACol,ARow));
bm := TBitmap.Create;
try
// здесь идет проверка, из какого файла картинку грузить в ячейку
// ...
bm.LoadFromFile("имя файла bmp");
with bm do begin
Transparent := True;
TransParentColor := clWhite;
TransparentMode := tmAuto;
StretchDraw(CellRect(ACol,ARow),bm);
end;
finally
bm.Free;
end;
end;
end;
procedure TfrmGame.DrawGrid1SelectCell(Sender: TObject; ACol, ARow: Integer; var CanSelect: Boolean);
begin
// if первый раз кликнули на ячейку then
// tmpTag - глобальная переменная
tmpTag := 1;
// else
tmpTag := 0;
end;
← →
{RASkov} © (2008-10-17 13:19) [1]> if (ARow mod 2) = 0 then DrawGrid1.Tag := 0 // четная
> строка else DrawGrid1.Tag := 1; // нечетная
> строка
TComponent(Sender).Tag:=Ord(Odd(ARow));
> а по второму клику (не обязательно в эту же ячейку) выделение убралось
Что это значит? Т.е. нужно сделать так, что ни одна ячейка не выделена была?
← →
Андрей (2008-10-17 13:23) [2]
> Что это значит? Т.е. нужно сделать так, что ни одна ячейка
> не выделена была?
да (конечно, все, что в них находится должно остаться :) )
← →
{RASkov} © (2008-10-20 12:38) [3]Может что нибудь нечто так:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Grids, StdCtrls;
type
TForm1 = class(TForm)
DrawGrid1: TDrawGrid;
procedure DrawGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
procedure DrawGrid1SelectCell(Sender: TObject; ACol, ARow: Integer;
var CanSelect: Boolean);
procedure FormCreate(Sender: TObject);
private { Private declarations }
public { Public declarations }
end;
var Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
DrawGrid1.Tag:=-1;
end;
procedure TForm1.DrawGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState);
begin
if gdFixed in State then Exit;
with TDrawGrid(Sender) do begin
if (ACol=LoWord(Tag)) and (ARow=HiWord(Tag)) then Canvas.Brush.Color:=clRed
else Canvas.Brush.Color:=Color;
Canvas.FillRect(Rect);
end;
end;
procedure TForm1.DrawGrid1SelectCell(Sender: TObject; ACol, ARow: Integer; var CanSelect: Boolean);
begin
with TDrawGrid(Sender) do begin
if (ACol<>LoWord(Tag)) or (ARow<>HiWord(Tag)) then Tag:=MakeLong(ACol, ARow) else
if Tag=-1 then Tag:=MakeLong(ACol, ARow) else Tag:=-1;
end;
end;
end.
А сколько ячеек/колонок в твоем гриде? Но думаю, шаманство с тэгом с "запихиванием" в него двух значений - прокатит.... :)
← →
Андрей (2008-10-22 12:17) [4]сделал все гораздо проще:
if (gdSelected in State) and (DrawGrid1.Tag=1)
then FrameRect(CellRect(vFromCol,vFromRow));
← →
brother © (2008-10-22 12:19) [5]> сделал все гораздо проще:
> if (gdSelected in State) and (DrawGrid1.Tag=1)
> then FrameRect(CellRect(vFromCol,vFromRow));
молодец! Садись, 5!
← →
Андрей (2008-10-24 18:02) [6]Сделал, кстати, по совету из "Королевства Делфи", пока сайт "Мастеров" не грузился в течении пары дней.
Все равно спасибо всем, кто откликнулся.
← →
Leonid Troyanovsky © (2008-10-24 18:14) [7]
> Андрей (24.10.08 18:02) [6]
> Все равно спасибо всем, кто откликнулся.
Ну, раз все равно, то вот тебе еще один совет в качестве бонуса:
никогда не прячь фокус.
--
Regards, LVT.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2008.12.07;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.005 c