Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.06.2008, 20:43   #1
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию Есть ли такой контрол в Дельфи?

Можно ли в Дельфи создать такие стандартные контролы? Не руками рисовать, а именно стандартный, как на картинке, чтобы выглядел соответсвующе смотря какая XP тема у пользователя.
Как я трекбар не крутил ничего такого не получилось.

The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Старый 06.06.2008, 20:48   #2
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Обычный трэкбар с манифестом....
B_N вне форума Ответить с цитированием
Старый 06.06.2008, 21:30   #3
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

В таком случае как сузить его внутреннюю часть до полоски? При этом чтобы ползунок остался видимым.
Как менять вид ползунка на квадратный?
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Старый 06.06.2008, 21:39   #4
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

А это зависит от того, с одной ли стороны метки. Стили TBS_TOP, TBS_BOTTOM, TBS_LEFT, TBS_RIGHT, в зависимости от TBS_VERT или TBS_HORZ для ползунка с указателем и TBS_BOTH для ползунка без указателя.
B_N вне форума Ответить с цитированием
Старый 06.06.2008, 21:55   #5
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

С видом ползунка разобрался, спасибо, проглядел.
А вот свойства меняющего ширину полосы в упор не вижу. Его что забыли добавить? В Дельфи у трекбара получается полоса широкая на всю ширину ползунка.
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Старый 06.06.2008, 22:05   #6
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

А-а.., сразу не понял, что речь про канал, как его называет, MS. Если память не подводит, его ширина привязана к размеру ползунка, который ставится через TBM_SETTHUMBLENGTH. (стиль TBS_FIXEDLENGTH должен быть установлен).

Последний раз редактировалось B_N; 06.06.2008 в 22:37.
B_N вне форума Ответить с цитированием
Старый 06.06.2008, 22:17   #7
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Кажется начинает проясняться, TBM_SETTHUMBLENGTH к этому в Дельфи свойство есть, и оно действительно привязано к ширине канала, а вот TBS_FIXEDLENGTH сейчас поищу, но вроде не припомню такого.

Нет такого, вот все свойства:
In TTrackBar
Frequency
LineSize
Max
Min
Orientation
PageSize
Position
SelEnd
SelStart
SliderVisible
ThumbLength
TickMarks
TickStyle
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог

Последний раз редактировалось mutabor; 06.06.2008 в 22:25.
mutabor вне форума Ответить с цитированием
Старый 06.06.2008, 22:35   #8
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

mutabor, вру Подводит память. Широкий канал включает стиль
TBS_ENABLESELRANGE (стиль), в канале можно при этом добавить "активный диапазон", а TBM_SETTHUMBLENGTH (сообщение) меняет только размер кубика. Если Дельфи про него не знает, то просто через SetWindowLong, TBS_ENABLESELRANGE - это обычный оконный стиль.

-------------------------

Да, ещё выше опечатался. "(стиль TBS_FIXEDLENGTH должен быть снят)." следует читать как (стиль TBS_FIXEDLENGTH должен быть установлен), исправляю.

Последний раз редактировалось B_N; 06.06.2008 в 22:37.
B_N вне форума Ответить с цитированием
Старый 06.06.2008, 23:22   #9
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Значит так, попробовал я в процедуре TTrackBar.CreateParams, это в модуле ComCtrls.pas, убрать стиль TBS_ENABLESELRANGE. Результата никакого. На всякий случай привожу три процедуры
TTrackBar.Create
TTrackBar.CreateParams //в ней я менял
TTrackBar.CreateWnd

Может еще чего подскажите?
На всякий случай уточню, мне нужно сделать "канал" узким, а "квадратик" побольше.
Код:
constructor TTrackBar.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  Width := 150;
  Height := 45;
  TabStop := True;
  FMin := 0;
  FMax := 10;
  FPosition := 0;
  FLineSize := 1;
  FPageSize := 2;
  FFrequency := 1;
  FSelStart := 0;
  FSelEnd := 0;
  FThumbLength := 20; //вот это свойство
  FTickMarks := tmBottomRight;
  FTickStyle := tsAuto;
  FOrientation := trHorizontal;
  ControlStyle := ControlStyle - [csDoubleClicks];
  FSliderVisible := True;
end;

procedure TTrackBar.CreateParams(var Params: TCreateParams);
const
  OrientationStyle: array[TTrackbarOrientation] of DWORD = (TBS_HORZ, TBS_VERT);
  TickStyles: array[Boolean, TTickStyle] of DWORD =
    ((TBS_NOTICKS, TBS_AUTOTICKS, 0), (TBS_NOTICKS, 0, 0));
  ATickMarks: array[TTickMark] of DWORD = (TBS_BOTTOM, TBS_TOP, TBS_BOTH);
begin
  InitCommonControl(ICC_BAR_CLASSES);
  inherited CreateParams(Params);
  CreateSubClass(Params, TRACKBAR_CLASS);
  with Params do
  begin
    Style := Style or OrientationStyle[FOrientation] or
      // Ignore tsAuto if more than MaxAutoTicks in the track bar range.
      // tsAuto is is ignored because the TRACKBAR_CLASS will paint,
      // as many tick marks as you ask for. Too many an it appears
      // the track bar has hung but it just painting very slowly. Since large
      // ranges can be accidentally entered in the object inpsector we just
      // have the control ignore them instead of hanging.
      TickStyles[FMax - FMin > MaxAutoTicks, FTickStyle] or
      // тут я строку закомментировал
      //ATickMarks[FTickMarks] or TBS_FIXEDLENGTH or TBS_ENABLESELRANGE;
      ATickMarks[FTickMarks] or TBS_FIXEDLENGTH;
    WindowClass.style := WindowClass.style and not (CS_HREDRAW or CS_VREDRAW) or
      CS_DBLCLKS;
    if not FSliderVisible then
      Style := Style or TBS_NOTHUMB;
  end;
end;

procedure TTrackBar.CreateWnd;
begin
  inherited CreateWnd;
  if HandleAllocated then
  begin
    SendMessage(Handle, TBM_SETTHUMBLENGTH, FThumbLength, 0);
    SendMessage(Handle, TBM_SETLINESIZE, 0, FLineSize);
    SendMessage(Handle, TBM_SETPAGESIZE, 0, FPageSize);
    SendMessage(Handle, TBM_SETRANGEMIN, 0, FMin);
    SendMessage(Handle, TBM_SETRANGEMAX, 0, FMax);
    UpdateSelection;
    SendMessage(Handle, TBM_SETPOS, 1, FPosition);
    SendMessage(Handle, TBM_SETTICFREQ, FFrequency, 1);
  end;
end;
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог

Последний раз редактировалось mutabor; 06.06.2008 в 23:25.
mutabor вне форума Ответить с цитированием
Старый 06.06.2008, 23:30   #10
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Цитата:
Сообщение от mutabor Посмотреть сообщение
Может еще чего подскажите?
На всякий случай уточню, мне нужно сделать "канал" узким, а "квадратик" побольше.
Ширина канала (если он есть, как таковой) привязана к размеру кубика. Что-то около 3/4.

Ну а чтобы его не было:

Код:
procedure TForm1.FormCreate(Sender: TObject);
const TBS_ENABLESELRANGE = $0020;
begin
    SetWindowLong(
            self.TrackBar1.Handle,
            GWL_STYLE,
            GetWindowLong(self.TrackBar1.Handle, GWL_STYLE) AND (NOT TBS_ENABLESELRANGE));

end;
Понятия не имею, есть ли в дельфи такое свойство, я тоже не нашёл. Так же, как и TBS_ENABLESELRANGE, не знаю, в каком он юните, поэтому здесь определил вручную.

Последний раз редактировалось B_N; 06.06.2008 в 23:40.
B_N вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
вводить цифры в эдит контрол и они должны по нажатию на кнопку переводится в листбокс molo4nik Общие вопросы C/C++ 12 09.12.2011 22:53
Как создать плавно сворачивающийся и раскрывающийся контрол, например панель. SkAndrew Общие вопросы Delphi 59 25.07.2011 00:11
Есть такой язык программирования Autolisp Эdvard Помощь студентам 6 25.04.2008 16:28
Внедрить контрол в FlexGrid beryllium Общие вопросы .NET 0 21.02.2008 01:09
где в VBA такой компонент ??? Noor Microsoft Office Excel 2 22.03.2007 12:10