Страница 1 из 1

PopUp меню, получить адрес объекта

Добавлено: 16 сен 2008, 01:14
&-rey
Popup меню, привязано к нескольким объектам (копировать вставить) У каждого объекта есть своя функция копирования или вставки.
По логике я думал что если бы знать объект на котором произошел popup то можно внаглую выполнить функцию связанную с этим объектом.

Поиском в инете нашел вот это

Код: Выделить всё

Label := PopupString.PopupComponent.Name;
выводит имя объкта на котором всплыло меню, но имя в ansiString, т.е. это не указатель на обьект.
Порылся в этом классе PopupComponent но ничего не нарыл.

Прошу совета как поступить, может я хочу невозможного ?

Re: PopUp меню, получить адрес объекта

Добавлено: 16 сен 2008, 12:18
Игорь Акопян
property PopupComponent: TComponent read FPopupComponent write FPopupComponent

никакое не строка, самый что ни наесть компонентный компонент ;)
Его только осталось привести к нужному типу и вперёд! :)

Re: PopUp меню, получить адрес объекта

Добавлено: 16 сен 2008, 20:59
&-rey
точно... куда я смотрел. Что то вчера не хотело работать, а оказалось все так просто. Спасибо.
Но возникла новая преграда.
При формировании функции обработки события onKeyDown по которой у меня обработка Cntrl + C и Cntrl + V
её прототип выглядит как:

Код: Выделить всё

void __fastcall TMainForm::TStringGridKeyDown(TObject *Sender, WORD &Key, TShiftState Shift);
проблему создает TShiftState
он описан как

Код: Выделить всё

#pragma option push -b-
enum Classes__1 { ssShift, ssAlt, ssCtrl, ssLeft, ssRight, ssMiddle, ssDouble };
#pragma option pop
typedef Set<Classes__1, ssShift, ssDouble>  TShiftState;
но никак не могу подсунуть ему ssCtrl;
на попытку сделать так

Код: Выделить всё

TShiftState Shift = ssCtrl;

[BCC32 Error] Main.cpp(854): E2034 Cannot convert 'Classes__1' to 'TShiftState'

Re: PopUp меню, получить адрес объекта

Добавлено: 17 сен 2008, 09:35
Игорь Акопян
&quot писал(а):не могу подсунуть ему ssCtr
если речь про проверку нажатия, то в Дельфи делается так
[syntax='Delphi']
procedure TfrMain.StringGrid1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
if ssCtrl in Shift then DoSomething;
end;
[/syntax]
т.е. проверяется константа на принадлежность множеству

Re: PopUp меню, получить адрес объекта

Добавлено: 17 сен 2008, 11:06
&-rey
нет, вопрос не в проверке, а в том чтобы вызвать эту функцию по соттветствующему пункту меню popup.
соответственно ей нужно передать в качестве параметров нажатый Сntrl и 'C'
с 'C' все понятно, а вот с Cntrl проблема.

Re: PopUp меню, получить адрес объекта

Добавлено: 17 сен 2008, 11:58
BBB
Если я правильно понял, то TShiftState - это тип, созданный (описанный) на основе шаблона Set:

typedef Set<Classes__1, ssShift, ssDouble> TShiftState;

Т.е. надо посмотреть, как реализован Set, в частности, какие есть у него конструкторы. И соответствующим уже образом создавать экземпляр TShiftState. Примерно так:

TShiftState Shift (....параметры конструктора....);

Re: PopUp меню, получить адрес объекта

Добавлено: 17 сен 2008, 12:58
&-rey
Нашел :) Пол дня поиска увенчались успехом.

Код: Выделить всё

ptr->OnKeyDown(ptr, Key, TShiftState() << ssCtrl);
Так это выглядит на С++.

Спасибо за поддержку.

Re: PopUp меню, получить адрес объекта

Добавлено: 13 окт 2008, 19:04
sasha3050
Пожалуйста помогите очень нужно!!!!!!!!!Написать программу на Paskal, которая вычисляет среднюю длину слов в файле, который содержит текст.В данном случае будет считатьтся любая строка символов, которая начинается и заканчивается одним с следующих елеметов: пробел, запятая, точка, начало строки и конец строки.В программе должна быть обозначена функция, которая получает в качестве аргумента поток ввода с файла.