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

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

26.05.2015, 15:04. Показов 6203. Ответов 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
33399 / 21509 / 8236
Регистрация: 22.10.2011
Сообщений: 36,907
Записей в блоге: 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
33399 / 21509 / 8236
Регистрация: 22.10.2011
Сообщений: 36,907
Записей в блоге: 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
33399 / 21509 / 8236
Регистрация: 22.10.2011
Сообщений: 36,907
Записей в блоге: 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
33399 / 21509 / 8236
Регистрация: 22.10.2011
Сообщений: 36,907
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru