C++Builder
  Начало   Форум   Помощь Войти Регистрация  
Страниц: [1]   Вниз
  Печать  
Автор Тема: PopupMenu и PageControl  (Прочитано 5691 раз)
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


« Ответ #11 : 18 Январь 2009, 14:55:16 »

О, спасибо большое  То что нужно   
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  




....

Powered by SMF 1.1.21 | SMF © 2025, Simple Machines
Страница сгенерирована за 0.04 секунд. Запросов: 21.