Страница 1 из 1
PopUp меню, получить адрес объекта
Добавлено: 16 сен 2008, 01:14
&-rey
Popup меню, привязано к нескольким объектам (копировать вставить) У каждого объекта есть своя функция копирования или вставки.
По логике я думал что если бы знать объект на котором произошел popup то можно внаглую выполнить функцию связанную с этим объектом.
Поиском в инете нашел вот это
выводит имя объкта на котором всплыло меню, но имя в 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;
на попытку сделать так
[BCC32 Error] Main.cpp(854): E2034 Cannot convert 'Classes__1' to 'TShiftState'
Re: PopUp меню, получить адрес объекта
Добавлено: 17 сен 2008, 09:35
Игорь Акопян
" писал(а):не могу подсунуть ему 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, которая вычисляет среднюю длину слов в файле, который содержит текст.В данном случае будет считатьтся любая строка символов, которая начинается и заканчивается одним с следующих елеметов: пробел, запятая, точка, начало строки и конец строки.В программе должна быть обозначена функция, которая получает в качестве аргумента поток ввода с файла.