Поиск:

Ответ в темуСоздание новой темы Создание опроса
> TrackBar, Как им работать? 
:(
    Опции темы
bncom
  Дата 17.3.2007, 13:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 170
Регистрация: 2.11.2005

Репутация: нет
Всего: 1



Подскажите как пользоваться TrackBar в Builder C++ ?
Я уже 4 книги прочитал по нему, но так и не нашел нормального описания как работать с ТрэкБаром (т.е. с ползунком).

Мне нужно с помощью него изменить значение 3 переменных.
--------------------
"Мы никогда не живем, мы лишь надеемся, что будем жить." Вольтер 
PM MAIL   Вверх
desivers
Дата 17.3.2007, 14:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 60
Регистрация: 15.3.2007

Репутация: 1
Всего: 1



Цитата

Мне нужно с помощью него изменить значение 3 переменных.


это как, чет не понимаю.

Основное свойство Position.
Также Min и Max так вот Position изменяется в этих двух пределах все они целые числа

и все остальные для визуального оформления

Это сообщение отредактировал(а) desivers - 17.3.2007, 14:15
PM MAIL   Вверх
bncom
Дата 17.3.2007, 14:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 170
Регистрация: 2.11.2005

Репутация: нет
Всего: 1



Ну а можно пример привести использования TrackBar ?  smile 

Ну вот для изменения пускай, одной переменной. 
--------------------
"Мы никогда не живем, мы лишь надеемся, что будем жить." Вольтер 
PM MAIL   Вверх
desivers
Дата 17.3.2007, 14:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 60
Регистрация: 15.3.2007

Репутация: 1
Всего: 1



void __fastcall TForm1::TrackBar1Change(TObject *Sender)
{
Label1->Caption = TrackBar1->Min;
Label3->Caption = TrackBar1->Max;
Label2->Caption = TrackBar1->Position;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
TrackBar1->Position = Random(100);
}
//---------------------------------------------------------------------------

также можно динамически задавать и Min Max


Это сообщение отредактировал(а) desivers - 17.3.2007, 15:01
PM MAIL   Вверх
bncom
Дата 18.3.2007, 12:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 170
Регистрация: 2.11.2005

Репутация: нет
Всего: 1



Извените за тупизну, но все равно я не понимаю...

Причем тут у вас Button вообще?

давайте я свой пример покажу, а вы покажите как менять с помощию ТрэкБара свойства переменных:

Код

void __fastcall TForm1::ProcessingClick(TObject *Sender)
{
        int J=0,JH=0,I=0,IH=0,mr=0,mg=0,mb=0; 
        int x_mr=0, x_mg=0, x_mb=0; 
        try
        {
                x_mr=StrToInt(Edit1->Text);
                x_mg=StrToInt(Edit2->Text);
                x_mb=StrToInt(Edit3->Text);
        }
        catch (EConvertError &e)
        {
                ShowMessage("Внимание! Обнаружена ошибка!\n\nCкорее всего причиной ошибки является:\n- не выбрано изображение\n- введены отрицательные числа\n- дробные числа введены через точку");
                return;
        }

        IH=Image1->Picture->Bitmap->Height; 
        JH=Image1->Picture->Bitmap->Width;  
        Image2->Picture->Bitmap->Height=IH;   
        Image2->Picture->Bitmap->Width=JH;    
        for(I = 0; I < IH; I++)
        for(J = 0; J < JH; J++)
        {
                mr=GetRValue(Image1->Canvas->Pixels[J][I]);  
                mg=GetGValue(Image1->Canvas->Pixels[J][I]); 
                mb=GetBValue(Image1->Canvas->Pixels[J][I]);

                mr=x_mr;    mg=x_mg;  mb=x_mb; // ВОТ ЭТИ ПЕРЕМЕННЫЕ НЕОБХОДИМО ИЗМЕНИТЬ С ПОМОЩЬЮ TRACKBAR

                if (mr>255) mr=255;  else mr=mr;
                if (mr<0)   mr=0;    else mr=mr;
                if (mg>255) mg=255;  else mg=mg;
                if (mg<0)   mg=0;    else mg=mg;
                if (mb>255) mb=255;  else mb=mb;
                if (mb<0)   mb=0;    else mb=mb;

                Image2->Picture->Bitmap->Canvas->Pixels[J][I] = RGB(mr, mg, mb);
                ProgressBar->Position = I*100/IH;
        }
}


--------------------
"Мы никогда не живем, мы лишь надеемся, что будем жить." Вольтер 
PM MAIL   Вверх
desivers
Дата 18.3.2007, 13:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 60
Регистрация: 15.3.2007

Репутация: 1
Всего: 1



тогда нужно поставить 3 трек бара и вовремя выполнения кода считать их Position а в Min поставить 0 и в Max 255

mr = TRACKBAR1->Position;
mg = TRACKBAR2->Position;
mb = TRACKBAR3->Position;

что хоть код делает
PM MAIL   Вверх
bncom
Дата 18.3.2007, 16:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 170
Регистрация: 2.11.2005

Репутация: нет
Всего: 1



Код контрастность bmp-изображения увеличивает.
--------------------
"Мы никогда не живем, мы лишь надеемся, что будем жить." Вольтер 
PM MAIL   Вверх
bncom
Дата 18.3.2007, 17:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 170
Регистрация: 2.11.2005

Репутация: нет
Всего: 1



Не, ты видимо опять меня не понял.

Мне значения mr, mg, mb надо изменять от нуля до 4. 
Я уже в инспекторе объекта задал MIN = 0, MAX = 4.

Теперь мне нужно чтоб ОДИН ползунок изменял значения этих переменных  mr, mg, mb.

Такое вот не помогло:

Код

mr = TrackBar1->Position;
mg = TrackBar1->Position;
mb = TrackBar1->Position;

--------------------
"Мы никогда не живем, мы лишь надеемся, что будем жить." Вольтер 
PM MAIL   Вверх
desivers
Дата 19.3.2007, 00:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 60
Регистрация: 15.3.2007

Репутация: 1
Всего: 1



вобщем незнаю как он работает но у меня он делат картинку то белой до черной вот код попробуй загрузить картинки 500х500 и во время выполнения подергать ползунок

Код

void __fastcall TForm1::Button1Click(TObject *Sender)
{
        int J=0,JH=0,I=0,IH=0,mr=0,mg=0,mb=0; 

        IH=Image1->Picture->Bitmap->Height; 
        JH=Image1->Picture->Bitmap->Width;  
        Image2->Picture->Bitmap->Height=IH;   
        Image2->Picture->Bitmap->Width=JH;    
        for(I = 0; I < IH; I++)
        for(J = 0; J < JH; J++)
        {
                mr=GetRValue(Image1->Canvas->Pixels[J][I]);  
                mg=GetGValue(Image1->Canvas->Pixels[J][I]); 
                mb=GetBValue(Image1->Canvas->Pixels[J][I]);

    [color=blue]mr = mg = mb = TrackBar1->Position;[/color]

                if (mr>255) mr=255;  else mr=mr;
                if (mr<0)   mr=0;    else mr=mr;
                if (mg>255) mg=255;  else mg=mg;
                if (mg<0)   mg=0;    else mg=mg;
                if (mb>255) mb=255;  else mb=mb;
                if (mb<0)   mb=0;    else mb=mb;

                Image2->Picture->Bitmap->Canvas->Pixels[J][I] = RGB(mr, mg, mb);
                ProgressBar1->Position = I*100/IH;
              [color=blue]Application->ProcessMessages();[/color]
        }
}


Это сообщение отредактировал(а) desivers - 19.3.2007, 00:38
PM MAIL   Вверх
RatHat
Дата 19.3.2007, 14:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вождь индейцев
*


Профиль
Группа: Участник
Сообщений: 234
Регистрация: 5.9.2005

Репутация: -1
Всего: 1



Код
TrackBar1->Min = 0; 
TrackBar1->Max = 4; 
TrackBar1->Frequency = 1;
mr=mg=mb=TrackBar1->Position;

--------------------
Ma a kis' hi ve'ist i wan'i na e'ho ho wan'i
PM MAIL   Вверх
bncom
Дата 19.3.2007, 17:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 170
Регистрация: 2.11.2005

Репутация: нет
Всего: 1



Сделал как вы подсказали - черная картинка получается.

Цитата
вобщем незнаю как он работает но у меня он делат картинку то белой то черной
Это потому что я кое-что забыл дописать. Исправляю свою оплошность. 
Привожу код работоспособный:

Код

void __fastcall TForm1::ProcessingClick(TObject *Sender)
{
        int J,JH,I,IH,mr,mg,mb; 

        IH=Image1->Picture->Bitmap->Height;
        JH=Image1->Picture->Bitmap->Width;
        Image2->Picture->Bitmap->Height=IH;
        Image2->Picture->Bitmap->Width=JH; 

        for(I = 0; I <IH; I++)
        for(J = 0; J < JH; J++)
        {
                mr=GetRValue(Image1->Canvas->Pixels[J][I]);
                mg=GetGValue(Image1->Canvas->Pixels[J][I]);
                mb=GetBValue(Image1->Canvas->Pixels[J][I]);

                //TrackBar1->Min = 0;
                //TrackBar1->Max = 4;
                //TrackBar1->Frequency = 0;
                //mr=mg=mb=TrackBar1->Position*1.5;

                mr=1.5*mr-50;    mg=1.5*mg-50;  mb=1.5*mb-50;

                if (mr>255) mr=255;  else mr=mr;
                if (mr<0)   mr=0;    else mr=mr;
                if (mg>255) mg=255;  else mg=mg;
                if (mg<0)   mg=0;    else mg=mg;
                if (mb>255) mb=255;  else mb=mb;
                if (mb<0)   mb=0;    else mb=mb;

                Image2->Picture->Bitmap->Canvas->Pixels[J][I] = RGB(mr, mg, mb);
                ProgressBar->Position = I*100/IH;
        }
}

Если убрать // в комментариях, а закоментировать mr=1.5*mr-50;    mg=1.5*mg-50;  mb=1.5*mb-50; то ползунок работать не будет, выдает черное изображение.

В чем может быть ошибка?
--------------------
"Мы никогда не живем, мы лишь надеемся, что будем жить." Вольтер 
PM MAIL   Вверх
RatHat
Дата 19.3.2007, 17:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вождь индейцев
*


Профиль
Группа: Участник
Сообщений: 234
Регистрация: 5.9.2005

Репутация: -1
Всего: 1



Да, забыл сказать, что я этот код вешал на событие OnChange TrackBar'а.
--------------------
Ma a kis' hi ve'ist i wan'i na e'ho ho wan'i
PM MAIL   Вверх
bncom
Дата 20.3.2007, 10:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 170
Регистрация: 2.11.2005

Репутация: нет
Всего: 1



Хорошо, вставил я свой код в событие OnChange, теперь при перемещении ползунка происходит действие, но оно какое-то странное:

1) ничего не делается
2) циклически повторяется
--------------------
"Мы никогда не живем, мы лишь надеемся, что будем жить." Вольтер 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0549 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.