Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.09.18;
Скачать: CL | DM;

Вниз

Массивы Components, Controls. Изменение порядка следования   Найти похожие ветки 

 
DProg   (2003-09-04 16:31) [0]

Можно ли управлять последовательностью компонентов в массивах Components, Controls?


 
Skier ©   (2003-09-04 16:32) [1]

TComponent.ComponentIndex


 
DProg   (2003-09-04 16:40) [2]

Спасибо. Вопрос вдогонку - изменяется ли в зависимости от этого порядок следования компонентов в DFM при сохранении формы. Если нет, то существует ли способ?


 
Skier ©   (2003-09-04 16:41) [3]

>DProg (04.09.03 16:40)
Любезный, а самому проверить ?


 
DProg   (2003-09-04 16:45) [4]

Похоже нет... Я уже с обеда проверяю и ничего придумать не могу.


 
Skier ©   (2003-09-04 16:49) [5]

Цель у тебя какая ?


 
DProg   (2003-09-04 16:58) [6]

Задача довольно сложная, но попробую вырезать требуемый кусочек:

Имеется созданная форма. На ней N компонентов (наследников TControl), причем у каждого установлено Align = alLeft; У каждого компонента в свойстве Tag числа от 0 до N, причем в произвольном порядке. Требуется получить DFM, в которой компоненты следуют в порядке возрастания значений в свойстве Tag.

Примерно так :)


 
Nikolay M. ©   (2003-09-04 17:02) [7]


> Требуется получить DFM, в которой компоненты следуют в порядке
> возрастания значений в свойстве Tag.

Можно, конечно, сгенерить руками dfm-файл, но, имхо, лучше создавать Control-ы в рантайме, ручками.


 
DProg   (2003-09-04 17:06) [8]

1. DFM генерится через ObjectBinaryToText;
2. Значения Tag в произвольном порядке.

Это обязательно, т.к. задача - часть другой задачи.


 
Skier ©   (2003-09-04 17:07) [9]

Через ToolsAPI нужно действовать.


 
Skier ©   (2003-09-04 17:08) [10]


> 1. DFM генерится через ObjectBinaryToText;

А записывается через что ?


 
Skier ©   (2003-09-04 17:10) [11]

Sorry. Не то.
Пишется в design-time или в run-time ?


 
DProg   (2003-09-04 17:12) [12]

function TForm1.MyWriteForm(PrForm: TForm): string;
var
........
begin
for I := 0 to PrForm.ComponentCount - 1 do
begin
if (PrForm.Components [I] is TImageList) then
TImageList(PrForm.Components[I]).Clear;
end;

pms := TMemoryStream.Create;

for I := 0 to PrForm.ComponentCount - 1 do
begin
if (PrForm.Components [I] is TXMLODataSet) then
TXMLODataSet(PrForm.Components[I]).Active := False;
end;

PrForm.Visible := False;

pms.WriteComponent (PrForm);
pms.Position := 0;

{ Convert Proxy form to text}

pms1 := TMemoryStream.Create;
ObjectBinaryToText (pms, pms1);
pms1.Position := 0;

{ Save text to temp Richedit}

MemSize := pms1.Size;
Inc(MemSize);
Buffer := AllocMem(MemSize);
try
pms1.read(Buffer^, MemSize);
Result := StrPas(Buffer);
finally
FreeMem(Buffer, MemSize);
end;
pms1.Free;
pms.Free;
end;


 
Skier ©   (2003-09-04 17:13) [13]

>DProg (04.09.03 17:12)
Т.е. ты сам свою форму пишешь и читаешь ? (без IDE) Так ?


 
DProg   (2003-09-04 17:14) [14]

Да


 
Skier ©   (2003-09-04 17:18) [15]

>DProg (04.09.03 17:14)
Ну тогда всё проще. Перед тем как писать выставил правильно для
нужным компонентов TComponent.ComponentIndex и записал.


 
DProg   (2003-09-04 17:21) [16]

> Skier (04.09.03 17:18)
Не получается. Может мешает Align? порядок следования в DFM не изменяется.


 
ZEE ©   (2003-09-04 17:24) [17]

>DProg (04.09.03 17:21) [16]
>Может мешает Align? порядок следования в DFM не изменяется.
а может еще и Left у компонентов надо менять
т.е. сначала у всех Align:=false
потом выставляешь Left:=...
а поом Align:=true - только поочереди (слева на права...)


 
Skier ©   (2003-09-04 17:26) [18]

Используй
TWinControl.DisableAlign
TWinControl.EnableAlign



Страницы: 1 вся ветка

Текущий архив: 2003.09.18;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.021 c
1-58653
Рома
2003-09-04 11:54
2003.09.18
XP стиль все портит :(((((


14-58842
Aristarh
2003-08-29 03:12
2003.09.18
---|Ветка была без названия|---


1-58779
Юлия
2003-09-05 13:47
2003.09.18
Работа с excel


1-58751
TGrey
2003-09-06 18:59
2003.09.18
Status Bar


14-58863
xman
2003-08-30 18:56
2003.09.18
Кто знает