Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2009.11.01;
Скачать: [xml.tar.bz2];

Вниз

Уничтожение динамического 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.55 MB
Время: 0.007 c
2-1253078993
Knight
2009-09-16 09:29
2009.11.01
Несколько глупых вопросов по потокам...


6-1209058825
keymaster
2008-04-24 21:40
2009.11.01
Авторизация на FTP через AD


3-1228999081
Pavel
2008-12-11 15:38
2009.11.01
Добавление картинки в базу


15-1252052990
БарЛог
2009-09-04 12:29
2009.11.01
Девайс лок для виндовс


15-1252016044
Германн
2009-09-04 02:14
2009.11.01
Протокол EtherCat





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский