WAYFARER писал(а):Ага, перетащил Ваш код к себе в проект как альтернативный вариант закрытия вкладочек - не работает. все происходит именно так как написал kuzmich92
Gtk под win, ну это решать каждому. Вот так же можно использовать и Qt, но для винды надо будет таскать DLL 12 метров

…. Опять же дело вкуса.
Это на лицо, ошибка как раз в обработке вот этого куска кода:- Код: Выделить всё
procedure TForm1.PageControl1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var SelectPoint:TPoint;
begin
//Смысл в том, что хотим выделить таб, при нажатии на нем правой клавишей мыши (вызов меню)
SelectPoint.x:=X;
SelectPoint.y:=Y;
PageControl1.ActivePageIndex:=PageControl1.TabIndexAtClientPos(SelectPoint);
end;
Именно он и делает при нажатии ПКМ, активную вкладку (должен делать) и в винде он это делает.
Тобишь в Linux а если быть точным в Linux + GTK2, функция
- Код: Выделить всё
TabIndexAtClientPos(SelectPoint);
Отработала с косяками, Мое IMHO:Нужно как то преобразовать
SelectPoint в систему координат монитора (рабочего стола) либо наоборот в систему координат формы, возможно в GTK, это дело перепутали или что то в этом роде, а может функция вообще ничего не возвращает для Linux… сейчас снес виртуалку с Linux, не могу проверить…
Но налицо либо баг, либо мы передаем не те координаты, в эту функцию. Так что ждем, тех кто более опытнее, может подскажут.kuzmich92 писал(а):Еще вопрос, а как мне перед закрытием вкладки сохранить содержимое tmemo в файл? Т.е. я кликаю закрыть, выскакивает мессджбок с предложением сохранить текст, если я выбираю сохранить - то записывает в файл?
Опять 25. У Memo есть св-во Lines а вот у нее функции:
SaveToFile и LoadFromFile. Пишем и грузим из файла текст. Именно при закрытии вкладки… нужно понимать как обратится именно к тому мемо. Для этого нужно каждое мемо, как то обозвать либо, записать в таб и в мемо в сво-во Tag одно и тоже уникальное число, по которому можно будет идентифицировать и таб и его мемо, или обработать каждый WinControls через
Списко контролов.
Вот как сделал бы Я:- Код: Выделить всё
procedure TForm1.MenuItem1Click(Sender: TObject);
var I:Integer;
begin
if (PageControl1.ActivePageIndex>=0) and
(PageControl1.ActivePageIndex<PageControl1.PageCount) then
for I:=0 to PageControl1.ActivePage.ControlCount-1 do
if PageControl1.ActivePage.Controls[I] is TMemo then
TMemo(PageControl1.ActivePage.Controls[I]).Lines.SaveToFile('C:\text.txt');
PageControl1.ActivePage.Free; //Удаляем вкладку.
end;
kuzmich92 писал(а):А так не получается ни самому сделать, не в инете найти, а из документации только справочник по Delphi7.
Ну все же я посоветовал бы, скачать
DRKB на сайте новая версия с Explorerom, ммм зачем?
Вот 3 версия в формате chm, одним файлом мне больше нравится, а то >2000 мелких файлов этож беда.
И судя по вопросам, пускай не сразу, а постепенно, но все же прочесть вот эту книгу:
Архангельский Delphi 2006, лично читал ее. По моему мнению очень достойная книга, ни в каждой найдешь столько по Delphi.
Просто со временем, Вы должны овладеть лишь знанием Языка и ООП, + Опыт. И все, не нужно заучивать, и помнить что у мемо есть то или иное свой-во или процедура, а вдруг возьмут все и переименуют, и что тогда.. а Вам будет все пофиг, вы откроете исходник посмотрите на класс и как минимум 80% должно стать ясным… ну а не тривиальные вопросы, ну для этого есть этот форум
