![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Доброго времени суток. Возникла следующая проблема: Нужно создать 100+ TImage. На одинаковом расстоянии, и переименовать их как надо. Вручную это займёт много времени, можно ли как-нибудь программно? Знаю, можно таким кодом:
Код:
procedure DoSomethingWithEditControls;
var
K: Integer;
EditArray: array[0..99] of Tedit;
begin
try
for K := 0 to 99 do
begin
EditArray[K] := TEdit.Create(form1);
EditArray[K].Parent := form1;
EditArray[k].Left := 100;
EditArray[k].Top := K * 10;
EditArray[k].Visible:=true;
end;
finally
end;
end;Но тут он создаёт тедиты в программе, а мне нужно в самом проекте. |
|
#2
|
||||
|
||||
|
т.е. чтобы они в design-time были?
|
|
#3
|
|||
|
|||
|
Что бы он был на самой форме в проекте.
|
|
#4
|
|||
|
|||
|
Маньяк
![]() Напиши программку, которая тебе сгенерит соответсвующий исходный код .pas и .dfm. Нонче .dfm текстовый, так что его легко сгенерить. |
|
#5
|
|||
|
|||
|
О, хорошая идея, спасибо. Т.е. после
Код:
object Button2: TButton
Left = 488
Top = 256
Width = 75
Height = 25
Caption = 'Button2'
TabOrder = 16
OnClick = Button2Click
end
endЭтого добавить код, который мне нужен для Тимэдж и всё? Или в компиляторе то же объявлять нужно? |
|
#6
|
||||
|
||||
|
это в dfm:
PHP код:
|
|
#7
|
||||
|
||||
|
это в pas:
PHP код:
Код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Memo1: TMemo;
Memo2: TMemo;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
i: Integer;
begin
for i:=0 to 99 do
begin
Memo1.Lines.Add('object Image'+IntToStr(i)+': TImage');
Memo1.Lines.Add('Left = '+IntToStr(16+33*(i mod 16)));
Memo1.Lines.Add('Top = '+IntToStr(104+33*(i div 16)));
Memo1.Lines.Add('Width = 33');
Memo1.Lines.Add('Height = 33');
Memo1.Lines.Add('end');
Memo2.Lines.Add('Image'+IntToStr(i)+': TImage;');
end;
end;
end. |
|
#8
|
|||
|
|||
|
Большое спасибо!
Но появилась проблема, эти имэджи бывают не заполненые, ну т.е. пустые, а полоса прокрутки всё равно появляется. Надо, что бы она появлялась по мере заполнения имэджов. |
|
#9
|
||||
|
||||
|
Эээээ. Это вы про что? Про скролбар формы что-ли на которой имиджи добавляете?
|
|
#10
|
|||
|
|||
|
Ну я создал 100 имэджов. Когда запускаю программу, её можно прокручивать, хотя имэджи не видимы. Хотелось бы, что бы скроллбар увеличивался по мере заполнения имэджов.
|
|
#11
|
||||
|
||||
|
Данное решение кажется мне нерациональным. Объясните, что вы хотите получить в итоговой программе, и мы подскажем более простой и качественный метод решения.
|
|
#12
|
|||
|
|||
|
Человеку нужен компонент типа ListView в режиме иконок. Рекомендую хороший компонент - EasyListView от MustangPeak. Хотя custom-отрисовка там сделана не очень прозрачно, но работает все на ура.
|
|
#13
|
|||
|
|||
|
Я делаю что-то типа базы предметов, для одной игры. Программа сейчас выглядит так:
Когда не выделен ни один чекбокс, то загружаются все предметы, которые есть в массиве (113 всего), дак вот а когда нажимашь к примеру мана, то предметов остаётся 20, это я сделал, мне бы вот этот скроллбар убрать, когда картинки пустые. |
|
#14
|
||||
|
||||
|
А почему бы не создавать, допустим, в скроллбоксе столько имежов, сколько нужно для конкретной подборки, а при изменении фильтра - удалять всё что есть и создавать новые? По-моему, это более разумный вариант..
|
|
#15
|
|||
|
|||
|
Хм, я никогда не работал в скроллбоксе. Не могли бы вы рассказать, для каких целей он вообще нужен. И как будет выглядить моя программа, со скроллбоксом?
|