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

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

26.05.2015, 15:04. Показов 6886. Ответов 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
33479 / 21577 / 8250
Регистрация: 22.10.2011
Сообщений: 37,041
Записей в блоге: 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
33479 / 21577 / 8250
Регистрация: 22.10.2011
Сообщений: 37,041
Записей в блоге: 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
33479 / 21577 / 8250
Регистрация: 22.10.2011
Сообщений: 37,041
Записей в блоге: 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
33479 / 21577 / 8250
Регистрация: 22.10.2011
Сообщений: 37,041
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
Установка ChatGPT (Codex) на Windows без использования Microsoft Store
Fabien159 28.10.2026
Здравствуйте всем читающим! Опишу процесс установки ChatGPT (Codex) на Windows, если по каким-то причинам у вас не получается устанавить его через Microsoft Store. И так: 1. Скачиваем с. . .
Программное добавление префикса в нумерацию документов
Maks 27.10.2026
Реализация из решения ниже выполнена в самописной конфигурации на БСП (помощь начинающему коллеге). Задача: Программно добавить префикс в нумерацию документов. Решение: В модуле объекта. . .
После закрытия оутлука продолжает висеть процесс в диспетчере задач
Maks 27.10.2026
С недавнего времени в продакшене возникла проблема: при закрытии оутлука в диспетчере задач продолжал висеть процесс outlook. exe. Проблема возникла после установки MS Office 2021 LTSC на машинах, под. . .
Baragoz - DPS/HPS бот для WoW 3.3.5a, многоязычный
AmbA 26.10.2026
Хотите ещё ботов? У меня есть один! А я пока отдохну от него. https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=12062&stc=1&d=1793007952 Инструкция внутри. https:/ / youtu. be/ VpfFZSUDGnQ. . .
Особенности gif сгенерированных в Си
russiannick 21.10.2026
Рассмотрим генерацию gif файлов, которые в Си имеют свои особенности. Gif представляет собой графический формат популярный в интернете. Посмотрим на палитру. Gif файл сгенерированный в си отличается. . .
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/ TL DR Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru