Всем привет. Статья не претендует на уникальность, тем не менее, несколько новых вещей есть. Захотелось мне однажды переделать внешний вид Delphi XE8 под свою любимую среду - Delphi7. Полез в интернет, нашел много дельных советов. Итак. Первое. Делаем отстыковку окон. View-Desktop-Classic Unlocked. Дальше - делаем отстыковку дизайнера окон. Тут все сложнее. Опция убрана из настроек дельфи. Нужно изменить ключ HKEY_CURRENT_USER\Software\Embarcadero\BDS\16.0\Form Design\Embedded Designer в False и перезапустить дельфи. Внимание! Отстыковка работает корректно только для VCL форм, для мобильной разработки и FireMonkey все работает корректно только с прикрепленными формами. Но т.к. я работаю только с VCL, то мне гораздо удобнее форму открепить. Дальше - включаем стандартную палитру компонент. Правая кнопка на главном окне - Component. Потом заходим в свойства Tools-Options-Component Toolbar и меняем расположение закладок не по алфавиту, а как в Delphi7. Дальше, убираем лишние кнопки со стандартных тулбаров, добавляем как в Delphi7. Дальше, tools-options-editor options-display-show line numbers убираем галку. tools-options-editor options-color выставляем цвета как привыкли. Теперь Object Inspector. Вот тут они кое-что поломали. Я привык окно дерева обьектов формы пристыковать внутри Object Inspector. То же самое можно сделать и в Delphi XE8. Проблема в том, что в Delphi7 эта пристыковка сохраняется, как и измененные размеры Object Inspector. А в delphi XE8 нет. После каждого перезапуска требуется вручную пристыковать окно, менять размеры. Что бесит. Плюс в самом Object Inspector нельзя убрать настройками панель со ссылкой на Bind Visually и панель, в которой отображается текущее выбранное свойство (которая 100 лет не нужна и только место занимает). Дальше идет уже жесткий хак :) На дельфи7 было написано простое приложение на 15 килобайт. Вот код
program fixoi;
uses windows;
var
OIHandle: hWnd;
R: TRect;
szClass : array[Byte] of Char;
function EnumChildProc(WndCtrl: HWND; lParam: Longint): Boolean; stdcall;
begin
Result := True;
GetClassName(WndCtrl,szClass,SizeOf(szClass));
if szClass = 'THotCommands' then
begin
GetWindowRect(WndCtrl,R);
MoveWindow(WndCtrl,R.Left,R.Top,0,0,True);
ShowWindow(WndCtrl,sw_hide);
end;
if szClass = 'TDescriptionPane' then
begin
GetWindowRect(WndCtrl,R);
MoveWindow(WndCtrl,R.Left,R.Top,0,0,True);
ShowWindow(WndCtrl,sw_hide);
end;
end;
begin
OIHandle := FindWindow(nil,pchar('Object Inspector'));
if OIHandle > 0 then
begin
GetClassName(OIHandle,szClass,SizeOf(szClass));
if szClass = 'TPropertyInspector' then
begin
GetWindowRect(OIHandle,R);
MoveWindow(OIHandle,R.Left,R.Top,570,800,True);
EnumChildWindows(OIHandle,@EnumChildProc,0);
end;
end;
OIHandle := FindWindow(nil,pchar('Structure'));
if OIHandle > 0 then
begin
GetClassName(OIHandle,szClass,SizeOf(szClass));
if szClass = 'TStructureViewForm' then
begin
GetWindowRect(OIHandle,R);
MoveWindow(OIHandle,R.Left,R.Top,250,800,True);
end;
end;
end.
Дальше нужно только перетащить окно Structure на окно Object Inspector и получаю что хочу. Кстати, кто подскажет, можно и это программно сделать нормально?
Итог
http://s010.radikal.ru/i311/1605/19/51ab050eedda.png