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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.03.2007, 21:13   #1
Format C:
Пользователь
 
Регистрация: 11.03.2007
Сообщений: 92
Вопрос Как правильно программно создавать объекты на форме

Проблема следующая:
Есть двумерный массив: Image: Array[1..9, 1..10] Of TImage;
Нужно выделить под него память, разместить все объекты на форме и загрузить в них изображения. С памятью и размещением я разобрался, а вот с загрузкой изображения никак.

Вот код:
Код:
unit MainUnit;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls;

type
  TPole = Record
    Obj: Byte;
    Turn: Byte;
    Status: Byte;
  End;

  TMainForm = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    Procedure SetPole;
  public
  end;

var
  MainForm: TMainForm;
  Pole: Array[1..9, 1..10] Of TPole;
  Image: Array[1..9, 1..10] Of TImage;

implementation

{$R *.dfm}

Procedure TMainForm.SetPole;
Var
  X, Y: Byte;
Begin
  For X:=1 To 9 Do
    For Y:=1 To 10 Do
      Image[X,Y]:=TImage.Create(Owner);

  For X:=1 To 9 Do
    For Y:=1 To 10 Do
    Begin
      Image[X,Y].Height:=40;
      Image[X,Y].Width:=40;
    End;

  //Image[1,1].Picture:=TPicture.Create; - эта сторчка ничего не даёт.
  Image[1,1].Left:=5;
  Image[1,1].Top:=5;
  Image[1,1].Picture.LoadFromFile('img/000.ico');

  {For X:=1 To 9 Do   это тоже ничего.
    For Y:=1 To 10 Do
      Image[X,Y].Visible:=True;}
End;

procedure TMainForm.FormCreate(Sender: TObject);
begin
  SetPole;
end;

procedure TMainForm.FormClose(Sender: TObject; var Action: TCloseAction);
Var
  X, Y: Byte;
begin
  For X:=1 To 9 Do
    For Y:=1 To 10 Do
      Image[X,Y].Free;
end;

end.
Когда пишешь Image[1,1].Picture. , то после точки ничего не появляется. А когда добавляешь объект на форму сам, то всё впорядке.
Подскажите в чём проблема.
Format C: вне форума Ответить с цитированием
Старый 11.03.2007, 21:19   #2
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

а кто будет после создания указывать на родителя ? ладно просто у каждого обьекта укажите свойство Parent := Self; и тогда попрет
BOBAH13 вне форума Ответить с цитированием
Старый 12.03.2007, 10:03   #3
Format C:
Пользователь
 
Регистрация: 11.03.2007
Сообщений: 92
По умолчанию

Спасибо. Помогло.
Только всё равно, когда пишешь Image[1,1].Picture. , то после точки ничего не появляется. А на память я все свойства непомню.
Format C: вне форума Ответить с цитированием
Старый 12.03.2007, 11:31   #4
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
после точки ничего не появляется
Специально провел эксперимент - все появляется...
После ввода точки клавишу SHIFT нажимаем?

Дополнил: так быстрее и ВСЕГДА список вываливается. Или не вываливается (если нечему или нарушен формат), тогда внизу, в окошке, где ошибки, появляется "грозная" надпись...

Последний раз редактировалось mihali4; 13.03.2007 в 01:24.
mihali4 вне форума Ответить с цитированием
Старый 12.03.2007, 13:11   #5
zetrix
Delphi/C++/C#
Участник клуба
 
Аватар для zetrix
 
Регистрация: 29.10.2006
Сообщений: 1,972
По умолчанию

Цитата:
После ввода точки клавишу SHIFT нажимаем?
Для чего? Для простых объектов: ставлю точку, список сам выпадает, а для "динамически созданных" нужно Shift? Хм... Странно.
zetrix вне форума Ответить с цитированием
Старый 12.03.2007, 22:23   #6
Vasya
Форумчанин Подтвердите свой е-майл
 
Аватар для Vasya
 
Регистрация: 21.01.2007
Сообщений: 193
По умолчанию

У меня немного похожий вопросик есть как можно организовать вывод на форму из графического BMP файла программно? Допустим читаем поблочно содержимое файла при помощи ReadBlock и заносим в переменную. Как можно организовать вывод на форму?
Vasya вне форума Ответить с цитированием
Старый 12.03.2007, 22:36   #7
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

я чет не понял... а Canvas.Brush.Bitmap ! что никак ? да и компонента TImage для чего

и чего Вы там заносите ? есть структуры битмапа описанные в Windows вроде! вы читаете только Dib часть ? тогда подумаем у меня есть коды писал когда то, а если полный битмап зачем его так читать ? есть TBitmap

Последний раз редактировалось BOBAH13; 12.03.2007 в 22:39.
BOBAH13 вне форума Ответить с цитированием
Старый 12.03.2007, 23:13   #8
Vasya
Форумчанин Подтвердите свой е-майл
 
Аватар для Vasya
 
Регистрация: 21.01.2007
Сообщений: 193
По умолчанию

задание такое: программно прочитать BMP файл и вывести его попиксельно на форму
у меня начало имеется:

procedure ReadBMPheader(header:bmhptr;filenam e:string);
var
bmpfile:file;
hfile:file;
begin
assign(bmpfile,filename);
reset(bmpfile,1);
blockread(bmpfile,header^,sizeof(he ader^));
close(bmpfile);
Form1.Edit1.Text:=IntTostr(header^. f.Typf);
Form1.Edit2.Text:=IntToStr(header^. f.Size);
Form1.Edit3.Text:=IntToStr(header^. f.Res1);
Form1.Edit4.Text:=IntToStr(header^. f.Res2);
Form1.Edit5.Text:=inttostr(header^. f.OfBm);
end;
procedure TForm1.N1Click(Sender: TObject);
begin
{if OpenPictureDialog1.Execute then
begin
Image1.Picture.LoadFromFile(OpenPic tureDialog1.FileName);
ReadBMPheader(@myheader,OpenPicture Dialog1.FileName);
end
else Form1.Action;} ТАКОЙ ВЫВОД НЕ ПРОХОДИТ НУЖНО ПРОЦЕДУРУ LOADFROMFILE ОРГАНИЗОВАТЬ САМОМУ
end;
end.

сдесь я читаю только заголовок. Но как вывести файл на форму?

Последний раз редактировалось Vasya; 12.03.2007 в 23:46.
Vasya вне форума Ответить с цитированием
Старый 13.03.2007, 16:06   #9
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

я же написал есть загловки типы Bitmap в Windows! их читаеш сначала файла bmp а потом там описание на ширину и длину изображения так же формат его... выделяеш соответствующий буфер чтобы ну массив Cardinal например если выделено для 32 бит или 24 - 3 байта 16 - 2 байта, а у остальных вообще палитры свои... короч выделел массив в него читаеш массив пикселей батмапа а потом простым перебором через ширину и длинну выводиш на канву формы или чего либо другого
BOBAH13 вне форума Ответить с цитированием
Старый 14.03.2007, 22:34   #10
Format C:
Пользователь
 
Регистрация: 11.03.2007
Сообщений: 92
По умолчанию

Цитата:
Сообщение от mihali4 Посмотреть сообщение
Специально провел эксперимент - все появляется...
После ввода точки клавишу SHIFT нажимаем?

Дополнил: так быстрее и ВСЕГДА список вываливается. Или не вываливается (если нечему или нарушен формат), тогда внизу, в окошке, где ошибки, появляется "грозная" надпись...
Shift не помогает, и никаких надписей не выводится, но после первой точки список появляется без Shift`а!
Он только после второй не хочет.
Возможно никак не ругается потому, что при написании кода, объекта реально не существует.

P.S. Мож я как-то не так Shift нажимал?

Последний раз редактировалось Format C:; 14.03.2007 в 22:44.
Format C: вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не понятно, как создавать таблицы в CSS. Ulan HTML и CSS 4 17.07.2008 16:18
Как создавать закладки? raz Общие вопросы Delphi 5 31.03.2008 13:26
Как создавать визуальные компоненты в режиме Runtime Sulik Общие вопросы .NET 1 26.03.2008 19:52
Как создавать и использовать скины SeRhy Общие вопросы Delphi 3 23.01.2008 22:36
Как в Delphi создавать и использовать скины для програм SeRhy Помощь студентам 3 20.12.2007 20:59