Forum Replies Created
-
AuthorPosts
-
RrockParticipant'Support' wrote:
У той метки где не рисуются пиксели AutoSize установлено? Оно влияет?
Действительно, если поставить в true, то проблема исправляется. К сожалению, не могу повторить действий, приводящих в багу, возможно, было связано c изменением Layout (Ccылка на один из постов).
Прилагаю демку с багом.
P.S. И все же баг есть. Чтобы его увидеть делаем следующее: кидаем новую TLabelFX. Отключаем autosize. Устанавливаем выравнивание taRightJustify. Далее меняем TLabelFX.Caption на другое значение, скажем, слово “Пример”. В дизайнере глюка не наблюдается, однако при запуске приложения глюк будет виден. Проблему решает только установка TLabelFX.AutoSize := true. Стоит отметить, что глюка бы не было, если после создания новой TLabelFX ее заголовок не был бы изменен.
P.P.S. Еще один баг. Изменил файл в прицепе: на нем видно, что положение лейблов в дизайнере не совпадает с положением в рантайме.
RrockParticipant'Support' wrote:Сходу не получилось воосоздать такую ситуацию.
Какая у Вас версия Delphi? Проблема существует при активных скинах или это не важно?
Delphi 7. Скины активны. Кинул новую label и подобных проблем уже действительно нет.
February 13, 2011 at 12:27 pm in reply to: Сообщение, из-за которого не закрываются скинированные окна #44852RrockParticipant'Support' wrote:Вы правы, WM_NCHITTEST не должно использоваться для определения текущих кнопок.
Это будет изменено не ранее бвыпуска ближайшей Бета-версии, так как менять придется многое.
Возможно ориентировочно предположить сроки?
RrockParticipantНа всякий случай уточню: в 7.31 проблема не исправлена.
February 11, 2011 at 1:17 pm in reply to: ListView с поддержкой групп; ProgressBar с градиентом #44844RrockParticipantОтлично. Это позволит мне полноценно заюзать компонент.
Замечание: обработчик события двойного клика мыши не содержит ее координаты. Поэтому пришлось реализовать собственный механизм обработки кликов, что, конечно, не есть удобно.
Еще одно пожелание. Я на данный момент решил эту проблему небольшим изменением текущей версии исходников у себя на ПК, но могу озвучить, что мне требовалось: для гибкой настройки скинирования было бы неплохо иметь возможность указать, хотим ли мы вообще подсвечивать элементы при наведении и при одном щелчке, и если хотим, то как (ведь в компоненте уже есть некоторые настройки цветов, просто они работают, только когда НЕ установлены скины. Можно подумать, как интегрировать эти вещи). И еще для меня было бы круто, если бы я мог указать, в каком случае элемент считать выделенным (в моем случае это происходит по двойному щелчку, а не по одинарному): т.е. некоторое свойство типа SelectEvent и значения (seOnSingleClick, seOnDoubleClick).
P.S. Лично мне не очень к спеху, т.е. пара недель еще есть на изменения программы. Но если какие-то из вышеперечисленных идей собираются быть реализованными в этот срок, то я бы хотел узнать об этом, чтобы не править исходники самому (ведь если будут сделаны хинты, я обязательно обновлюсь), а юзать, так сказать, официальную версию от KSS. 🙄
February 10, 2011 at 8:34 pm in reply to: ListView с поддержкой групп; ProgressBar с градиентом #44839RrockParticipantХинтов над длинными элементами списка не ожидается?
RrockParticipant'Torbins' wrote:Сами файлы скинов легко редактировать с помощью ASkinEditor. Только учтите, что стандартные скины часто обновляются.
Так можно ли? Как? ASkinEditor предлагает открыть файлы .dat и не открывает .asz, в которых распространяются стандартные скины.
RrockParticipantЗафиксено в AC_7.30
January 28, 2011 at 8:16 pm in reply to: ListView с поддержкой групп; ProgressBar с градиентом #44651RrockParticipantОчень хотелось бы видеть хинт для урезанных элементов (ViewStyle = vsReport), как это делается в sListView.
January 28, 2011 at 7:11 pm in reply to: ListView с поддержкой групп; ProgressBar с градиентом #44650RrockParticipantПочему-то со второй колонки начинается принудительное выравнивание элементов по правому краю. Код:
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 меня убивала…Поэтому собственно баг и обнаружен 🙄
January 28, 2011 at 9:38 am in reply to: Сообщение, из-за которого не закрываются скинированные окна #44645RrockParticipantАналогичное поведение (необработка кликов на кнопки меню формы) прослеживается, если эти две формы запущены из разных приложений.
Причина бага: я считаю, кнопка меню не должна подсвечиваться, когда ей посылается сообщение WM_NCHITTEST. Ведь это сообщение еще не означает движение мыши. Когда же происходит реальное движение мыши, то окну помимо WM_NCHITTEST посылается WM_SETCURSOR и WM_MOUSEMOVE. Вот на два последние события и стоит реагировать вместо WM_NCHITTEST, которое посылается намного чаще и связано с некоторыми другими действиями (например при вызове API-функции WindowFromPoint).
В моем проекте очень важно исправить эту проблему. К сожалению, поскольку исходники общего скинирования не доступны, то вышеописанное – максимум, что я смог выяснить. Надеюсь, удалось понять причину проблемы.
January 27, 2011 at 7:23 pm in reply to: ListView с поддержкой групп; ProgressBar с градиентом #44641RrockParticipant'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;January 25, 2011 at 6:19 pm in reply to: ListView с поддержкой групп; ProgressBar с градиентом #44578RrockParticipant'KSS' wrote:Нет, границы элементов разработчиком не меняются. А зачем понадобилось менять сдвиг элементов слева, они вроде хорошо подогнаны? 🙂
Да, подобраны хорошо. Но ведь всегда найдутся такие пользователи, которые захотят что-то поменять. И именно потому, что стандартных компонентов с их стандартными настройками не хватает, люди и пользуются такими творениями, как ваше. Всегда очень приятно использовать компонент, позволяющий максимально гибко произвести настройки или в крайнем случае как-то выкрутиться.
Делаю плей-лист для проигрывателя. Названия элементов длинные, поэтому сдвиг от левой границы уменьшает эргономичность. Какие проблемы при этом возникли при ипользовании TAcListView:
1) Не настроить цвет шрифта элементов при скинировании
2) Не произвести настройки по скинированию при наведении, одном клике, двух кликах. Как я понимаю, при скинировании, какой-то определенный элемент никак не выделить (тем же шрифтом, но концептуально это непросто организовать – я это понимаю).
Что понравилось в TAcListView по сравнению со стандартным списком:
1) Автоматизация группировки, возможность вставить красивые картинки для каждой группы
2) Красивое скинирование при наведении на элементы.
Почему, увы, вынужден выбрать sListView:
Есть возможность установить свой обработчик на отрисовку каждого элемента и таким образом самому решить, как рисовать те или иные элементы (но при этом в рамках высоты на каждый элемент, т.е. группу другого размера, чем остальные элементы, вроде никак не сделать, но это не критично). Единственная проблема – в sListView приходится отключить стандартную прорисовку элементов и рисовать их самому, не знаю, как нарисовать скинированную прямоугольную область, но это не критично и можно выкрутиться картинками.
Вывод: нелегкая эта работа – делать альтернативные компоненты. В любом случае, желаю успехов разработчикам. Уверен, что кому-нибудь, а может быть, и мне когда-то ваш компонент пригодится.
January 24, 2011 at 9:23 pm in reply to: ListView с поддержкой групп; ProgressBar с градиентом #44567RrockParticipant'KSS' wrote:У TacListItem и других элементов есть свойство Bounds: TRect – местоположение элемента на acListView (если он конечно видимый)
Границы можно изменить? Поле Bounds readonly.
RrockParticipantКак говорится, красота требует жертв. Просто кнопочки у меня на панельке, и чтобы эффект от использования AlphaControls был максимально потрясающим, для этих кнопок был выбран скин BUTTON_HUGE. Соответственно, когда на кнопке фокус, она принципиально меняет свой цвет и тем самым разительно отличается от других.
Спасибо за советы: действительно, как минимум два варианта исправляют эту ситуацию.
1) Использование кнопок sSpeedButton
Почему видимо на них и нет фокуса, так это наверное как раз потому, что они и предназначены быть кучей одинаковых кнопок в одной группе. Однако sSpeedButton все же имеет отличия от sButton, например тем, что не имеет свойств HotImageIndex, PressedImageIndex и т.д. но в моей ситуации этого не требуется, поэтому вариант устраивает
2) Использование свойства TForm.ActiveControl формочки для передачи фокуса нужному контролу
При этом на все кнопочки, с которых хочется убирать фокус, ставим обработчик OnMouseLeave и в этом обработчике переводим фокус на любой другой контрол, например, на панельку:
Code:procedure TfrmPlayerMain.sbtnBackMouseLeave(Sender: TObject);
begin
ActiveControl := sPanel1;
end;Оба варианта устраивают, поэтому тема закрывается 🙂
January 20, 2011 at 9:48 pm in reply to: ListView с поддержкой групп; ProgressBar с градиентом #44522RrockParticipantИдея компонента хорошая. Группировка действительно удобная.
В разделе downloads в архиве ExtraTools лежит старая версия вашего компонента, хотя обещали ее там обновлять (почитал ветку). Ссылка на актуальную версию, как я понял, есть только в первом сообщении данной ветки.
Что хотелось бы отметить:
– Некритичный баг:
Некоторые свойство работают только при установке их в рантайме (ShowColumnHeaders, ItemSkin). Если установить ShowColumnHeaders в дизайнере, то в рантайме не показываются не только заголовки колонок, но и все элементы. Если установить эту галочку в рантайме, то все верно работает. Свойства с пользовательскими цветами (ItemFont.Color, RegularItemColor и т.д.)тоже начинают работать только если ItemSkin скинуть в пустую строку в рантайме, в дизайнере – никакого эффекта.
Хотелось бы, конечно, чтобы эти свойства могли работать и при установленном скинировании элементов, чтобы можно было менять цвет шрифта элементов (ибо опция bold при установленном ItemSkin работает, но цвет шрифта того из же ItemFont не меняется). Понятно, что если включено скинирование элементов, то их фон менять бессмысленно, но вот шрифт хочется поменять. А то черное все 🙄
– Желание: хотелось бы видеть свойство ItemIndent
Для возможности указания размера сдвига элементов относительно самого левого края компонента.
RrockParticipant'Feg16' wrote:Это какбы зависит не от альфов и чисто системное решение. Если не устраивает – делай обработчик на нажатие и уход и убирай выделение… Но лучше забей 😎
А как его убрать-то??
RrockParticipantThanks. Fixed in 7.29 release.
RrockParticipantСпасибо. В релизе 7.29 проблема исправлена
-
AuthorPosts