Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.83/29: Рейтинг темы: голосов - 29, средняя оценка - 4.83
21 / 9 / 4
Регистрация: 15.12.2014
Сообщений: 663

Поместить картинку в DrawGrid из указанного пути

26.05.2015, 15:04. Показов 6934. Ответов 89
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем доброго дня. Имеется папка с картинками (50х50). Каждой картинке соответствует свой номер (наверное сделаю с помощью if). В простом гриде есть один столбец и в нем в строках (колличество строк>i>=0)занесены номера картинок. И есть аналогичный DrawGrid. Подскажите, как поместить картинки в строки (колличество строк>i>=0) DrawGrid из указанного пути (из папки на компе) и какие форматы возможны? Или таже задача с одной картинкой.
Может быть есть возможность не использовать DrawGrid, а просто создавать объект Image и помещать его на форму из указанного пути?
Спасибо.

Добавлено через 1 час 24 минуты
Вроде разобрался. По кнопке
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
TImage* Image[1000];
    int f = 1; int h = 20;
    for( int y = StringGrid1->FixedRows ; y < StringGrid1->RowCount; y++)
    {
       for(int z = 0; z<100; z++)
          {
             if (StringGrid1->Cells[0][y].Pos(z))
             {
 
               Image[f]=new TImage(Form1);
                Image[f]->Parent=Form1;
                Image[f]->Picture->Bitmap->LoadFromFile("12_50x50.bmp"); // из файла
                 Image[f]->Stretch=true;
                Image[f]->Left = 10;
                Image[f]->Top = h;
                Image[f]->Width = 50;
                Image[f]->Height = 50;
                    f++; h = h+60;
             }
        }
    }
Но появился еще вопрос. У меня имена файлов начинаются на тот или иной z
Можно както это использовать, задавать не полностью имя в пути к файлу, а только его часть, а именно первые два символа(этот z) ?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
26.05.2015, 15:04
Ответы с готовыми решениями:

Вставить картинку в поле DrawGrid
Всем привет. Подскажите плиз, а то гуглил гуглил, так и не получиось. Как вставить картинку в поле DrawGrid?

Обработка файла указанного в пути
#include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;math.h&gt; #include &quot;clanfun.h&quot; void main(int argc, char* argv) { int width,...

Открытие Word файла из указанного пути
Подскажите, может кто то уже делал открытие Word файла из указанного пути. Добавлено через 2 часа 23 минуты Поиск я делал :)

89
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33480 / 21578 / 8250
Регистрация: 22.10.2011
Сообщений: 37,041
Записей в блоге: 12
01.06.2015, 21:16
Студворк — интернет-сервис помощи студентам
BitBlt еще никто не отменял. Вот так, скажем:
C++
1
2
3
4
5
    std::auto_ptr<Graphics::TBitmap>bmp(new Graphics::TBitmap);
    bmp->SetSize(StringGrid2->Width, StringGrid2->Height);
    ::BitBlt(bmp->Canvas->Handle, 0, 0, StringGrid2->Width, StringGrid2->Height,
        ::GetDC(StringGrid2->Handle), 0, 0, SRCCOPY);
    bmp->SaveToFile("d:\\test\\pic.bmp");
я сохраняю в файл изображение StringGrid-а, и всего того, что находится над ним... Просто поменяй название компонента на свое (если это оконный компонент, разумеется) либо снимай скриншот формы и вырезай из него тот кусок, который тебе нужен
1
21 / 9 / 4
Регистрация: 15.12.2014
Сообщений: 663
02.06.2015, 22:01  [ТС]
а кокой include нужен для этого?

Добавлено через 9 минут
Подключил #include <memory>
Карту тоже в панель поместил и панель на задний план.
Все работает. Спасибо!

Добавлено через 23 часа 6 минут
Еще такой вопрос. У меня есть таймер, который хочет заставлять эти панельки мигать. Возможно передавать в один этот таймер вновь созданные панели? Например у меня есть Panel1, созданная изначально на форме. С ней проблем нет. Через таймер мигает. А как быть с динамически созданными панелями? Или для каждой из них таймер тоже создавать?
0
управление сложностью
 Аватар для Почтальон
1693 / 1306 / 259
Регистрация: 22.03.2015
Сообщений: 7,545
Записей в блоге: 5
02.06.2015, 22:04
Цитата Сообщение от Sergey_03 Посмотреть сообщение
А как быть с динамически созданными панелями? Или для каждой из них таймер тоже создавать?
Смею предположить, что в таком случае придется пилить свой класс, который включает в себя таймер, и мигающую панель, но это как предположение
1
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33480 / 21578 / 8250
Регистрация: 22.10.2011
Сообщений: 37,041
Записей в блоге: 12
02.06.2015, 22:42
Sergey_03, Создай перехватчик, у каждой панели будет у тебя таймер. А вообще - надо смотреть, как должны мигать панели, и какой интервал у таймера. И сколько панелей. Может и одним таймером обойтись (как вариант - сделать интервал таймера в 20 раз чаще, чем интервал мигания панелей, и по каждому первому тику показывать/гасить какую-то часть панелек, по каждому второму - другую часть, и так далее)
1
21 / 9 / 4
Регистрация: 15.12.2014
Сообщений: 663
02.06.2015, 22:49  [ТС]
частота - секунда. колличество мигающих панелей не известно. любая может замигать, если тревога по её адресу прошла. я брал обычную панель, делал её красной размером 10 на 10 и в зависимости от сработки менял её координаты на координаты одной и созданных панелек. таким образом она мигала в углу той или иной панельки. но проблема в том, что при наступлении следующего события надо, чтобы все прошлые тревоги тоже мигали, а так она просто переносится с панельки на панельку. панелек с картинками может создаваться очень много обычно это штук 500, но в зависимости от проекта до 10000 и каждая из них может сработать.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33480 / 21578 / 8250
Регистрация: 22.10.2011
Сообщений: 37,041
Записей в блоге: 12
02.06.2015, 22:52
Все панели могут мигать одновременно? Тогда просто по каждому тику таймера пробегаться по всем панелям, и, если панель помечена как "тревожная" (она же как-то помечена, правда?) - то рисовать/скрывать в ее углу значок.
1
21 / 9 / 4
Регистрация: 15.12.2014
Сообщений: 663
02.06.2015, 23:00  [ТС]
идея такая и есть и работает. каждая панелька помечена в плане её координат. они передаются в общую структуру события и если это событие - тревога(например) по этим координатам или она или что то 10 на 10, должно мигать. в реальных условиях. они конечно все мигать не будут. максимум штук 50. но хотелось бы иметь такую возможность чисто теоретически.
Цитата Сообщение от volvo Посмотреть сообщение
Тогда просто по каждому тику таймера пробегаться по всем панелям,
а каким образом? они же динамически создаются.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33480 / 21578 / 8250
Регистрация: 22.10.2011
Сообщений: 37,041
Записей в блоге: 12
02.06.2015, 23:02
И чего? Массива что-ли нет, где все указатели на динамически созданные панели хранятся?
1
21 / 9 / 4
Регистрация: 15.12.2014
Сообщений: 663
02.06.2015, 23:12  [ТС]
Идея очень хорошая. Я попробую реализовать. Пока мне мало понятно, как это сделать. В цикле как то выяснять, сколько и какие панельки созданы. У меня получилось создавать в случае наступления тревоги красные панельки 10 на 10 и привязывать их к тем или иным координатам. Но как заставить их мигать по одному таймеру - пока не знаю. Там суть - пришла первая тревога - замигала панелька в нужном месте, следующая тревога пришла - первая панелька продолжает мигать и замигала вторая в нужном месте. И так далее. Не мигая(просто чтобы они появлялись - получается.)
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33480 / 21578 / 8250
Регистрация: 22.10.2011
Сообщений: 37,041
Записей в блоге: 12
02.06.2015, 23:40
Цитата Сообщение от Sergey_03 Посмотреть сообщение
Не мигая(просто чтобы они появлялись - получается.)
Прекрасно. Пришла тревога - сгенерировал панельку 10*10 красного цвета в нужных координатах, указатель на нее затолкал в массив (или список, что удобнее - тебе решать). По тику таймера просто ходишь по всему массиву этих красных панелек и делаешь
C++
1
2
for(int i = 0; i < alarmCount; i++)
  AlarmPanels[i]->Visible = !AlarmPanels[i]->Visible;
Все очень просто...
1
21 / 9 / 4
Регистрация: 15.12.2014
Сообщений: 663
02.06.2015, 23:42  [ТС]
Во как интересно. Спасибо. Попробую!
0
21 / 9 / 4
Регистрация: 15.12.2014
Сообщений: 663
04.06.2015, 10:25  [ТС]
Сделал пробу отдельно все работает. Перенес к себе - не работает. Компилится без ошибок. Глобально в дефайнах объявил
C++
1
2
TPanel* Panel[5000];
int redpanel=500;
Там, где происходит событие (Form11)
C++
1
2
3
4
5
6
7
8
Panel[redpanel]= new TPanel(Form26->Panel22);
Panel[redpanel]->Width = 29;
Panel[redpanel]->Height = 17;
Panel[redpanel]->Color = clRed;
Panel[redpanel]->Parent=Form26->Panel22;
Panel[redpanel]->Left = pm.d[devLoop].d_X[devAdr];
Panel[redpanel]->Top = pm.d[devLoop].d_Y[devAdr];
redpanel++;
На самой форме графики (Form26) в таймере
C++
1
2
3
4
5
void __fastcall TForm26::Timer10Timer(TObject *Sender)
{
    for(int i = 500; i < redpanel; i++)
    Panel[i]->Visible = !Panel[i]->Visible;
}
таймер включен.
панельки создаются, отображаются правильно и там, где нужно, но не мигают. Почему - непонятно..
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33480 / 21578 / 8250
Регистрация: 22.10.2011
Сообщений: 37,041
Записей в блоге: 12
04.06.2015, 11:22
Раз на тестовом работает, то, чтобы разобраться с конкретно этим случаем, боюсь, нужно иметь в наличии весь проект.
1
21 / 9 / 4
Регистрация: 15.12.2014
Сообщений: 663
04.06.2015, 11:26  [ТС]
А нельзя как то попробовать работу таймера перенести в 11-ю форму? видимо значение redpanel в него не попадает. Вообще странно.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33480 / 21578 / 8250
Регистрация: 22.10.2011
Сообщений: 37,041
Записей в блоге: 12
04.06.2015, 11:47
В хидере указал extern int redpanel, чтобы с других форм был доступ?
1
21 / 9 / 4
Регистрация: 15.12.2014
Сообщений: 663
04.06.2015, 13:03  [ТС]
Да, работает. Спасибо. А можно заставить работать gif анимацию в image? гружу, но не работает. отображается только статично.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33480 / 21578 / 8250
Регистрация: 22.10.2011
Сообщений: 37,041
Записей в блоге: 12
04.06.2015, 13:07
А вот с этим у 2009-го могут быть проблемы. Попробуй: Ребят, киньте нормальный компонент для просмотра гифок! , но я почти уверен, что не получится, и придется по таймеру менять статичные картинки.
1
04.06.2015, 13:07

Не по теме:

sorry

0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33480 / 21578 / 8250
Регистрация: 22.10.2011
Сообщений: 37,041
Записей в блоге: 12
04.06.2015, 13:08
nick42, в цикле меняется видимость панелей, которые должны мигать. Их просто больше одной... И до следующего тика таймера.
0
21 / 9 / 4
Регистрация: 15.12.2014
Сообщений: 663
04.06.2015, 13:10  [ТС]
Цитата Сообщение от volvo Посмотреть сообщение
придется по таймеру менять статичные картинки.
жаль. не удастся обхитрить.)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
04.06.2015, 13:10

Как получить родительский каталог относительно указанного пути
Как организовать обратный переход по папкам в С#? Например: 2 папка лежит в первой, мне необходимо из 2 выйти в первую и там уже...

Копирование картинки из drawgrid в drawgrid
В общем имеется два компонента drawgrid. В один компонент загружены картинки через массив Bitmap. Как можно сделать так, чтобы при нажатии...

Картинку из БД поместить в кнопку
Мне нужно сделать тест по формулам. Формулы я поместил картинками в бд. Как можно из бд в кнопку передать картинку? Поля в таблице vop,...

Поместить текст под картинку
Как можно поместить текст под картинку? &lt;table class=&quot;table_folder&quot;&gt; &lt;tr&gt; &lt;td&gt;&lt;a class=&quot;text&quot; href=&quot;#&quot;&gt;&lt;img...

Поместить картинку в центре виджета
Немного не понимаю как сделать. Есть скрипт ротации баннеров, немогу отцентрировать &lt;script&gt; var banner = new Array() ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Новые блоги и статьи
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . . Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
Красочные поля с номером страницы svg+background-image
russiannick 04.11.2026
Красочные поля с номером страницы не менее важны чем в эпоху бумажных книг. Посему спешу представить почтеннейшей публике этот важный инструмент который эти поля и формирует. В процессе разработки. . .
Вступаем в новую фазу генерации favicons, векторную.
russiannick 02.11.2026
Теперь нет нужды скрывать что используется простой svg. Исходный код изображения помещаем в поле и жмем кнопку. Исходник преобразуется в вид корректный для помещения в favicon или в url(). Нажатие. . .
Генератор паролей (вариант №4)
Maks 01.11.2026
После публикации 3-го варианта генератора паролей, разослал его своим коллегам (с целью оценки), в итоге были получены следующие рекомендации: 1. Вернуть возможность использования знаков | 1 l I;. . .
Генератор паролей (вариант №3)
Maks 30.10.2026
Финальная версия генератора паролей 1С. Доработка решения в этот раз коснулась только визуальной части, а именно, добавлен реквизит ДопПараметры (тип Булево), который скрывает/ отображает реквизиты:. . .
Магическое мышление и магия, современная наука не отличима от магии (говорит ИИ Джемени)
zorxor 30.10.2026
Джемени, расскажи, пожалуйста, что такое магическое мышление, что такое магия, почему современная наука чем-то напоминает магию? Фраза «Любая достаточно развитая технология неотличима от магии». . .
За какое время ИИ может подобрать пароль по хешу (рассказывает Джемени ИИ)
zorxor 30.10.2026
Расскажи, Джемени, если известен хэш МД5, например, за сколько ИИ сможет подобрать соответствующий пароль? Искусственный интеллект (ИИ) может подобрать простой или средний по сложности пароль по. . .
Кто убил Suno? Почему наше солнышко погасло? (диалог с ИИ Джемени)
zorxor 30.10.2026
Как убивали Suno. Хронология. «Убийство» музыкальной нейросети Suno — это затяжной процесс, в котором технологический хайп стартапа разбился о жесткую реальность судебных исков от гигантов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru