C++Builder
Начало
Форум
Помощь
Войти
Регистрация
C++Builder
>
Forum
>
Вопросы программирования
>
Общие вопросы программирования в C++Builder
>
PopupMenu и PageControl
Страниц: [
1
]
Вниз
Печать
Автор
Тема: PopupMenu и PageControl (Прочитано 5692 раз)
2fasti
Участник
Сказали спасибо: +0/-0
Offline
Сообщений: 6
PopupMenu и PageControl
«
:
17 Январь 2009, 16:13:06 »
Здравствуйте. Я написал (или точнее писал, но не дописал) блокнот с поддержкой табов (нечто типа notepad++) и столкнулся с проблемой, когда необходимо, чтобы меню PopupMenu вызывалось только над самими вкладками ("шапками") табов и при этом щёлчёк над вкладкой делал её активной (точно так же как в notepad++). Очень большая просьба помочь советом.
UPD: вот исходничек примера с табами.
http://narod.ru/disk/5034343000/notepad_tabs.zip.html (7кб)
«
Последнее редактирование: 17 Январь 2009, 16:22:26 от 2fasti
»
Записан
DanUnited
Гость
Re: PopupMenu и PageControl
«
Ответ #1 :
17 Январь 2009, 17:07:39 »
Цитировать
блокнот с поддержкой табов (нечто типа notepad++)
а вот на этом поподробней....
Так что там за блокнотик и что он умеет??
Цитировать
огда необходимо, чтобы меню PopupMenu вызывалось только над самими вкладками ("шапками") табов
отчерти математически координаты(квадратика), где у тебя находится табы, а в событии onKeyDown PageControl пропиши что-нибудь:
TPoint cPt;
GetCursorPos(&cPt);
if(//тут координаты квадратика,т.е. если курсор находится в этом квадратике..)
{
if(Button==mbRight)
{
//-------------------------------
Tab1->PopupMenu->Popup(int(cPt.x),int(cPt.y));
}
}
Записан
2fasti
Участник
Сказали спасибо: +0/-0
Offline
Сообщений: 6
Re: PopupMenu и PageControl
«
Ответ #2 :
17 Январь 2009, 18:35:21 »
вот исходники http://narod.ru/disk/5036914000/NotePad--.zip.html
багов невпроворот. А это курсовая работа, сдать нужно 22 Jan =)
Я пока не пробывал, но тут проблема. Дело в том, что закладка (шапка её) размера любого может быть, зависит от того, что на ней написано. =(
Записан
DanUnited
Гость
Re: PopupMenu и PageControl
«
Ответ #3 :
17 Январь 2009, 18:44:19 »
Цитировать
Я пока не пробывал, но тут проблема. Дело в том, что закладка (шапка её) размера любого может быть, зависит от того, что на ней написано. =(
ну это вроде легко тоже высчитывается...
TPageControl *Pag = static_cast
(Control);
TCanvas *Can = Pag->Canvas;
Can->TextHeight(Pag->Pages[0]->Caption);//это высота первой закладки, например....
Can->TextWidth(Pag->Pages[0]->Caption);//это то же. но с высотой..
Записан
DanUnited
Гость
Re: PopupMenu и PageControl
«
Ответ #4 :
17 Январь 2009, 18:49:35 »
Цитировать
вот исходники http://narod.ru/disk/5036914000/NotePad--.zip.html
круто.... замудрил конечно....
для курсовой работы слабовастенький очень,так скажем, редакторик....
У тебя там в курсовой разрешается сторонние компоненты использовать, а то ....
Записан
2fasti
Участник
Сказали спасибо: +0/-0
Offline
Сообщений: 6
Re: PopupMenu и PageControl
«
Ответ #5 :
17 Январь 2009, 18:55:13 »
Да, курсовик конечно не мегосуперпупер, но я по специальности и не программист)
Записан
DanUnited
Гость
Re: PopupMenu и PageControl
«
Ответ #6 :
17 Январь 2009, 19:03:30 »
Цитировать
Да, курсовик конечно не мегосуперпупер, но я по специальности и не программист)
ну я тоже по специальности не программист, да и ваще.... тут меньше половины на форума и того меньше по специальности "программист", но как говорит Ленин Ильич: "Учиться, Учиться и ещё раз учиться". Если хочешь знать, я просто изучаю C++Builder уже как год и всё это время пишу только текстовые редакторы, поэтому и заинтересовался...
Записан
2fasti
Участник
Сказали спасибо: +0/-0
Offline
Сообщений: 6
Re: PopupMenu и PageControl
«
Ответ #7 :
17 Январь 2009, 19:08:08 »
Что-то не выходит у меня. Вот пример кода для notepad_tabs (выкладывал выше)
Добавил PopupMenu1, с одним пунктом - закрыть вкладку
Код:
int i = PageControl1->ActivePageIndex;
if (i > -1) {
delete PageControl1->Pages[i]; }
код для PageControl1MouseDown
Код:
void __fastcall TForm1::PageControl1MouseDown(TObject *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y)
{
TPoint cPt;
GetCursorPos(&cPt);
if(425,25)
{
if(Button==mbRight)
{
//-------------------------------
PageControl1->PopupMenu->Popup(int(cPt.x),int(cPt.y));
}
}
}
и ничего не изменилось. Можешь на том примере показать как работает. Пожалуйста.
Записан
DanUnited
Гость
Re: PopupMenu и PageControl
«
Ответ #8 :
17 Январь 2009, 19:13:33 »
Цитировать
if(425,25)
так ни вкоем случае нельзя писать, более того, это даже не два числа, а одно, с двумя знаками после запятой и получается в итогк бред..
Попробуй тк:(тебеж надо координаты курсора)
if((int(cPt.x)>425)&&(int(cPt.x)425)&&(int(cPt.y) {
}
это к примеру.... если координата x и y...
ну сам разберёшься.... тут ты должен 4 цифры подставлять... свои подставь
Записан
2fasti
Участник
Сказали спасибо: +0/-0
Offline
Сообщений: 6
Re: PopupMenu и PageControl
«
Ответ #9 :
17 Январь 2009, 19:35:38 »
Делаю так
Код:
{
TPoint cPt;
GetCursorPos(&cPt);
if((int(cPt.x)>0)&&(int(cPt.x)0)&&(int(cPt.y) {
if(Button==mbRight)
{
//-------------------------------
PageControl1->PopupMenu->Popup(int(cPt.x),int(cPt.y));
}
}
}
Попап всплывать опять по всей форме, в свойствах AutoPopup поставил в false - перестал вообще появляться
Записан
DanUnited
Гость
Re: PopupMenu и PageControl
«
Ответ #10 :
18 Январь 2009, 12:47:18 »
Вот, держи тоже поэкспериментировал и в итоге пришёл к одной х..., что мы н емного перемудрили.
Вот работающий код:
Код:
TPoint cPt;
GetCursorPos(&cPt);
if(Button==mbRight)
{
//-------------------------------
PageControl1->PopupMenu = PopupMenu1;
PageControl1->PopupMenu->Popup(int(cPt.x),int(cPt.y));
}
PageControl1->PopupMenu = PopupMenu2;
Гдe PopupMenu2 - пустой попьюп.
Всё работает, когда вы в квадратике, где за головки. Тут снова минус: возникает, над какой бы шапкой вы не были..
-------------
Да...и ещё: оставте свойство PopupMenu пустым у компонента..
Записан
2fasti
Участник
Сказали спасибо: +0/-0
Offline
Сообщений: 6
Re: PopupMenu и PageControl
«
Ответ #11 :
18 Январь 2009, 14:55:16 »
О, спасибо большое То что нужно
Записан
Страниц: [
1
]
Вверх
Печать
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Вопросы программирования
-----------------------------
=> Общие вопросы программирования в C++Builder
=> Программирование с FMX
=> Работа с базами данных в C++Builder
=> Windows API
=> Технологии COM/DCOM, ActiveX
=> Аспекты и идеология профессиональной разработки ПО
=> Компьютерное железо и системное администрирование
=> студенческий городок
-----------------------------
Обсуждение материалов на сайте
-----------------------------
=> Обсуждений статей на сайте
=> Обсуждение материалов из файлового архива
=> Компоненты сторонних разработчиков к С++Builder
-----------------------------
Работа сайта и новости
-----------------------------
=> Ищу/предлагаю работу
=> Новости из мира программирования
=> Новости - события календаря
=> Голосования
=> Компьютерный юмор и приколы
=> Работа сайта
=> Флейм
-----------------------------
FAQ - частозадаваемые вопросы/ответы
-----------------------------
=> FAQ, общие вопросы, посвящённые C++Builder
=> FAQ, вопросы по базам данных
=> FAQ, вопросы по компонентам
Загружается...