![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Вопросы к Старшим [D7, WinXP]
MYRX © (2008-04-17 10:56:00)Добрый день, уважаемые мастера. Взялся я писать куросовой на KOL
хочется написать простенький редактор pas-файлов
Задумка:
возможность открывать несколько файлов на разных вкладках
для этого сделал отдельный фрейм с редактром кода
и создаю его на каждой вкладке так:
procedure CreateEmptyTab(Str:String);
var tmp:PfrEditor;
begin
if not Assigned(FrameList) then
FrameList:=NewList;
if not Assigned(PathList) then
PathList:=NewStrList;
fmMan.TCMain.TC_Insert(fmMan.TCMain.Count,'',0);
fmMan.TCMain.CurIndex:=fmMan.TCMain.Count-1;
fmMan.TCMain.TC_Items[fmMan.TCMain.CurIndex]:=Str;
NewfrEditor(tmp,fmMan.TCMain.Pages[fmMan.TCMain.CurIndex]);
FrameList.Add(tmp);
PfrEditor(FrameList.Item[fmMan.TCMain.CurIndex]).MEPas.Focused:=True;
PathList.Add('');
end;
В PathList храню пути до файлов, открытых на вкладках или пустую строку, если вкладка пустая
в FrameList хранятся указатели на созданные фреймы
MEPas - это memo на фрейме
вопрос заключается в следующем:
как мою задумку организовать правильно
а еще как все это правильно уничтожить при закрытии вкладки
подскажите плиззз
MYRX (2008-04-18 16:07:00) [41]Появился еще один вопрос к мастерам
хочется сделать красивый About, на основе картинки jpg
но вот незадача, как в программу "запихнуть" эту картинку
логично использовать ресурсы
Сложность-же заключается в том, как из этих ресурсов
взять эту картинку, декодировать и нарисовать на канвасе
формы, не создавая промежуточного файла.
Снова надеюсь старших товарищей
Может кто-нить подкинет кода кусочек?
MYRX (2008-04-18 15:55:00) [42]Спасибо огоромное!
пример вывел меня из тупика
теперь могу писать курсовой дальше
Danger (2008-04-18 10:28:00) [43]
> MYRX (17.04.08 19:35) [8]
Вот простой пример набросал: http://alhoster.com/TabEditExample.7z
Буду рад, если поможет.
MYRX (2008-04-17 19:35:00) [44]Спасибо всем за содействие
2 Danger если на форум влом скидывать пример, то скинь, пожалуйста на
myrx@inbox.ru
Barloggg (2008-04-17 15:36:00) [45]> MYRX (17.04.08 13:41) [3]
покури пример с Frame
создаешь два проекта. или лучше просто две формы
первый твой таб с вкладками и делается как обычно
второй это конкретно одна вкладка со всем что тебе на ней нужно. только вместо КолФорм надо бросить туда КолФраме.
убрать вторую форму из списка автосоздаваемых.
а потом нужное тебе количество вкладок клонировать как сказал Danger [1]
Danger (2008-04-17 15:16:00) [46]
> MYRX (17.04.08 13:41) [3]
> Если не трудно, приведи примерчик для тех, кто в танке.
> Признаюсь честно: я - в бронепоезде
Попозже кину пример создания объекта, в данный момент немного занят ...
> Я не представляю, как динамически создавать объект, состоящий
> из кучи других объектов, да еще как-то это все закинуть
> на вкладку, может кто-нить поделится, хоть приблизительным
> описанием подобного объекта на языке Паскаль и кодом его
> инициализации и уничтожения?
Точно так же, как динамически создается любой другой объект (форму, кнопку и т.п.).
MYRX (2008-04-17 14:15:00) [47]Спасибо за совет, Дмитрий.
Все-таки я предпочту "Вкладочный" вариант.
Только есть одна просьбочка ко всем мастерам.
Я не представляю, как динамически создавать объект, состоящий из кучи других объектов, да еще как-то это все закинуть на вкладку, может кто-нить поделится, хоть приблизительным описанием подобного объекта на языке Паскаль и кодом его инициализации и уничтожения?
Дмитрий К (2008-04-17 13:58:00) [48]А можно, например, так: один memo и панелька с кнопочками. К каждой кнопочке привязан объект в котором хранятся путь файла, изменения в файле, еще какая-нибудь лабуда. При создании кнопочки объект создается, инициализируются его поля. При разрушении соответственно все уничтожается.
Для кнопочек можно использовать тот же TabControl, только его "кнопочную" часть, скрыв под memo все остальное.
MYRX (2008-04-17 13:41:00) [49]Спасибо, Danger, направление мысли понял. Если не трудно приведи примерчик для тех, кто в танке. Признаюсь честно: я - в бронепоезде
Danger (2008-04-17 13:05:00) [50]А в качестве memo, кроме обычного memo, можно использовать RichEdit; KOLHilightMemo Владимира Кладова; или VMHSyntaxEdit, VMHPasHighlighter (последние, впрочем, глючат неслабо).
Danger (2008-04-17 12:59:00) [51]Можно оформить это все в отдельный объект (скажем, TEditor), членами которого являются memo и прочие контролы на вкладке. Указатели на экземпляры TEditor хранить в глобальном динамическом массиве:
TEditors = array of TEditor;
При создании вкладки динамически создаем объект (в конструкторе объекта будет инициализироваться memo и прочие контролы), и добавляем указатель на объект TEditor в массив, для последующих обращений к объекту и его дочерним объектам (memo, например).
При закрытии вклядки уничтожать объект TEditor и его дочерние объеты. Удаляем из массива указатель на объект (если надо, сдвигаем элементы к началу массива и устанавливаем новую длину массива).
Обращаться к memo, расположенным на разных вкладках легко, т.к. номер вкладки будет совпадать с индексом экземпляра TEditor в массиве. Т.е., чтобы обратиться к свойству Text у memo, расположенному на третьей вкладке, делаем примерноTEditors[2].Memo.Text:= 'blablabla';
Дополнительно, для удобства можно ввести в объект TEditor методы, например TEditor.LoadFile(), TEditor.SaveFile(), TEditor.CopyToInternalClipboard()и. т.п. В общем, в такой схеме можно всегда обратиться к любому контролу на любой вкладке, и упростить работу с блоком контролов на вкладке, управлять созданием/уничтожением целых блоков контролов при необходимости.