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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.05.2011, 23:05   #1
Swarog
Форумчанин
 
Аватар для Swarog
 
Регистрация: 26.01.2010
Сообщений: 215
По умолчанию Как спраится с альфаскин, что бы он не перерисовывал форму

Суть проблемы в следующем, есть форма, на ней PaintBox отрисовка на него производится по OnPaint. все нормально если не учитывать мерцания, но в некоторых случаях (обычно при пропадании фокуса) альфаскин перерисовывает форму в то время как обработчик OnPaint не срабатывает в итоге стирается все изображение. Как застаить либо альфаскин не перерисовываться, либо OnPaint срабатывать сразу после него во всех случаях.
Во вложениях окно должно выводить одинаковую картинку
Изображения
Тип файла: png Нормально.PNG (10.2 Кб, 37 просмотров)
Тип файла: png При потере фокуса.PNG (7.1 Кб, 39 просмотров)
Могу лишь пнуть в нужном направлении (ну или как получится)
Swarog вне форума Ответить с цитированием
Старый 18.05.2011, 23:14   #2
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,434
По умолчанию

Код:
SkinProvider.SkinData.SkinManager.BeginUpdate;

SkinProvider.SkinData.SkinManager.EndUpdate(Animate:bool,Repaint:bool);
также эти методы есть у всех компонент альфа скинов.

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

по этому:
Код:
TsComponent.BeginUpdate;
//Действия требующей многократной перерисовки
TsComponent.EndUpdate(True,false);
Человек_Борща вне форума Ответить с цитированием
Старый 18.05.2011, 23:24   #3
Swarog
Форумчанин
 
Аватар для Swarog
 
Регистрация: 26.01.2010
Сообщений: 215
По умолчанию

не совсем понял как использовать
вот так не помогает

Код:
procedure TConsole.FormPaint(Sender: TObject);
var
 rect: trect;
begin
 mainForm.sSkinManager1.BeginUpdate;
 rect := GetClientRect;
 canvas.CopyRect(rect,fBackBufer.Canvas,rect);
 PaintBox1.Canvas.CopyRect(rect,fBackBufer.Canvas,rect);
 mainForm.sSkinManager1.EndUpdate(false);
end;
Могу лишь пнуть в нужном направлении (ну или как получится)
Swarog вне форума Ответить с цитированием
Старый 18.05.2011, 23:39   #4
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,434
По умолчанию

Код:
mainForm.sSkinManager1.EndUpdate(false);
у него 2 параметра.
1 это AllowRepaint
2 это AllowAnimation
Человек_Борща вне форума Ответить с цитированием
Старый 18.05.2011, 23:46   #5
Swarog
Форумчанин
 
Аватар для Swarog
 
Регистрация: 26.01.2010
Сообщений: 215
По умолчанию

второй параметр я так понял отвечает за анимацию, даже если выставить оба параметра в false, это ни чего не меняет, похоже я что то делаю не так, там ли я вообще использую?
Могу лишь пнуть в нужном направлении (ну или как получится)
Swarog вне форума Ответить с цитированием
Старый 19.05.2011, 00:06   #6
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,434
По умолчанию

Код:
 mainForm.sSkinManager1.EndUpdate(false);
Нельзя так делать!

На основной форме должен быть SkinManager & SkinProvider, а на всех остольных формах обязан лежать SkinProvider.
С дочерних форм нельзя обращать к основному Managery вот так как у вас.

НЕобходимо писать так:
Код:
SkinProvider.SkinData.SkinManager.BeginUpdate;
{paste your code here}
SkinProvider.SkinData.SkinManager.EndUpdate(False,True);

Последний раз редактировалось Человек_Борща; 19.05.2011 в 00:09.
Человек_Борща вне форума Ответить с цитированием
Старый 19.05.2011, 00:25   #7
Swarog
Форумчанин
 
Аватар для Swarog
 
Регистрация: 26.01.2010
Сообщений: 215
По умолчанию

Ага, это я понял, сделал, теперь такой вопрос куда это вставлять если в паинт то ни чего не выходит

Код:
procedure TConsole.FormPaint(Sender: TObject);
var
 rect: trect;
begin
 sSkinProvider1.SkinData.SkinManager.BeginUpdate;
 rect := GetClientRect;
 canvas.CopyRect(rect,fBackBufer.Canvas,rect);
 PaintBox1.Canvas.CopyRect(rect,fBackBufer.Canvas,rect);
 sSkinProvider1.SkinData.SkinManager.EndUpdate(false,false);
end;
Могу лишь пнуть в нужном направлении (ну или как получится)
Swarog вне форума Ответить с цитированием
Старый 19.05.2011, 00:47   #8
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,434
По умолчанию

Дело скорее в самом боксе, канва не успевает...
зависит от того что выводить.. вам обязательно paintbox?
Человек_Борща вне форума Ответить с цитированием
Старый 19.05.2011, 14:12   #9
Swarog
Форумчанин
 
Аватар для Swarog
 
Регистрация: 26.01.2010
Сообщений: 215
По умолчанию

не принципиально на чем, выводил через image, напрямую на форму и вот через паинт эффект один и тот же, в некоторых случаях изображение исчезает заменяясь фоном формы
Могу лишь пнуть в нужном направлении (ну или как получится)
Swarog вне форума Ответить с цитированием
Старый 19.05.2011, 14:34   #10
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,434
По умолчанию

Канва не успевает перерисовывать(что в paintbox что в image)...
Человек_Борща вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как создать форму в ручную и освободить из памяти предыдущую форму, на С++Builder 2009? AndreyK Общие вопросы C/C++ 1 18.01.2012 20:54
Одну и ту же форму использовать как MDI-child форму и как модальную форму? PrimaryPro Общие вопросы Delphi 2 10.03.2010 20:52
альфаскин blackstersl Общие вопросы Delphi 4 19.09.2008 11:57
Как сделать так, что-бы при перетаскивании файла драг&дроп-ом на мою форму, он открывался??? Altera Общие вопросы Delphi 2 11.04.2008 15:00
Как изменить стандартную форму на форму любой сложности QwErEn Общие вопросы Delphi 9 08.06.2007 11:44