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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.07.2009, 17:14   #1
mixer94
Пользователь
 
Аватар для mixer94
 
Регистрация: 07.06.2009
Сообщений: 40
По умолчанию "Родительский" вопрос

У меня такой вопрос к вам...
Этот кусок кода вставляет запись в ListView.Во второй столбец вставляет любой компонент...
Код:
const
pbColumnIndex = 1;
pbMax = 100;
var
li : TListItem;
lv : TListView;
pb : TImage;
pbRect : TRect;
begin
lv := ListView1;
li := lv.Items.Add;
li.Caption := 'Item ' + IntToStr(lv.Items.Count);
pb := TImage.Create(nil);
//Настройка компонента
pb.Name := 'ListImg1';
pb.OnClick := ListImg1Click;
//
pb.Parent := lv;
li.Data := pb;
pbRect := li.DisplayRect(drBounds);
pbRect.Left := pbRect.Left +
lv.Columns[-1 + pbColumnIndex].Width;
pbRect.Right := pbRect.Left +
lv.Columns[pbColumnIndex].Width;
pb.BoundsRect := pbRect;
listheight := False;
Вопрос такой: если к примеру я захочу поменять картинку из другой процедуры как мне это сделать?
Т.е. выполнение команды ListImg1.Picture.LoadFromFile('...' ) приводит к ошибке...
Я пока начинающий программист, прошу не ругать)) - многово не знаю...
Да, и ещё если не сложно поясните что делает каждая строка кода, и нет ли где лишних строк...
mixer94 вне форума Ответить с цитированием
Старый 11.07.2009, 17:22   #2
Mixasik
New Delphi Coder
Форумчанин Подтвердите свой е-майл
 
Аватар для Mixasik
 
Регистрация: 20.07.2008
Сообщений: 874
По умолчанию

Потому, что pb во-первых, локальная переменная и живет только во время выполнения данной процедуры, а во-вторых, как мне кажется нельзя к ней обратиться по имени ListImg1, надо TImage(FindComponent('ListImg1')).p icture.LoadFromFile('...');
Даже не могу тут пояснить, что-то разумное, так как не пойму смысла всего вышеизложенного.
Страх это слабость и потому, кто испугался уже побежден.

Последний раз редактировалось Mixasik; 11.07.2009 в 17:26.
Mixasik вне форума Ответить с цитированием
Старый 11.07.2009, 17:32   #3
mixer94
Пользователь
 
Аватар для mixer94
 
Регистрация: 07.06.2009
Сообщений: 40
По умолчанию

Цитата:
Сообщение от Mixasik Посмотреть сообщение
Потому, что pb во-первых, локальная переменная и живет только во время выполнения данной процедуры, а во-вторых, как мне кажется нельзя к ней обратиться по имени ListImg1, надо TImage(FindComponent('ListImg1')).p icture.LoadFromFile('...');
Даже не могу тут пояснить, что-то разумное, так как не пойму смысла всего вышеизложенного.
Спасибо за ответ, смысла я сам не понимаю так как не я писал это...ну фик с ним..
TImage(FindComponent('ListImg1')).p icture.LoadFromFile('...') работать тоже отказывается..
А можно сделать глобальный массив и обращаться к нему???
mixer94 вне форума Ответить с цитированием
Старый 11.07.2009, 17:52   #4
Mixasik
New Delphi Coder
Форумчанин Подтвердите свой е-майл
 
Аватар для Mixasik
 
Регистрация: 20.07.2008
Сообщений: 874
По умолчанию

Цитата:
Сообщение от mixer94 Посмотреть сообщение
Спасибо за ответ, смысла я сам не понимаю так как не я писал это...ну фик с ним..
TImage(FindComponent('ListImg1')).p icture.LoadFromFile('...') работать тоже отказывается..
А можно сделать глобальный массив и обращаться к нему???
Можно проверять if (FindComponent('ListImg1') <> nil) then TImage(FindComponent('ListImg1')).p icture.LoadFromFile('...')
То есть если компонент найдет то работаем с ним. Этот метод в любом случае должен работать с глобальной переменной. Да массив создать можно и работать уже с ним, не забывая создать объекты в массиве, ато будет access violation.
Страх это слабость и потому, кто испугался уже побежден.
Mixasik вне форума Ответить с цитированием
Старый 11.07.2009, 21:05   #5
mixer94
Пользователь
 
Аватар для mixer94
 
Регистрация: 07.06.2009
Сообщений: 40
По умолчанию

Цитата:
Сообщение от Mixasik Посмотреть сообщение
Можно проверять if (FindComponent('ListImg1') <> nil) then TImage(FindComponent('ListImg1')).p icture.LoadFromFile('...')
То есть если компонент найдет то работаем с ним. Этот метод в любом случае должен работать с глобальной переменной. Да массив создать можно и работать уже с ним, не забывая создать объекты в массиве, ато будет access violation.
какая разница существует ли объект...по идее существовать должен...
да ладно, проблема решена - limgs : array[0..255] of TImage и всё ок....
mixer94 вне форума Ответить с цитированием
Старый 11.07.2009, 21:22   #6
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

все правильно, только массив лучше динамический
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Паскаль.Программа "Верификация", "Кака бригадиру разделить заработанные деньги?".Сложные Valik102 Помощь студентам 11 23.06.2009 15:30
Паскаль.Программа "Верификация", "Кака бригадиру разделить заработанные деньги?".Сложные Valik102 Паскаль, Turbo Pascal, PascalABC.NET 3 23.06.2009 09:11
блок "cont" с права не принимает значение "margin: 10px;" которое описано в body tabikA HTML и CSS 5 24.02.2009 21:50
Под прикрытием "кризиса" наши доблестные "управители" хотят утопить нас в радиоактивных отходах mihali4 Свободное общение 1 17.01.2009 01:43
если пользователь наберет какой-то другой символ не "y" или "n" и нажмет enter, программа проигнорирует skobets Общие вопросы C/C++ 2 03.06.2008 06:51