Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.01.2011, 16:55   #1
mrbadge
Пользователь
 
Регистрация: 26.01.2011
Сообщений: 48
По умолчанию Создание TImage в Run-time

Создаю элементы следующим образом:

Код:
type Flagki=array [1..667] of TImage;

var
  Form1: TForm1;
  ...
  flagg: flagki;

...
var  i,j,t,p: Integer;
      ...
p:=0;
for i:=0 to StringGrid1.rowCount-1 do
        for j:=0 to StringGrid1.colCount-1 do
      Begin
          if StringGrid1.Cells[j,i]='X' then begin
          p:=p+1;
          Flagg[p]:=TImage.Create(nil);
          Flagg[p].Parent:=Form1;
          Flagg[p].Left:=Bevel3.Left+5+j*stringgrid1.DefaultColWidth;
          Flagg[p].Top:=StringGrid1.Top+i*stringgrid1.DefaultRowHeight;
          Flagg[p].Width:=StringGrid1.DefaultColWidth;
          Flagg[p].Height:=StringGrid1.DefaultRowHeight;
          Flagg[p].Picture.LoadFromFile('flag.gif');
          Flagg[p].Visible:=True;
         end;
      end;
...
Однако, после выполнения цикла на форме нет элементов. Просьба посоветовать решение (необходимо поместить на форму n одинаковых картинок по известным координатам)
mrbadge вне форума Ответить с цитированием
Старый 28.01.2011, 17:10   #2
mrbadge
Пользователь
 
Регистрация: 26.01.2011
Сообщений: 48
По умолчанию

все, извините, проблему решил .. но теперь другая) таких картинок на форме может быть очень много и при большом количестве загрузка ЦП слишком большая. Как лучше оптимизировать код?
mrbadge вне форума Ответить с цитированием
Старый 28.01.2011, 20:03   #3
SNUPY
Форумчанин
 
Регистрация: 15.02.2008
Сообщений: 621
По умолчанию

Код:
Flag: TBitmap;
...
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
var
  Grid: TStringGrid;
begin

  Grid := Sender as TStringGrid;

  if Grid.Cells[ACol,ARow] = 'x' then
  Grid.Canvas.StretchDraw(Rect, Flag);
end;

procedure TForm1.FormCreate(Sender: TObject);

begin
  Flag := TBitmap.Create;
  Flag.LoadFromFile('flag.gif');
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  Flag.Free;
end;
можно еще
так:
Код:
    Flag: TPicture;
...
  Grid.Canvas.StretchDraw(Rect, Flag.Graphic);
...
  Flag := TPicture.Create;
Помог? Ну так нажми на весы!

Последний раз редактировалось SNUPY; 28.01.2011 в 20:11.
SNUPY вне форума Ответить с цитированием
Старый 28.01.2011, 21:53   #4
mrbadge
Пользователь
 
Регистрация: 26.01.2011
Сообщений: 48
По умолчанию

Спасибо, я уже решил проблему немного по другому. Если возникнет необходимость - воспользуюсь Вашим вариантом.
mrbadge вне форума Ответить с цитированием
Старый 29.01.2011, 15:46   #5
mrbadge
Пользователь
 
Регистрация: 26.01.2011
Сообщений: 48
По умолчанию

Еще появился вопрос.
Использую оператор case таким образом:

Код:
case StringGrid1.Cells[j,i] of
          143,142:
          begin
         ...
          end;
         ...
end;
компилятор выдает ошибку "ordinal type required". If использовать не хочется, есть ли какое-нибудь решение здесь?
mrbadge вне форума Ответить с цитированием
Старый 29.01.2011, 16:10   #6
vovk
!=
Участник клуба
 
Аватар для vovk
 
Регистрация: 08.09.2008
Сообщений: 1,751
По умолчанию

в case допустимо использовать только порядковый тип
vovk вне форума Ответить с цитированием
Старый 30.01.2011, 13:09   #7
mrbadge
Пользователь
 
Регистрация: 26.01.2011
Сообщений: 48
По умолчанию

еще такой вопрос:
стоит ли тащить все элементы для проги (картинки и тд) рядом с ней, или есть способ засунуть их в exe?
mrbadge вне форума Ответить с цитированием
Старый 30.01.2011, 13:14   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
стоит ли тащить все элементы для проги (картинки и тд) рядом с ней
Да. Для масштабируемости.
Цитата:
или есть способ засунуть их в exe?
Тоже да. Все напихать в ресурсы. Однако если интересует мое мнение - я стараюсь пользоваться первым способом.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 30.01.2011, 14:01   #9
mrbadge
Пользователь
 
Регистрация: 26.01.2011
Сообщений: 48
По умолчанию

Спасибо, думаю, оставлю компоненты рядом с эксешником
mrbadge вне форума Ответить с цитированием
Старый 03.02.2011, 22:48   #10
mrbadge
Пользователь
 
Регистрация: 26.01.2011
Сообщений: 48
По умолчанию

Еще вопрос: нужно реализовать такую вещь: все созданные компоненты привязываю к одной какой-нибудь невидимой кнопке (чтобы можно было потом уничтожить все не знаю их количества), но тк кнопка невидимая, то все компоненты, созданные в ран-тайме, наследуют этот признак, а их необходимо сделать видимыми. Есть ли способ проще?
mrbadge вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Run-time error 13 olimpus Microsoft Office Excel 11 25.12.2010 22:49
Создание компонентов Run Time Serebah Общие вопросы Delphi 13 08.12.2010 22:02
Заполнение cxLookupComboBox в run time fake2 БД в Delphi 0 17.05.2010 08:31
ActionManager - работа в run - time chingiz Компоненты Delphi 0 10.10.2009 08:48
При создание edit, в режиме run-time, нет стандартного контекстного меню slips Общие вопросы Delphi 6 08.11.2008 17:05