Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.11.01;
Скачать: CL | DM;

Вниз

Уничтожение динамического TImage   Найти похожие ветки 

 
indiegod   (2009-09-07 00:38) [0]

Есть несколько TImage, которые создаются кликом по форме. Есть желание создать кнопку "очистить", которая бы убирала все эти TImage.
Вот как создаются эти копоненты:

numrry[i]:=TImage.Create(Form2);
numrry[i].Parent:=Form2;
numrry[i].Visible:=true;
numrry[i].Left:=Mouse.CursorPos.X - 10;
numrry[i].Top:=Mouse.CursorPos.Y - 55;
numrry[i].Height:=25;
numrry[i].Width:=25;


 
DVM ©   (2009-09-07 00:42) [1]

Заведи свой список (TList) куда заноси указатели на все созданные имейджи или воспользуйся встроенным списком Components у формы.


 
Германн ©   (2009-09-07 00:54) [2]


> indiegod   (07.09.09 00:38)
>
> Есть несколько TImage, которые создаются кликом по форме.
>  Есть желание создать кнопку "очистить", которая бы убирала
> все эти TImage.
> Вот как создаются эти копоненты:
>

Интересно а индекс "i" меняется с каждой новой картинкой или нет?


 
indiegod   (2009-09-07 00:59) [3]

должен
там стоит после присвоения картинки i:=i+1
правда программа выдает ошибку операции с плавающей точкой


 
indiegod   (2009-09-07 01:00) [4]

to DVM
а если немного подробней про список у формы?


 
DVM ©   (2009-09-07 01:02) [5]


> indiegod   (07.09.09 00:59) [3]

Ну вот тогда запомнив где то максимальное I проходи по своему массиву и уничтожай имейджи.


 
indiegod   (2009-09-07 01:03) [6]


> DVM ©   (07.09.09 01:02) [5]

> Ну вот тогда запомнив где то максимальное I проходи по своему
> массиву и уничтожай имейджи.


т.е простым .Destroy?


 
DVM ©   (2009-09-07 01:05) [7]


> indiegod   (07.09.09 01:00) [4]


> а если немного подробней про список у формы?

Когда компонент кладут (создают) на форму(е), он добавляется в список Components, который является свойством формы. Если пройтись по этому списку, то можно выбрать нужные компоненты по какому либо признаку и уничтожить их. Например, таким признаком может быть тип TImage или нечто, положенное в свойство Tag у создаваемых TImage.


 
DVM ©   (2009-09-07 01:06) [8]


> т.е простым .Destroy?

Ну да, только лучше Free. А вообще твой массив numrry тут лишний, т.к. см. [7]


 
indiegod   (2009-09-07 01:13) [9]


> Ну да, только лучше Free. А вообще твой массив numrry тут
> лишний, т.к. см. [7]

а если не через массив создавать, то как присваивать картинку компоненту?


 
DVM ©   (2009-09-07 01:19) [10]


> а если не через массив создавать, то как присваивать картинку
> компоненту?

Каждый раз надо будет производить поиск нужного имейджа в списке Components по какому то критерию. Можно оформить этот поиск в виде специального метода формы.


 
indiegod   (2009-09-07 01:26) [11]

а список этот он вообще как вызывается?


 
DVM ©   (2009-09-07 01:30) [12]


procedure TForm1.btn1Click(Sender: TObject);
var
 i: Integer;
begin
 for i := 0 to ComponentCount - 1 do
   begin
     if (Components[i] is TImage) then
       (Components[i] as TImageList).нужное_свойство_или_метод_имиджа;
   end;
end;


Только будь внимателен при удалении, цикл For - to тут не подходит. Лучше for - downto или while или repeate-until.


 
DVM ©   (2009-09-07 01:36) [13]


> as TImageList

читать как as TImage

автодополнение однако


 
indiegod   (2009-09-07 01:43) [14]

да, кстати, там на форме еще есть имейджи, этот метод их тоже стирает
и еще есть ошибка List Index is out of bunds


 
indiegod   (2009-09-07 01:44) [15]

метод в смысле способ


 
Германн ©   (2009-09-07 01:49) [16]


> indiegod   (07.09.09 01:43) [14]
>
> да, кстати, там на форме еще есть имейджи, этот метод их
> тоже стирает
> и еще есть ошибка List Index is out of bunds
>

Ты бы лучше изложил свою задачу.


 
KilkennyCat ©   (2009-09-07 01:50) [17]


> и еще есть ошибка List Index is out of bunds


> Только будь внимателен при удалении, цикл For - to тут не
> подходит. Лучше for - downto или while или repeate-until.
>
>


 
indiegod   (2009-09-07 01:55) [18]

объясняю задачу
есть картинка. скажем, схематичное изображение футбльного поля
при клике на ней в месте, где находится курсор, должна появится картинка с изображением, скажем мячика.
при клике на кнопке все ранее созданные таким образом изображения мячика должны пропасть

так вот как этот мячик нарисовать, я вроде как разобрался
а вот как эту кучу мячиков убрать?


 
Германн ©   (2009-09-07 02:03) [19]


> indiegod   (07.09.09 01:55) [18]
>
> объясняю задачу
> есть картинка. скажем, схематичное изображение футбльного
> поля
> при клике на ней в месте, где находится курсор, должна появится
> картинка с изображением, скажем мячика.
> при клике на кнопке все ранее созданные таким образом изображения
> мячика должны пропасть
>
> так вот как этот мячик нарисовать, я вроде как разобрался
> а вот как эту кучу мячиков убрать?

Какая "куча мячиков на футбольном поле?" Ты опять "объяснил вопрос", но не задачу! На футбольном поле может быть только один мячик!
:)


 
indiegod   (2009-09-07 02:05) [20]

я сказал, допустим, что мячиков
мне нужно выводить на экран в точке изображение
потом одним махом все эти созданные изображения стереть


 
Германн ©   (2009-09-07 02:11) [21]


> indiegod   (07.09.09 02:05) [20]
>
> я сказал, допустим, что мячиков
> мне нужно выводить на экран в точке изображение

Иногда лучше жевать чем говорить.


 
indiegod   (2009-09-07 02:15) [22]

оххх

ладно.

объясняю еще раз

есть схема поля. допустим, игрок №7 ударил с линии штрафной. мне нужно поставить точку с его номером в месте, откуда он бил. я кликаю по месту на картинке с полем, у меня генерится картинка с изображением футболки с номером 7

в конце тайма мне надо стереть все данные за прошлый тайм.
вопрос только в ом как?


 
Германн ©   (2009-09-07 02:21) [23]


> объясняю еще раз
>
> есть схема поля. допустим, игрок №7 ударил с линии штрафной.
>  мне нужно поставить точку с его номером в месте, откуда
> он бил. я кликаю по месту на картинке с полем, у меня генерится
> картинка с изображением футболки с номером 7
>
> в конце тайма мне надо стереть все данные за прошлый тайм.
>
> вопрос только в ом как?
>

Задачу, извини, так и не понял.
Но могу сказать, что совет
> DVM ©   (07.09.09 00:42) [1]
>
> Заведи свой список (TList) куда заноси указатели на все
> созданные имейджи

гарантировано сработает.


 
KilkennyCat ©   (2009-09-07 02:23) [24]

Я бы сделал так. Имеем три TBitMap и один массив координат.
TBitMap1 содержит фон , поле, например.
TBitmap2 содержит рисунок, мячика, например.
TBitmap3 - тут мы рисуем.

Итог:
Рисование:
Кидаем TBitMap1 на TBitMap3
Бежим по массиву координат и смотрим, если что-то там есть - по координатам кидаем TBitmap2 на TBitmap3
Кидаем TBitMap3 на канву контрола, который у нас для отображения, например TPanel.
Обработка клика:
Запоминаем в массив координату клика и убегаем на Рисование.
Удаление:
То же, что и рисование, но по массиву не бежим.

Все. И не надо кучи визуальных компонентов.


 
Германн ©   (2009-09-07 02:44) [25]


> KilkennyCat ©   (07.09.09 02:23) [24]
>
> Я бы сделал так.

Некоторые Питерцы делают ещё проще, кидают шарфик в морду.
:)


 
KilkennyCat ©   (2009-09-07 02:50) [26]

гм... у мня нет шарфика.


 
Германн ©   (2009-09-07 03:04) [27]


> KilkennyCat ©   (07.09.09 02:50) [26]
>
> гм... у мня нет шарфика.
>

Ну и слава богу! Ты ведь в первую очередь "нормальный человек".  Да и во вторую тоже. И во все следующие.
Но ведь автор привёл некий "футбольный" пример! Но так и не удосужился описать саму задачу.

P.S.
Я сам когда-то давно занимался спортом, спортивными играми на любительском уровне.


 
KilkennyCat ©   (2009-09-07 03:11) [28]

не знаю. вполне понятная задача. имеем некое поле, на которое можно в произвольном порядке отрисовать некие объекты, при необходимости - стереть все.


 
Германн ©   (2009-09-07 03:15) [29]


> KilkennyCat ©   (07.09.09 03:11) [28]
>
> не знаю. вполне понятная задача. имеем некое поле, на которое
> можно в произвольном порядке отрисовать некие объекты, при
> необходимости - стереть все.
>

Дык "все" автор стирать не хочет!
См. indiegod   (07.09.09 01:43) [14]
Но про футбол я молчу!


 
KilkennyCat ©   (2009-09-07 03:20) [30]

Можно и не все.

http://www.kilkennycat.ru/_SocioOpros.zip
Здесь небольшой пример, как коряво (ибо тогда я тогда я еще учился), но работоспособно можно работать по вышеуказанному мной способу. Включая перетаскивание мышкой. Требует RxLibrary


 
Anatoly Podgoretsky ©   (2009-09-07 09:17) [31]


> правда программа выдает ошибку операции с плавающей точкой

Надо бы сначала исправить ошибку, а то вместо одной будет уже две, собственно так это и произошло.


 
Плохиш ©   (2009-09-07 10:35) [32]


> Германн ©   (07.09.09 01:49) [16]
> Ты бы лучше изложил свою задачу.

Научиться кодить за счёт времени обитателей форума.

> Германн ©   (07.09.09 02:03) [19]
> На футбольном поле может быть только один мячик!

Хоттабыч с тобой не согласен ;-)


 
KilkennyCat ©   (2009-09-07 11:21) [33]


> Плохиш © (07.09.09 10:35) [32]
> Научиться кодить за счёт времени обитателей форума.

Разве это плохо?


 
DVM ©   (2009-09-07 11:32) [34]


> indiegod   (07.09.09 01:43) [14]
>
> да, кстати, там на форме еще есть имейджи, этот метод их
> тоже стирает
> и еще есть ошибка List Index is out of bunds

Я же тебе написал, удалять надо не все имиджи, а по критерию какому нибудь. Проще всего в Tag их положить по какому нибудь числу. Те имиджи у которых это число в теге есть удаляем, прочие - нет.

List Index is out of bunds возникает из-за того, что ты не вник в [12] последний абзац.


 
Плохиш ©   (2009-09-07 12:01) [35]


> KilkennyCat ©   (07.09.09 11:21) [33]
>
>
> > Плохиш © (07.09.09 10:35) [32]
> > Научиться кодить за счёт времени обитателей форума.
>
> Разве это плохо?

Я не знаю как расценивают другие бесцельно потраченное время.


 
KilkennyCat ©   (2009-09-07 14:34) [36]

Тогда объясни, зачем этот раздел форума. И могу за небольшую сумму убедить того, кто заставляет тебя бесцельно тратить время не заставлять это делать.


 
Anatoly Podgoretsky ©   (2009-09-07 15:51) [37]

Неужели для обучения начинающих?


 
clickmaker ©   (2009-09-07 15:55) [38]

> Anatoly Podgoretsky ©   (07.09.09 15:51)

чтобы мастера могли пальцы погнуть. По крайней мере, так считают многие начинающие -)


 
Плохиш ©   (2009-09-07 16:04) [39]


> KilkennyCat ©   (07.09.09 14:34) [36]
>
> Тогда объясни, зачем этот раздел форума.

Самый прикол, что все (недо-)начинающие упорно игнорируют раздел "Начинающим", они ж знают, что модераторам заняться больше нечем, чем переносить вопросы разжёванные в книжках из всех конференций в "Начинающим".


 
Anatoly Podgoretsky ©   (2009-09-07 16:09) [40]

Так и будет, пока они так считают, но славо богу есть адекватные люди и их большинство.



Страницы: 1 2 вся ветка

Текущий архив: 2009.11.01;
Скачать: CL | DM;

Наверх




Память: 0.57 MB
Время: 0.016 c
15-1251885076
boriskb
2009-09-02 13:51
2009.11.01
40 лет интернету


15-1252096207
Юрий
2009-09-05 00:30
2009.11.01
С днем рождения ! 5 сентября 2009 суббота


15-1250506938
sanx
2009-08-17 15:02
2009.11.01
Профилирование приложений в Delphi


15-1251964532
картман
2009-09-03 11:55
2009.11.01
Два билета на концерт Nightwish


15-1251533104
oldman
2009-08-29 12:05
2009.11.01
Всем привет, я вернулся.