![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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]Ну что же Вы? :( Подкиньте идейку, кроме той, что книжки читать надо.. :)