Rrock

Forum Replies Created

Viewing 19 posts - 1 through 19 (of 19 total)
  • Author
    Posts
  • in reply to: Не хватает пары пикселей #44953
    Rrock
    Participant
    'Support' wrote:

    У той метки где не рисуются пиксели AutoSize установлено? Оно влияет?

    Действительно, если поставить в true, то проблема исправляется. К сожалению, не могу повторить действий, приводящих в багу, возможно, было связано c изменением Layout (Ccылка на один из постов).

    Прилагаю демку с багом.

    P.S. И все же баг есть. Чтобы его увидеть делаем следующее: кидаем новую TLabelFX. Отключаем autosize. Устанавливаем выравнивание taRightJustify. Далее меняем TLabelFX.Caption на другое значение, скажем, слово “Пример”. В дизайнере глюка не наблюдается, однако при запуске приложения глюк будет виден. Проблему решает только установка TLabelFX.AutoSize := true. Стоит отметить, что глюка бы не было, если после создания новой TLabelFX ее заголовок не был бы изменен.

    P.P.S. Еще один баг. Изменил файл в прицепе: на нем видно, что положение лейблов в дизайнере не совпадает с положением в рантайме.

    in reply to: Не хватает пары пикселей #44932
    Rrock
    Participant
    'Support' wrote:

    Сходу не получилось воосоздать такую ситуацию.

    Какая у Вас версия Delphi? Проблема существует при активных скинах или это не важно?

    Delphi 7. Скины активны. Кинул новую label и подобных проблем уже действительно нет.

    Rrock
    Participant
    'Support' wrote:

    Вы правы, WM_NCHITTEST не должно использоваться для определения текущих кнопок.

    Это будет изменено не ранее бвыпуска ближайшей Бета-версии, так как менять придется многое.

    Возможно ориентировочно предположить сроки?

    in reply to: Не хватает пары пикселей #44851
    Rrock
    Participant

    На всякий случай уточню: в 7.31 проблема не исправлена.

    Rrock
    Participant

    Отлично. Это позволит мне полноценно заюзать компонент.

    Замечание: обработчик события двойного клика мыши не содержит ее координаты. Поэтому пришлось реализовать собственный механизм обработки кликов, что, конечно, не есть удобно.

    Еще одно пожелание. Я на данный момент решил эту проблему небольшим изменением текущей версии исходников у себя на ПК, но могу озвучить, что мне требовалось: для гибкой настройки скинирования было бы неплохо иметь возможность указать, хотим ли мы вообще подсвечивать элементы при наведении и при одном щелчке, и если хотим, то как (ведь в компоненте уже есть некоторые настройки цветов, просто они работают, только когда НЕ установлены скины. Можно подумать, как интегрировать эти вещи). И еще для меня было бы круто, если бы я мог указать, в каком случае элемент считать выделенным (в моем случае это происходит по двойному щелчку, а не по одинарному): т.е. некоторое свойство типа SelectEvent и значения (seOnSingleClick, seOnDoubleClick).

    P.S. Лично мне не очень к спеху, т.е. пара недель еще есть на изменения программы. Но если какие-то из вышеперечисленных идей собираются быть реализованными в этот срок, то я бы хотел узнать об этом, чтобы не править исходники самому (ведь если будут сделаны хинты, я обязательно обновлюсь), а юзать, так сказать, официальную версию от KSS. 🙄

    Rrock
    Participant

    Хинтов над длинными элементами списка не ожидается?

    Rrock
    Participant
    'Torbins' wrote:

    Сами файлы скинов легко редактировать с помощью ASkinEditor. Только учтите, что стандартные скины часто обновляются.

    Так можно ли? Как? ASkinEditor предлагает открыть файлы .dat и не открывает .asz, в которых распространяются стандартные скины.

    in reply to: Кнопка – оборотень… #44652
    Rrock
    Participant

    Зафиксено в AC_7.30

    Rrock
    Participant

    Очень хотелось бы видеть хинт для урезанных элементов (ViewStyle = vsReport), как это делается в sListView.

    Rrock
    Participant

    Почему-то со второй колонки начинается принудительное выравнивание элементов по правому краю. Код:

    Code:
    if ListColumn.Index = 0 then begin
    OutText := Caption;
    Alignment := DT_LEFT;
    end
    else if (SubItems.Count > 0) and (SubItems.Count >= ListColumn.Index-1) then begin
    OutText := SubItems[ListColumn.Index-1];
    Alignment := DT_RIGHT;
    end
    else begin
    OutText := '';
    Alignment := DT_RIGHT;
    end;

    Три часа ушло на отыскание места бага неправильной обрезки текста (я в OnItemPaint делал его жирным). А оно вот тут: строка 2310. Вместо

    Code:
    OutText := CutText(acListView.Canvas, OutText, WidthOf(TxtRec));

    должно быть

    Code:
    OutText := CutText(OutCanvas, OutText, WidthOf(TxtRec));

    Из-за этого неправильно производилось обрезание текста, который был изменен в OnItemPaint. Жуть!!! Я уже был ПОЧТИ уверен, что проблема в CutText, но корректность работы KSSDemo.exe меня убивала…Поэтому собственно баг и обнаружен 🙄

    Rrock
    Participant

    Аналогичное поведение (необработка кликов на кнопки меню формы) прослеживается, если эти две формы запущены из разных приложений.

    Причина бага: я считаю, кнопка меню не должна подсвечиваться, когда ей посылается сообщение WM_NCHITTEST. Ведь это сообщение еще не означает движение мыши. Когда же происходит реальное движение мыши, то окну помимо WM_NCHITTEST посылается WM_SETCURSOR и WM_MOUSEMOVE. Вот на два последние события и стоит реагировать вместо WM_NCHITTEST, которое посылается намного чаще и связано с некоторыми другими действиями (например при вызове API-функции WindowFromPoint).

    В моем проекте очень важно исправить эту проблему. К сожалению, поскольку исходники общего скинирования не доступны, то вышеописанное – максимум, что я смог выяснить. Надеюсь, удалось понять причину проблемы.

    Rrock
    Participant
    'KSS' wrote:

    Новая версия.

    Изменения:

    • Добавлено событие OnItemPaint. Вызывается перед отрисовкой каждого элемента списка и позволяет изменить шрифт и скины;

    Круто! Еще успел откатиться с TsListView 🙂

    Проблема: цвет шрифта не хочет меняться! (При изменении оного в OnItemPaint, остальные параметры этого шрифта для каждого элемента меняются). К сожалению, цвет шрифта не меняется даже если вот так изменить TextRect (хотя высота и устанавливается в 20):

    Code:
    procedure TextRect(Canvas: TCanvas; Text: string; Enabled,
    Hot: boolean; aRect: TRect; Flags: Cardinal; SkinIndex: integer;
    SkinData: TsCommonData);
    begin
    Canvas.Font.Height := 20;
    Canvas.Font.Color := clWhite;
    if SkinIndex >= 0 then
    WriteTextEx(Canvas, PChar(Text), Enabled, aRect, Flags, SkinIndex, Hot)
    else begin
    Canvas.Brush.Style := bsClear;
    acWriteTextEx(Canvas, PChar(Text), Enabled, aRect, Flags, SkinData, Hot, SkinData.SkinManager);
    end;
    end;

    Проблему смены цвета можно решить вот так (строка 2312):

    Вместо

    Code:
    TextRect(OutCanvas, OutText, true, Boolean(State > 0), TxtRec, Alignment, ItemSkinIndex, acListView.SkinData);

    Вставил

    Code:
    OutCanvas.TextRect(TxtRec, TxtRec.Left, TxtRec.Top, OutText);

    Правда до этих строк пришлось добавить строчку

    Code:
    OutCanvas.Brush.Style := bsClear;
    Rrock
    Participant
    'KSS' wrote:

    Нет, границы элементов разработчиком не меняются. А зачем понадобилось менять сдвиг элементов слева, они вроде хорошо подогнаны? 🙂

    Да, подобраны хорошо. Но ведь всегда найдутся такие пользователи, которые захотят что-то поменять. И именно потому, что стандартных компонентов с их стандартными настройками не хватает, люди и пользуются такими творениями, как ваше. Всегда очень приятно использовать компонент, позволяющий максимально гибко произвести настройки или в крайнем случае как-то выкрутиться.

    Делаю плей-лист для проигрывателя. Названия элементов длинные, поэтому сдвиг от левой границы уменьшает эргономичность. Какие проблемы при этом возникли при ипользовании TAcListView:

    1) Не настроить цвет шрифта элементов при скинировании

    2) Не произвести настройки по скинированию при наведении, одном клике, двух кликах. Как я понимаю, при скинировании, какой-то определенный элемент никак не выделить (тем же шрифтом, но концептуально это непросто организовать – я это понимаю).

    Что понравилось в TAcListView по сравнению со стандартным списком:

    1) Автоматизация группировки, возможность вставить красивые картинки для каждой группы

    2) Красивое скинирование при наведении на элементы.

    Почему, увы, вынужден выбрать sListView:

    Есть возможность установить свой обработчик на отрисовку каждого элемента и таким образом самому решить, как рисовать те или иные элементы (но при этом в рамках высоты на каждый элемент, т.е. группу другого размера, чем остальные элементы, вроде никак не сделать, но это не критично). Единственная проблема – в sListView приходится отключить стандартную прорисовку элементов и рисовать их самому, не знаю, как нарисовать скинированную прямоугольную область, но это не критично и можно выкрутиться картинками.

    Вывод: нелегкая эта работа – делать альтернативные компоненты. В любом случае, желаю успехов разработчикам. Уверен, что кому-нибудь, а может быть, и мне когда-то ваш компонент пригодится.

    Rrock
    Participant
    'KSS' wrote:

    У TacListItem и других элементов есть свойство Bounds: TRect – местоположение элемента на acListView (если он конечно видимый)

    Границы можно изменить? Поле Bounds readonly.

    in reply to: Запоминание нажатой кнопки #44544
    Rrock
    Participant

    Как говорится, красота требует жертв. Просто кнопочки у меня на панельке, и чтобы эффект от использования AlphaControls был максимально потрясающим, для этих кнопок был выбран скин BUTTON_HUGE. Соответственно, когда на кнопке фокус, она принципиально меняет свой цвет и тем самым разительно отличается от других.

    Спасибо за советы: действительно, как минимум два варианта исправляют эту ситуацию.

    1) Использование кнопок sSpeedButton

    Почему видимо на них и нет фокуса, так это наверное как раз потому, что они и предназначены быть кучей одинаковых кнопок в одной группе. Однако sSpeedButton все же имеет отличия от sButton, например тем, что не имеет свойств HotImageIndex, PressedImageIndex и т.д. но в моей ситуации этого не требуется, поэтому вариант устраивает

    2) Использование свойства TForm.ActiveControl формочки для передачи фокуса нужному контролу

    При этом на все кнопочки, с которых хочется убирать фокус, ставим обработчик OnMouseLeave и в этом обработчике переводим фокус на любой другой контрол, например, на панельку:

    Code:
    procedure TfrmPlayerMain.sbtnBackMouseLeave(Sender: TObject);
    begin
    ActiveControl := sPanel1;
    end;

    Оба варианта устраивают, поэтому тема закрывается 🙂

    Rrock
    Participant

    Идея компонента хорошая. Группировка действительно удобная.

    В разделе downloads в архиве ExtraTools лежит старая версия вашего компонента, хотя обещали ее там обновлять (почитал ветку). Ссылка на актуальную версию, как я понял, есть только в первом сообщении данной ветки.

    Что хотелось бы отметить:

    – Некритичный баг:

    Некоторые свойство работают только при установке их в рантайме (ShowColumnHeaders, ItemSkin). Если установить ShowColumnHeaders в дизайнере, то в рантайме не показываются не только заголовки колонок, но и все элементы. Если установить эту галочку в рантайме, то все верно работает. Свойства с пользовательскими цветами (ItemFont.Color, RegularItemColor и т.д.)тоже начинают работать только если ItemSkin скинуть в пустую строку в рантайме, в дизайнере – никакого эффекта.

    Хотелось бы, конечно, чтобы эти свойства могли работать и при установленном скинировании элементов, чтобы можно было менять цвет шрифта элементов (ибо опция bold при установленном ItemSkin работает, но цвет шрифта того из же ItemFont не меняется). Понятно, что если включено скинирование элементов, то их фон менять бессмысленно, но вот шрифт хочется поменять. А то черное все 🙄

    – Желание: хотелось бы видеть свойство ItemIndent

    Для возможности указания размера сдвига элементов относительно самого левого края компонента.

    in reply to: Запоминание нажатой кнопки #44519
    Rrock
    Participant
    'Feg16' wrote:

    Это какбы зависит не от альфов и чисто системное решение. Если не устраивает – делай обработчик на нажатие и уход и убирай выделение… Но лучше забей 😎

    А как его убрать-то??

    in reply to: Can't change HueOffset #44478
    Rrock
    Participant

    Thanks. Fixed in 7.29 release.

    in reply to: Не изменить HueOffset #44477
    Rrock
    Participant

    Спасибо. В релизе 7.29 проблема исправлена

Viewing 19 posts - 1 through 19 (of 19 total)