Forum Replies Created
-
AuthorPosts
-
TCountParticipant
void __fastcall TForm9::sFrameBar1Items0CreateFrame(TObject *Sender, TCustomFrame *&Frame)
{
Frame = new TFrame13(this);
}
Попробуйте при создании фрейма не указывать THIS…
Не помню, как там в C++, вроде NULL:
Frame = new TFrame13(NULL);
то есть, не должно быть никакой привязки.
TCountParticipant'Shepard' wrote:В событии OnCreateFrame для 0-го Item-а в sFrameBar1.
Code:void __fastcall TForm9::sFrameBar1Items0CreateFrame(TObject *Sender, TCustomFrame *&Frame)
{
Frame = new TFrame13(this);
}Form9 тут, соответственно, главная форма программы, на которой и расположен сам sFrameBar1.
Я одним глазом посмотрел на всю эту химию с sFrameBar и пришел к выводу, что вы вставляете фрейм в методе итема FrameBar OnCreateFrame…
Так вот, сами фрейиы, которые принадлежат итемам, они не создаются по умолчанию. OnCreateFrame вызывается только при клике по самому итему, а до этого момента фрейм итема не существует и, соответственно, обращение к нему вызовет ошибку.
Более того, фрейм уничтожается сразу после закрытия итема во FrameBar.
Я хочу сказать о том, что к фрейму определенного итема можно обращаться только тогда, когда сам итем FrameBar открыт и видно его содержимое. То есть, когда он существует и не равен NIL (NULL).
А обращатесь к фрейму вы правильно, но можно чуть короче:
TFrame13(sFrameBar1->Items[0]->Frame).sButton1->Caption;
TCountParticipant'Shepard' wrote:Здесь: Frame13 – фрейм, вставляемый во FrameBar. sButton1 – кнопка внутри Frame13.
Каким образом данный фрейм вставляется в FrameBar?
Я одним глазом посмотрел на всю эту химию с sFrameBar и пришел к выводу, что вы вставляете фрейм в методе итема FrameBar OnCreateFrame…
Так вот, сами фрейиы, которые принадлежат итемам, они не создаются по умолчанию. OnCreateFrame вызывается только при клике по самому итему, а до этого момента фрейм итема не существует и, соответственно, обращение к нему вызовет ошибку.
Более того, фрейм уничтожается сразу после закрытия итема во FrameBar.
Я хочу сказать о том, что к фрейму определенного итема можно обращаться только тогда, когда сам итем FrameBar открыт и видно его содержимое. То есть, когда он существует и не равен NIL (NULL).
А обращатесь к фрейму вы правильно, но можно чуть короче:
TFrame13(sFrameBar1->Items[0]->Frame).sButton1->Caption;
TCountParticipant'Support' wrote:Попробую повторить ситуацию в тесте и решить проблему к следующему релизу.
Версия 12.08 – все как полагается)
Правда, если, например, при анимации на переключаемой вкладке TsPageControl имеются кнопки TsSpeedButton, то они просто не прорисовываются. Появляются только если на них навести курсор.
TCountParticipant'Cinemaizer' wrote:Баг присутствует с версии 11.22 или 11.23. В версии 11.21 точно все было в порядке.
Итак, в компоненте TsMaskEdit при включенной опции password char='*' возникают какие то странные символы “ППППП”. С компонентом TMaskEdit все хорошо.
Скачал демку, запустил – вообще ничего не видно. Но оно и понятно, в отладчике вы не прописали пароль, то есть, поля Text у компонентов пустые.
Но не в этом дело.
Дело в том, что я поиздевался по-всякому, но так описываемый баг не словил, все отображается корректно.
Возможно, дело в железе и версии Delphi?
TCountParticipant'Ildar' wrote:Я пробовал, данная обработка лишь добавляет действие к уже имеющемуся, или я что-то недопонял?
Пробовали в данной процедуре устанавливать?
Action:=acaHide;
TCountParticipant'Ildar' wrote:Подскажите пожалуйста можно ли как-то изменить действие closeBtn в sPageControl? чтобы вкладки не удалялись а скрывались, с возможностью их восстановить.
Сам не пробовал, но в sPageControl есть событие OnCloseBtnClick…и в этой процедуре можно переопределить действие Action.
procedure …(Sender: TComponent; TabIndex: Integer; var CanClose: Boolean; var Action: TacCloseAction);
TCountParticipant'Support' wrote:Как ведет себя версия 12.07?
Установил. Спасибо, ошибок более не наблюдается)
TCountParticipant'Support' wrote:Я нашел несколько ошибок в дизайн-тайм, постараюсь исправить в ближайшем релизе.
Спасибо, буду ждать.
TCountParticipantПроверил версию 12.05 на ту проблему, о которой данный топик…и вроде как анимации уже работают отлично!
Еще потестю. Если все будет норм – топик закрою.
P.S. Да будет AC без глюков! :a7:
TCountParticipant'Stertor' wrote:Анимации – это зло. Не должно их быть в хорошей проге.
Вон, офис новый почти весь мерцает и переливается, плавное затухание и прочие эффекты – а работать с ним стало почти невыносимо.
Та мне, собственно, и не анимация нужна) у меня большой по размерам PageControl с множеством вкладок и компонентов в них…Мне нужна задержка анимации 0, чтобы это все перерисовать и сразу подать.
Если этого не сделать, то происходит кошмар. Можно с удовольствием созерцать, как при переходе с вкладки на вкладку компоненты перерисовываются)
Если бы для себя прогу делал – фиг с ним.
Дак и не во мне дело. Разработчик AC если сделал возможность анимации, то она должна корректно отрабатывать. Разве не так?
TCountParticipant'Support' wrote:Текст в прозрачных компонентах рисуется с помощью данных шрифта заданных в секции парента.
Это сделано для того, чтобы надпись была видна на любом фоне в скине, темный он или светлый – цвет всегда будет браться у этой же секции.
Возможно, нужно придумать какое-то решение для особых случаев, например, если используется тень, то цвет а парента не нужно брать. Я подумаю.
Это не критично. Я понял систему и теперь просто использую настройки секции панели.
TCountParticipant'JackSon_by' wrote:Есть такое.
Я включаю FlatSpinButton=true и не так “глаз режет”. )
Да, я тоже включаю) Но все же…)
TCountParticipant'Support' wrote:Есть еще вот такой вариант:
Code:var
M: TMessage;
begin
M := MakeMessage(SM_ALPHACMD, AC_REFRESH_HI, 0, 0);
AlphaBroadCast(Handle, M);
RedrawWindow(Handle, nil, 0, RDWA_ALLNOW);
end;Как он перерисовывает?
Вообще никак.
Да ладно, я нашел рабочее решение вроде этого:
procedure FullRepaint;
var M: TMessage;L,A: integer;
begin
L:=ComponentCount-1;
FOR A:=0 TO L DO IF Components[A] is TsSpeedButton THEN TsSpeedButton(Components[A]).SkinData.BGChanged:=True
ELSE IF Components[A] is TsBitBtn THEN TsBitBtn(Components[A]).SkinData.BGChanged:=True;
SPR.SkinData.BGChanged:=True;
M:=MakeMessage(SM_ALPHACMD,AC_SETBGCHANGED_HI+1,0,0);
AlphaBroadCast(Handle,M);
RedrawWindow(Handle,NIL,0,RDWA_ALLNOW);
end;
TCountParticipant'Stertor' wrote:Не по теме.
Использовать темный скин (белые либо светло-серые надписи на тёмном либо чёрном фоне) – значит обречь свой проект на провал.
Серьезно?))))
TCountParticipant'Support' wrote:Для полной перерисовки формы и контролов на ней можно попробовать использовать такой код:
Code:uses sVCLUtils, acntUtils, sMessages, sConst;procedure FullRepaint;
var
M: TMessage;
begin
M := MakeMessage(SM_ALPHACMD, AC_SETBGCHANGED_HI + 1, 0, 0);
AlphaBroadCast(Handle, M);
RedrawWindow(Handle, nil, 0, RDWA_ALLNOW);
end;Спасибо, частично получилось)
Частично, потому что не перерисовались бэкграунды у компонентов:
1. sBitBtn (перерисовывается, только если после процедуры смены фона у формы просто кликнуть в любом месте формы).
2. sSpeedButton (перерисовывается, только если после процедуры смены фона у формы навести на sSpeedButton курсор).
Такие вот дела. Должен сказать, что процедура перерисовки окна вызывается для формы без фокуса, то есть из модально открытой формы.
Странно это все. Ведь функция RedrawWindow по идее должна была сделать свое дело.
А вот RepaintForms чудесным образом справляется с задачей, интересно как)
P.S. С sSpeedButton'ами вопрос решается, если перед перерисовкой окна задать им SkinData.BGChanged:=True. Однако, проблематично каждую кнопку обработать…Хотя, если в цикле перебрать компоненты на форме определенного класса, то норм)
Но может все же есть стандартное решение с помощью AC? Желательно быстрое) Если нет, то буду костылями своими решать)
TCountParticipant'Support' wrote:А почему обычный Repaint не подходит? Или sSkinProvider1.SkinData.Invalidate?
Попробовал – не получилось.
Дело в том, что у меня фон формы прорисовывается в OnPaint формы. А на форме лежит куча компонентов, в том числе и sPageControl. Все эти компоненты частично прозрачные.
И когда я пытаюсь программно сменить фон у формы, то получается все криво. Ведь компоненты уже “прокешировали” старый фон, используют его и ничего не знают о том, что у формы новый фон.
Вот мне раньше и помогал метод RepaintForms. Но прикол в том, что мне нужно лишь одну форму перерисовать, в которой используется фон.
Обычный Repaint бессилен, sSkinProvider1.SkinData.Invalidate тоже.
TCountParticipantДа! В версии 12.02 проблема исчезла. Спасибо!
TCountParticipant'Support' wrote:Пакет установился без этого файла? А в папке с компонентами такой файл есть?
По какой ссылке скачивалось?
Ой, прошу прощения) Я скачал версию 11.26 😮
Сейчас установлю 12.02 и проверю, прорисовывается ли линия.
TCountParticipant'Support' wrote:В версии 12.02 это должно быть починено уже. Или все так же рисуется?
Установил версию 12.02 и…
[dcc32 Fatal Error] Unit1.pas(8): F2613 Unit 'acArcControls' not found.
То есть, пропали все новые компоненты.
-
AuthorPosts