Форум: "Основная";
Текущий архив: 2003.09.18;
Скачать: [xml.tar.bz2];
ВнизМассивы 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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.008 c