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

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

26.05.2015, 15:04. Показов 6676. Ответов 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
21 / 9 / 4
Регистрация: 15.12.2014
Сообщений: 663
14.06.2015, 16:39  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от volvo Посмотреть сообщение
Чем не устраивает
Не знаю, с чего начать. Написал к основному проекту, что бы не прыгало за пределы карты
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
          if(pm.d[devLoop].d_X[devAdr]<=Screen->Width)
            {
                Form26->Panel22->Left = 0;
            }else
           if((pm.d[devLoop].d_X[devAdr]>Screen->Width)&&
               (pm.d[devLoop].d_X[devAdr]<=Form26->Panel22->Width - Screen->Width))
           {
                Form26->Panel22->Left = Form26->Width/2 - pm.d[devLoop].d_X[devAdr];
           }else
           if(pm.d[devLoop].d_X[devAdr]>Form26->Panel22->Width - Screen->Width)
           {
                Form26->Panel22->Left = Screen->Width - Form26->Panel22->Width;
           }
  //------------------------------------------------------------------------------------
           if(pm.d[devLoop].d_Y[devAdr]<=Screen->Height)
            {
                Form26->Panel22->Top = 0;
            }else
           if((pm.d[devLoop].d_Y[devAdr]>Screen->Height)&&
               (pm.d[devLoop].d_Y[devAdr]<=Form26->Panel22->Height - Screen->Height))
           {
                Form26->Panel22->Top = Form26->Height/2 - pm.d[devLoop].d_Y[devAdr];
           }else
           if(pm.d[devLoop].d_Y[devAdr]>Form26->Panel22->Height - Screen->Height)
           {
                Form26->Panel22->Top = Screen->Height - Form26->Panel22->Height;
           }
чуть голову не сломал. Еще на пиксель смещалось, когда за 20 секунд 500 событий, но это решил. В 22 панеле рисунок карты. 22 панель вручную поставил размеры, как у карты. По авто размеру смещались красные панельки почемуто на пиксель.
Цитата Сообщение от volvo Посмотреть сообщение
насколько сильно будет масштабироваться карта?
хотелось бы в 2 или в 3 раза меньше или в 2 или 3 раза больше. В идеале вообще колесом.
Цитата Сообщение от volvo Посмотреть сообщение
И что ты на них увидишь при этом?
ну тут чисто эстетика. Не моя прихоть. Типа когда все ок - вся карта видна. И там разрешение большое будет экрана. Я надеюсь. Да и вообще, хотелось бы научиться это делать.
0
21 / 9 / 4
Регистрация: 15.12.2014
Сообщений: 663
16.06.2015, 17:25  [ТС]
Цитата Сообщение от Sergey_03 Посмотреть сообщение
не создавался динамический объект, если по тем координатам, по которым он будет визуализирован, аналогичный объект уже есть.
Можно вот так сделать?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
CrRedPanel=1;
for(int i = 500; i < redpanel; i++)
    {
        if ((Panel[i]->Left==OX)&&(Panel[i]->Top==OY-20))
            {
                CrRedPanel=0;
            }
    }
if(CrRedPanel==1)
    {
        Panel[redpanel]= new TPanel(Form26->Panel22);
        Panel[redpanel]->Width = 50;
        Panel[redpanel]->Height = 10;
        Panel[redpanel]->Color = clRed;
        Panel[redpanel]->Left = OX;
        Panel[redpanel]->Top = OY-20;
        Panel[redpanel]->Parent=Form26->Panel22;
        redpanel++;
    }
Правильно это будет? Работать - работает, но есть сомнения..
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33474 / 21573 / 8249
Регистрация: 22.10.2011
Сообщений: 37,029
Записей в блоге: 12
16.06.2015, 18:49
Правильно будет выкинуть все, что есть, и написать заново. Но, поскольку это нереализуемо, то пускай будет так, как ты написал, если работает. Только я бы еще добавил:

C++
1
for(int i = 500; CrRedPanel && i < redpanel; i++) // чтобы как только нашли панель и сбросили CrRedPanel в 0, выйти из цикла
, негоже бегать по циклу, если что-то уже найдено, и результат очевиден...
1
21 / 9 / 4
Регистрация: 15.12.2014
Сообщений: 663
17.06.2015, 07:34  [ТС]
А можно как то синхронизировать мигание панелей? По мере создания и обхода по таймеру, на сканирование панелей - они мигают в разнобой, в смысле одни появляются, другие исчезают в одно и тоже время. Некрасиво получается. И по масштабированию не догнать..Чушь какая то получается Буду благодарен за наводку. Спасибо.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33474 / 21573 / 8249
Регистрация: 22.10.2011
Сообщений: 37,029
Записей в блоге: 12
17.06.2015, 09:48
Можно посмотреть код переключения видимости панелек по таймеру? Если panel->Visible = !panel->Visible - то да, так и будет. А вот если где-то завести переменную bool AlarmVisible (либо глобально, либо в классе формы), по таймеру сначала изменять ее значение на противоположное, и тут же выставлять видимость нужной панели в AlarmVisible - то все панельки будут мигать в унисон.
1
21 / 9 / 4
Регистрация: 15.12.2014
Сообщений: 663
19.06.2015, 11:29  [ТС]
Цитата Сообщение от volvo Посмотреть сообщение
Если panel->Visible = !panel->Visible - то да, так и будет
Да, именно так, уже разобрался. Спасибо.
C++
1
2
3
4
5
6
7
    AlarmVisible = !AlarmVisible;
    for(int ia = 500; ia < Alarmpanel; ia++)
        {
            if (AlarmVisible)
            Panel[ia]->Visible = 1;
            else Panel[ia]->Visible = 0;
        }
Цитата Сообщение от Sergey_03 Посмотреть сообщение
currPanel = static_cast<TPanel*>(im->Parent);// <--- Вот оно. Запомнил, за чем следить
А если у меня при наступлении события динамически создается две панели -
Panel[Alarmpanel]= new TPanel(Form26->Panel22);
PanelDiscr[Alarmpanel]= new TPanel(Form26->Panel22);
первая мигает, вторая Visible=0
Как сделать, чтобы при наведении на мигающую панель вторая становилась в Visible=true
И так и сяк - запутался..
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33474 / 21573 / 8249
Регистрация: 22.10.2011
Сообщений: 37,029
Записей в блоге: 12
19.06.2015, 12:20
C++
1
2
3
4
5
6
7
8
9
10
11
void __fastcall TForm1::AlarmPanelMouseEnter(TObject *Sender) // не забудь добавить в класс формы
{
    PanelDiscr[static_cast<TPanel*>(Sender)->Tag]->Visible = true;
}
 
// и создание:
Panel[Alarmpanel]= new TPanel(Form26->Panel22);
Panel[Alarmpanel]->Tag = Alarmpanel;
Panel[Alarmpanel]->OnMouseEnter = AlarmPanelMouseEnter;
 
PanelDiscr[Alarmpanel]= new TPanel(Form26->Panel22);
1
21 / 9 / 4
Регистрация: 15.12.2014
Сообщений: 663
19.06.2015, 16:13  [ТС]
Да, все работает! Только PanelDiscr тоже мигает. Видимо, когда Panel в Visible = 0, не видит наведения мыши.
Я в OnMouseLeave для Panel
C++
1
PanelDiscr[static_cast<TPanel*>(Sender)->Tag]->Visible = 0;
написал

Добавлено через 1 час 57 минут
а возможно полупрозрачную панель создавать? Гуглил - мнения разнятся, но решения не нашел..
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33474 / 21573 / 8249
Регистрация: 22.10.2011
Сообщений: 37,029
Записей в блоге: 12
19.06.2015, 16:30
Цитата Сообщение от Sergey_03 Посмотреть сообщение
а возможно полупрозрачную панель создавать?
Нет
1
21 / 9 / 4
Регистрация: 15.12.2014
Сообщений: 663
19.06.2015, 17:20  [ТС]
Попробовал вместо TPanel* Panel[5000] использовать TImage* Panel[5000]. В принципе все тоже самое, только путь прописать до файла. Меня просто мысль посетила - может можно ослеживать OnMouseEnter и OnMouseLeave
панели22 по заданной области координат той или иной панельки(теперь пока картинки - координаты есть, размер тоже)? Тогда и мигание не будет мешать. Опять же через Tag может можно?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
19.06.2015, 17:20

Как получить родительский каталог относительно указанного пути
Как организовать обратный переход по папкам в С#? Например: 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() ...


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

Или воспользуйтесь поиском по форуму:
90
Ответ Создать тему
Новые блоги и статьи
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ Основная суть и тезисы по измерениям: 0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема. Объект не может перемещаться в 0D. 1D (Первое измерение):. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru