Блокнот Графомана
Модератор: Модераторы
Комиты должны быть минимальными и только то что относится к описанию комита (в идеале ессно)
Вот ты мне пишешь - посмотри исправленый вариант. Я не будь дураком чтоб не тратить время смотрю различия последнего состояния от предпоследнего - а там один "мусор" к тому что написано в описании комита отношения не имеющий - формочки пошевелились, ресурсики изменились, в иде файлики открылись-закрылись, бинарники перекомпилились...
Вот ты мне пишешь - посмотри исправленый вариант. Я не будь дураком чтоб не тратить время смотрю различия последнего состояния от предпоследнего - а там один "мусор" к тому что написано в описании комита отношения не имеющий - формочки пошевелились, ресурсики изменились, в иде файлики открылись-закрылись, бинарники перекомпилились...
- Лекс Айрин
- долгожитель
- Сообщения: 5723
- Зарегистрирован: 19.02.2013 16:54:51
- Откуда: Волгоград
- Контактная информация:
Не спорю, что я могу немного не так пользоваться сервисом. Все приходит со временем. А то. что неправильно идут описания... я пишу что сделал...
Параллельно с курением анхордокинга я исправляю остальные глюки...
Собственно, весь код по теме здесь. Что я теперь делаю не так?
Попытался я вкурить в пример, но не понял его идеологии.
zub писал(а):Комиты должны быть минимальными и только то что относится к описанию комита
Параллельно с курением анхордокинга я исправляю остальные глюки...
Собственно, весь код по теме здесь. Что я теперь делаю не так?
Код: Выделить всё
uses ... AnchorDocking, AnchorDockStorage;
procedure TFMain.FormCreate(Sender: TObject); // надо что-то делать с этой процедурой!!!
begin
//лучше создавать окна здесь... возможно, что и при необходимости
Application.CreateForm(TFTune, FTune);
Application.CreateForm(TFLicence, FLicence);
Application.CreateForm(TFAboute, FAboute);
Application.CreateForm(TTreeNote, TreeNote);
Application.CreateForm(TFTools, FTools);
Application.CreateForm(TFVirtKey, FVirtKey);
Application.CreateForm(TFEditors, FEditors);
// OptionsPath:=ExtractFilePath(Application.ExeName);
//FMain.INIPropStorage1.IniFileName:=OptionsPath + 'options.ini';
DockMaster.MakeDockSite (Self, [akBottom], admrpChild);
// запуск прилипающего окна
DockMaster.MakeDockable (TreeNote, true, true);
//DockMaster.ShowControl('TreeNote', true);
DockMaster.MakeDockable (FTools, true, true);
DockMaster.MakeDockable (FEditors, true, true);
.....
end; Попытался я вкурить в пример, но не понял его идеологии.
на нримере http://svn.freepascal.org/cgi-bin/viewv ... ot=lazarus
глядим procedure TMainIDE.FormCreate(Sender: TObject);
там видим
>>DockMaster.OnCreateControl:=@DockMasterCreateControl
процедура создания окон выделена отдельно, и будет вызываться DockMaster`ом по необходимости, а не тобой.
далее идет показ нескольких окошек
код показа вынесен в отдельные методы, т.к. используется еще гдето, например в меню. он везде одинаковый, рассмотрим на примере показа SrcEditor.
т.е. тупо говорим докмастеру - покожи чтото с названием 'SourceEditor1' и true - на переднем плане.
И вот тут в потрохах докмастера происходит вызов переданой ранее ему процедуры DockMasterCreateControl. а там:
Т.е. в зависимости от переданого имени определенным образом создаются нужные формы, и им присваивается инициальное положение (это положение работает только в "несклееном" состоянии)
"определенный образ" заключается в "хитром" создании, связано с уменьшением мельканий и дерганий при создании в склееном состоянии:
Добавлено спустя 2 минуты 48 секунд:
Все эти "мучения" чтобы иметь возможность загрузить и сразу показать сохраненную раскладку окон
глядим procedure TMainIDE.FormCreate(Sender: TObject);
там видим
Код: Выделить всё
DockMaster.MakeDockSite(Self,[akBottom],admrpChild);//делаем главную форму докабельной
DockMaster.OnCreateControl:=@DockMasterCreateControl;//сообщаем докмастеру какая процедура будет создавать окна
DockMaster.OnShowOptions:=@ShowAnchorDockOptions;//не обязательно, указываем процедуру создания окна опций докинга>>DockMaster.OnCreateControl:=@DockMasterCreateControl
процедура создания окон выделена отдельно, и будет вызываться DockMaster`ом по необходимости, а не тобой.
далее идет показ нескольких окошек
Код: Выделить всё
ViewSrcEditor1ToolButtonClick(Self);//открываем окно редактора
ViewMessagesToolButtonClick(Self);//открываем окно сообщений
ViewOIToolButtonClick(Self);//открываем окно инспектора
ViewFPDocEditorToolButtonClick(Self);//открываем окно еще какойто хреникод показа вынесен в отдельные методы, т.к. используется еще гдето, например в меню. он везде одинаковый, рассмотрим на примере показа SrcEditor.
Код: Выделить всё
procedure TMainIDE.ViewSrcEditor1ToolButtonClick(Sender: TObject);
begin
DockMaster.ShowControl('SourceEditor1',true);
end;т.е. тупо говорим докмастеру - покожи чтото с названием 'SourceEditor1' и true - на переднем плане.
И вот тут в потрохах докмастера происходит вызов переданой ранее ему процедуры DockMasterCreateControl. а там:
Код: Выделить всё
procedure TMainIDE.DockMasterCreateControl(Sender: TObject; aName: string; var
AControl: TControl; DoDisableAutoSizing: boolean);
procedure CreateForm(Caption: string; NewBounds: TRect);
begin
AControl:=CreateSimpleForm(aName,Caption,NewBounds,DoDisableAutoSizing);
end;
begin
if aName='CodeExplorer' then
CreateForm('Code Explorer',Bounds(700,230,100,250))
else if aName='FPDocEditor' then
CreateForm('FPDoc Editor',Bounds(200,720,300,100))
else if aName='Messages' then
CreateForm('Messages',Bounds(230,650,350,100))
else if aName='ObjectInspector' then
CreateForm('Object Inspector',Bounds(10,200,100,350))
else if aName='SourceEditor1' then
CreateForm('Source Editor 1',Bounds(230,200,400,400))
else if aName='SourceEditor2' then
CreateForm('Source Editor 2',Bounds(260,230,350,350))
else if aName='ProjectInspector' then
CreateForm('Project Inspector',Bounds(10,230,150,250))
else if aName='DebugOutput' then
CreateForm('Debug Output',Bounds(400,400,350,150));
end;Т.е. в зависимости от переданого имени определенным образом создаются нужные формы, и им присваивается инициальное положение (это положение работает только в "несклееном" состоянии)
"определенный образ" заключается в "хитром" создании, связано с уменьшением мельканий и дерганий при создании в склееном состоянии:
Код: Выделить всё
function CreateSimpleForm(Name, Title: string; NewBounds: TRect;
DisableAutoSizing: boolean): TSimpleForm;
begin
// first check if the form already exists
// the LCL Screen has a list of all existing forms.
// Note: Remember that the LCL allows as form names only standard
// pascal identifiers and compares them case insensitive
Result:=TSimpleForm(Screen.FindForm(Name));
if Result is TSimpleForm then begin
if DisableAutoSizing then
Result.DisableAutoSizing;
exit;
end;
// create it
Result:=TSimpleForm(TSimpleForm.NewInstance);
Result.DisableAutoSizing;
Result.Create(Application);
Result.Caption:=Title;
Result.Name:=Name;
Result.Memo1.Lines.Text:=Name;
Result.BoundsRect:=NewBounds;
if not DisableAutoSizing then
Result.EnableAutoSizing;
end;Добавлено спустя 2 минуты 48 секунд:
Все эти "мучения" чтобы иметь возможность загрузить и сразу показать сохраненную раскладку окон
- Лекс Айрин
- долгожитель
- Сообщения: 5723
- Зарегистрирован: 19.02.2013 16:54:51
- Откуда: Волгоград
- Контактная информация:
Вроде, так понятнее.
а
как я понял, придется вычислять при написании процедуры DockMasterCreateControl или брать с дизайнера форм?
а
Код: Выделить всё
Bounds(10,200,100,350)
как я понял, придется вычислять при написании процедуры DockMasterCreateControl или брать с дизайнера форм?
это можно вообще убрать, тогда цыфры будут браться из дизайнера. тут сделано чтобы фиксировать первоначальное положение окон
- Лекс Айрин
- долгожитель
- Сообщения: 5723
- Зарегистрирован: 19.02.2013 16:54:51
- Откуда: Волгоград
- Контактная информация:
Т. е. просто опустить всю процедуру?
Можно опустить (вернее не выделить отдельно)
но нельзя опустить выделенную процедуру создания требуемых форм
и "особый" порядок создания формы - через NewInstance, DisableAutoSizing и т.д.
Также хорошим тоном будет вместо развесистого ифа или кэйса внутри DockMasterCreateControl сделать динамическую регистрацию форм и получение инфы о них по имени. но для начала можно и без этого
Код: Выделить всё
procedure CreateForm(Caption: string; NewBounds: TRect);
function CreateSimpleForm(Name, Title: string; NewBounds: TRect;DisableAutoSizing: boolean): TSimpleForm;но нельзя опустить выделенную процедуру создания требуемых форм
Код: Выделить всё
procedure TMainIDE.DockMasterCreateControl(Sender: TObject; aName: string; var AControl: TControl; DoDisableAutoSizing: boolean);и "особый" порядок создания формы - через NewInstance, DisableAutoSizing и т.д.
Также хорошим тоном будет вместо развесистого ифа или кэйса внутри DockMasterCreateControl сделать динамическую регистрацию форм и получение инфы о них по имени. но для начала можно и без этого
- Лекс Айрин
- долгожитель
- Сообщения: 5723
- Зарегистрирован: 19.02.2013 16:54:51
- Откуда: Волгоград
- Контактная информация:
Т. е, условно, если я перепишу CreateSimpleForm, допустим, так
То это будет нормально?
Код: Выделить всё
function CreateSimpleForm(Name, Title: string;
DisableAutoSizing: boolean): TSimpleForm;
begin
// first check if the form already exists
// the LCL Screen has a list of all existing forms.
// Note: Remember that the LCL allows as form names only standard
// pascal identifiers and compares them case insensitive
Result:=TSimpleForm(Screen.FindForm(Name));
if Result is TSimpleForm then begin
if DisableAutoSizing then
Result.DisableAutoSizing;
exit;
end;
// create it
Result:=TSimpleForm(TSimpleForm.NewInstance);
Result.DisableAutoSizing;
Result.Create(Application);
Result.Caption:=Title;
Result.Name:=Name;
// Result.BoundsRect:=NewBounds;
if not DisableAutoSizing then
Result.EnableAutoSizing;
end;То это будет нормально?
В части отказа от Bounds - имхо норм (хотя я не пробовал, но проблем не вижу)
В части создания нет - в примере все окна одинаковые TSimpleForm, у тебя разные
В части создания нет - в примере все окна одинаковые TSimpleForm, у тебя разные
- Лекс Айрин
- долгожитель
- Сообщения: 5723
- Зарегистрирован: 19.02.2013 16:54:51
- Откуда: Волгоград
- Контактная информация:
Получается, что мне все равно придется создавать каждую форму отдельно? Причем, динамически?
Т. е. убрать
и заменить ее на, условно,
Т. е. убрать
Код: Выделить всё
Application.CreateForm(TFTune, FTune);
и заменить ее на, условно,
Код: Выделить всё
FTune:=TFTune(TFTune.NewInstance);
...
да, но создавать не всё скопом, а поотдельности - по запросу
- Лекс Айрин
- долгожитель
- Сообщения: 5723
- Зарегистрирован: 19.02.2013 16:54:51
- Откуда: Волгоград
- Контактная информация:
уже понятнее...
А если в той же CreateForm анализировать состояние флагов и на основе их состояния создавать стыкуемые формы?
А если в той же CreateForm анализировать состояние флагов и на основе их состояния создавать стыкуемые формы?
не надо никаких флагов, есть загрузка-выгрузка layout`а. см тамже в miniide.
если ты в своем TFMain.FormCreate загрузишь layout то все формы будут созданы DockMaster`ом самостоятельно (путем вызова твоей TFMain.DockMasterCreateControl)
если ты в своем TFMain.FormCreate загрузишь layout то все формы будут созданы DockMaster`ом самостоятельно (путем вызова твоей TFMain.DockMasterCreateControl)
- Лекс Айрин
- долгожитель
- Сообщения: 5723
- Зарегистрирован: 19.02.2013 16:54:51
- Откуда: Волгоград
- Контактная информация:
Кажется, догнал... буду потихонечку ковырять... Я то надеялся создать поэтапно, но тут явно не прокатит.
- Лекс Айрин
- долгожитель
- Сообщения: 5723
- Зарегистрирован: 19.02.2013 16:54:51
- Откуда: Волгоград
- Контактная информация:
Код: Выделить всё
...
procedure TFMain.DockMasterCreateControl(Sender: TObject; aName: string;
var AControl: TControl; DoDisableAutoSizing: boolean);
// Procedure SettingWin ();
begin
case aName of
'TTreeNote':Begin
// проверка окна на существование
ShowMessage('1');
AControl:=TTreeNote(Screen.FindForm('TreeNote'));
if AControl is TFMain then
begin
if DoDisableAutoSizing then
AControl.DisableAutoSizing;
exit;
End;
// create it
// посмотреть остальные опции
AControl:=TTreeNote(TTreeNote.NewInstance);procedure TFMain.FormCreate(Sender: TObject); // надо что-то делать с этой процедурой!!!
//var
// Settings: TAnchorDockSettings;
begin
//лучше создавать окна здесь... возможно, что и при необходимости
Application.CreateForm(TFTune, FTune);
Application.CreateForm(TFLicence, FLicence);
Application.CreateForm(TFAboute, FAboute);
//Application.CreateForm(TTreeNote, TreeNote);
//DockMaster.ShowControl('TreeNote',true);
Application.CreateForm(TFTools, FTools);
//Application.CreateForm(TFVirtKey, FVirtKey);
Application.CreateForm(TFEditors, FEditors);
OptionsPath:=ExtractFilePath(Application.ExeName);
FMain.INIPropStorage1.IniFileName:=OptionsPath + 'options.ini';
DockMaster.MakeDockSite (Self, [akBottom], admrpChild);
DockMaster.OnCreateControl:=@DockMasterCreateControl;
FMain.LoadLayout;
// запуск прилипающего окна
.......
//DockMaster.MakeDockable (TreeNote, true, true);
DockMaster.ShowControl('TreeNote', true);
DockMaster.MakeDockable (FTools, true, true);
DockMaster.MakeDockable (FEditors, true, true);
AControl.DisableAutoSizing;
AControl.Create(Application);
//Result.Caption:=Title;
AControl.Name:=Name;
if not DoDisableAutoSizing then
AControl.EnableAutoSizing;
end;
'TFVirtKey':Begin
AControl:=TTreeNote(Screen.FindForm('FVirtKey'));
if AControl is TFVirtKey then
begin
if DoDisableAutoSizing then
AControl.DisableAutoSizing;
exit;
End;
// create it
// посмотреть остальные опции
AControl:=TFVirtKey(TFVirtKey.NewInstance);
AControl.DisableAutoSizing;
AControl.Create(Application);
//Result.Caption:=Title;
AControl.Name:=Name;
if not DoDisableAutoSizing then
AControl.EnableAutoSizing;
end;
{
'TFTools':Begin
end;
'TFEditors':Begin
end ;
}
end;
end;
... не пойму где я ошибся(((
