Форум: "Основная";
Текущий архив: 2005.01.16;
Скачать: [xml.tar.bz2];
ВнизPopUpMenu в StringGrid Найти похожие ветки
← →
SbtON (2004-12-23 12:01) [0]Подскажите, люди доюрые.
Есть StringGrid, нужно к нему привязать PopUp меню, но(!!!) чтобы скажем первый столбец каждой строки передавалася в виде параметра в меню и выполнялись функции однотипные, но с разным результатом.
То есть готов StringGrid и PopupMenu, наводим мышу на строку, кликаем правую кнопку и открывается меню, для всех одинаковое, но благодаря параметру результат разный.
← →
SbtON (2004-12-23 15:42) [1]Ну что же Вы? :( Подкиньте идейку, кроме той, что книжки читать надо.. :)
← →
begin...end © (2004-12-23 16:03) [2]> 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.
← →
ssk © (2004-12-23 16:06) [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;
← →
SbtON (2004-12-24 13:05) [4]Благодарю за ответы!
Сейчас я уточню вопрос..
В существующем StrinGrid кликаю в любой колонке на любой строке, но при этом для выполнения функции в ПопапМеню нужно получить содержимое первой ячейки - это и будет входным параметром для выполнения функции. Если не трудно, подскажите, пожалуйста..
← →
asafr © (2004-12-24 17:33) [5]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;
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2005.01.16;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.035 c