Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.01.16;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.024 c
14-1103690463
КаПиБаРа
2004-12-22 07:41
2005.01.16
Об информации


9-1095652133
Fynjy1984
2004-09-20 07:48
2005.01.16
OpenGL - координаты


14-1103770217
Думкин
2004-12-23 05:50
2005.01.16
С днем рождения! 23 декабря


14-1103810851
inic
2004-12-23 17:07
2005.01.16
Брутальный картридж :))


11-1084974886
Terminus
2004-05-19 17:54
2005.01.16
KOLTabControl это еще не PageControl :). Есть вопрос...