Сейчас на форуме: hgdagon, asfa, bartolomeo (+6 невидимых)

 eXeL@B —› Программирование —› Как перерисовать окно?
Посл.ответ Сообщение

Ранг: 43.0 (посетитель)
Активность: 0.030
Статус: Участник

Создано: 27 апреля 2006 16:43 · Поправил: nikitosk
· Личное сообщение · #1

делаю такое:
SetWindowLong(hWnd,GWL_STYLE,style);
SetWindowText(hWnd,'some text');

и пока я не сверну и не разверну родительское окно...
окна над которыми я проделал данные действия
перерисовываются неполностью или вообще не перерисовываются...
как его программно обновить ?
sendMessage(hWnd,Wm_paint) - не помогает
UpdateWindow(hWnd,,) - тоже

и RedrawWindow(hWnd,nil,nil,RDW_UPDATENOW); тоже не помогает




Ранг: 353.0 (мудрец)
Активность: 0.370
Статус: Участник
resreveR

Создано: 27 апреля 2006 17:01
· Личное сообщение · #2

InvalidateRect ?

-----
Тут не могла быть ваша реклама




Ранг: 43.0 (посетитель)
Активность: 0.030
Статус: Участник

Создано: 27 апреля 2006 17:14 · Поправил: nikitosk
· Личное сообщение · #3

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

я с ним делаю:
SetWindowLong(hWnd,GWL_STYLE,style);
SetWindowText(hWnd,TrimFirstSymbol(oldWindowText));
InvalidateRect(hWnd,0,true);
я хочу чтоб контрол выглядел так:

а после InvalidateRect он выглядит вот так:

То есть изображение перерисовывается но поверх старого...
Старое не стирается....

почему?




Ранг: 353.0 (мудрец)
Активность: 0.370
Статус: Участник
resreveR

Создано: 27 апреля 2006 17:25
· Личное сообщение · #4

nikitosk пишет:
InvalidateRect(hWnd,0,true);

а второй параметр не 0, а указатель на Rect..

-----
Тут не могла быть ваша реклама




Ранг: 43.0 (посетитель)
Активность: 0.030
Статус: Участник

Создано: 27 апреля 2006 17:26
· Личное сообщение · #5

Спасибо, InvalidateRect без параметров все перерисовало!




Ранг: 353.0 (мудрец)
Активность: 0.370
Статус: Участник
resreveR

Создано: 27 апреля 2006 17:26
· Личное сообщение · #6

в делфях для vcl я так делал:
procedure TFlatButton.CreateParams(var Params: TCreateParams);
begin
Inherited CreateParams(Params);
with Params do
Style:= Style or BS_USERBUTTON or BS_FLAT;
end;

или перекрывай CreateParams радиобаттона своего или сделай компоненту..

-----
Тут не могла быть ваша реклама




Ранг: 43.0 (посетитель)
Активность: 0.030
Статус: Участник

Создано: 27 апреля 2006 17:55
· Личное сообщение · #7

нет...не в Дельфи... мне это надо было сделать в 1С




Ранг: 353.0 (мудрец)
Активность: 0.370
Статус: Участник
resreveR

Создано: 27 апреля 2006 17:59
· Личное сообщение · #8

nikitosk пишет:
Спасибо, InvalidateRect без параметров все перерисовало!

ну вот ;) тема исчерпана ?

-----
Тут не могла быть ваша реклама




Ранг: 43.0 (посетитель)
Активность: 0.030
Статус: Участник

Создано: 27 апреля 2006 23:20 · Поправил: nikitosk
· Личное сообщение · #9

да, исчерпана, спасибо...
а проблема была в том, что надо было окно под радиокнопкой тоже обновить.
lord_Phoenix пишет:
а второй параметр не 0, а указатель на Rect..

если второй параметр 0, то перерисовывает окно целиком...




Ранг: 156.2 (ветеран), 2thx
Активность: 0.090
Статус: Участник

Создано: 28 апреля 2006 03:39
· Личное сообщение · #10

lord_Phoenix
подскажи, что это за процедура CreateParams...
нашел, что она объявлена в классе TCustomForm = class(TScrollingWinControl)
так
procedure CreateParams(var Params: TCreateParams); override;

но зачем она и как ее связать с радиобаттон (в vcl) не понимаю.
поясни, если нетрудно.



Ранг: 42.4 (посетитель)
Активность: 0.010
Статус: Участник

Создано: 28 апреля 2006 04:51
· Личное сообщение · #11

В хелпе пишут, что эта функция служит для инициализации параметров окна и вызывается из CreateWnd для инициализации параметров, передаваемых позже ф-ции CreateWindowHandle. Сам можешь вызывать её, если тебе надо из класса твоего окна убрать параметры CS_HREDRAW и CS_WREDRAW, чтобы перерисовывалась не вся область, а только указанная тобой часть. Типа, так быстрее.


 eXeL@B —› Программирование —› Как перерисовать окно?
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати