Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

PopUpMenu в StringGrid [D6, Win2k, WinXP]


SbtON ©   (2004-12-23 12:01:00) 

Подскажите, люди доюрые.
Есть StringGrid, нужно к нему привязать PopUp меню, но(!!!) чтобы скажем первый столбец каждой строки передавалася в виде параметра в меню и выполнялись функции однотипные, но с разным результатом.
То есть готов StringGrid и PopupMenu, наводим мышу на строку, кликаем правую кнопку и открывается меню, для всех одинаковое, но благодаря параметру результат разный.


asafr   (2004-12-24 17:33:00) [1]

private
  ACol: integer;
..................
..................
//Определяешь колонку (ACol)
procedure TForm1.StringGrid1MouseDown(Sender: TObject;
 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
 var
 ARow:integer;
begin
StringGrid1.MouseToCell(X, Y, ACol, ARoe);
end;

//А это то, что требуется:
procedure TForm1.PopupMenu1Popup(Sender: TObject);
var
NewItem:TMenuItem;
begin
PopupMenu1.Items.Clear;
NewItem:=TMenuItem.Create(PopupMenu1);
PopupMenu1.Items.Add(NewItem);
NewItem.Caption :=StringGrid1.Cells[ACol,0];
NewItem.OnClick = PopupItemsClick; //Это процедура обработки клика.
end;


SbtON   (2004-12-24 13:05:00) [2]

Благодарю за ответы!
Сейчас я уточню вопрос..
В существующем StrinGrid кликаю в любой колонке на любой строке, но при этом для выполнения функции в ПопапМеню нужно получить содержимое первой ячейки - это и будет входным параметром для выполнения функции. Если не трудно, подскажите, пожалуйста..


ssk   (2004-12-23 16:06:00) [3]

1. присваиваешь ПопапМеню СтрингГриду

2. потом вот это

var
 ACol, ARow: integer;

implementation

{$R *.dfm}

// пункт PopupMenu называется "Calc"
procedure TForm1.Calc1Click(Sender: TObject);
begin
 ShowMessage(StringGrid1.Cells[ACol, ARow]);
end;

// здесь вычисляем ячейку
procedure TForm1.StringGrid1MouseDown(Sender: TObject;
 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
 StringGrid1.MouseToCell(X, Y, ACol, ARow);
end;


begin...end   (2004-12-23 16:03:00) [4]

> SbtON   (23.12.04 12:01)

Вопрос не очень понятно сформулирован. Вам надо при показе PopupMenu узнавать, на какой колонке кликнули?

Тогда, возможно, так:

procedure TMyForm.MyStringGridContextPopup(Sender: TObject; MousePos: Point; var Handled: Boolean);
var
 Col, Row: Integer;
begin
 (Sender as TStringGrid).MouseToCell(MousePos.X, MousePos.Y, Col, Row);
 // Теперь в Col содержится номер столбца
end.


Правда, этот обработчик будет вызываться и в том случае, если PopupMenu будет вызвано не мышью, а с клавиатуры. Тогда, может быть, лучше не назначать PopupMenu StringGrid'у, а по событию OnMouseDown показывать его самостоятельно (TPopupMenu.Popup)? Координаты мыши передаются в OnMouseDown как параметры, их можно преобразовать в номер столбца/ряда с помощью TStringGrid.MouseToCell.


SbtON   (2004-12-23 15:42:00) [5]

Ну что же Вы? :( Подкиньте идейку, кроме той, что книжки читать надо.. :)


Наверх

Титульная страница Поиск, карта сайта Написать письмо