powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Обновление клиентской области MDI-формы
8 сообщений из 33, страница 2 из 2
Обновление клиентской области MDI-формы
    #39673831
white_nigger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LocksmithPCwhite_nigger, вопрос почему не срабатывает стандартный FormPaint в котором идет отрисовка. Update, Refresh, InvalidateRect, и даже прямой вызов FormPaint эффекта не дают. А изменение размера формы отрисовывает на ура.А голову хоть намного напрячь? И посмотреть что такое ClientHandle и чем он отличается от Handle формы. Можно конечно и разжевать, но лучше дать удочку
...
Рейтинг: 0 / 0
Обновление клиентской области MDI-формы
    #39673832
BOGG ART
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Потому что клиентская область MDI-приложения - это отдельное другое окно! Разумеется перерисовка владельца не влияет на вложенные окна.
У меня оно называется "MDIClient" и через VCL его почему-то фик достанешь. Так что вот вам, Дяденька, костылик:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
function FindAndRepaintMDIClient(Handle: HWND; lParam: LPARAM): BOOL; stdcall;
const BufferSize = 256;
var Buffer: PChar;
begin
Result:=True;
GetMem(Buffer, BufferSize);
if (GetClassName(Handle, Buffer, BufferSize-1)>0) then
      if (Buffer='MDIClient') then
            InvalidateRect(Handle, nil, True);
FreeMem(Buffer, BufferSize);
end;

Пользоваться так:
Код: pascal
1.
2.
3.
4.
procedure TMDIMainForm.Button1Click(Sender: TObject);
begin
EnumChildWindows(Handle, @FindAndRepaintMDIClient, 0);
end;
...
Рейтинг: 0 / 0
Обновление клиентской области MDI-формы
    #39673838
white_nigger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BOGG ARTУ меня оно называется "MDIClient" и через VCL его почему-то фик достанешь.Да... Тебе тоже касается:
white_niggerпосмотреть что такое ClientHandle
...
Рейтинг: 0 / 0
Обновление клиентской области MDI-формы
    #39673839
schi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
white_niggerМожно конечно и разжевать, но лучше дать удочку

"Дай человеку рыбу, и он будет сыт один день... дай человеку в морду – он перестанет клянчить у тебя еду"
...
Рейтинг: 0 / 0
Обновление клиентской области MDI-формы
    #39673843
BOGG ART
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сам бы сначала посмотрел. Форма TMDIMainForm не имеет никаких "ClientHandle" и вообще ничего похожего.
У меня правда стартер, в исходники залезть не могу, но походу окно "MDIClient" через VCL не выцепить. Или совсем хитр0 спрятали.
...
Рейтинг: 0 / 0
Обновление клиентской области MDI-формы
    #39673854
Фотография Квейд
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BOGG ARTПотому что клиентская область MDI-приложения - это отдельное другое окно! Разумеется перерисовка владельца не влияет на вложенные окна.
У меня оно называется "MDIClient" и через VCL его почему-то фик достанешь. Так что вот вам, Дяденька, костылик:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
function FindAndRepaintMDIClient(Handle: HWND; lParam: LPARAM): BOOL; stdcall;
const BufferSize = 256;
var Buffer: PChar;
begin
Result:=True;
GetMem(Buffer, BufferSize);
if (GetClassName(Handle, Buffer, BufferSize-1)>0) then
      if (Buffer='MDIClient') then
            InvalidateRect(Handle, nil, True);
FreeMem(Buffer, BufferSize);
end;

Пользоваться так:
Код: pascal
1.
2.
3.
4.
procedure TMDIMainForm.Button1Click(Sender: TObject);
begin
EnumChildWindows(Handle, @FindAndRepaintMDIClient, 0);
end;

Код: pascal
1.
InvalidateRect(ParentMDIForm.ClientHandle, nil, True)

не пробовали?
...
Рейтинг: 0 / 0
Обновление клиентской области MDI-формы
    #39673855
Фотография Квейд
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BOGG ARTСам бы сначала посмотрел. Форма TMDIMainForm не имеет никаких "ClientHandle" и вообще ничего похожего.
...
Рейтинг: 0 / 0
Обновление клиентской области MDI-формы
    #39673897
BOGG ART
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Забавно.....
Код: pascal
1.
2.
3.
4.
5.
6.
procedure TMDIMainForm.ToolButton12Click(Sender: TObject);
begin
Caption:='adasdasdasd';
InvalidateRect(Handle, nil, True);
InvalidateRect(ClientHandle, nil, True);
end;

автор[dcc32 Error] Main.pas(121): E2003 Undeclared identifier: 'Handle'
[dcc32 Error] Main.pas(122): E2003 Undeclared identifier: 'ClientHandle'
[dcc32 Fatal Error] MDIAPP.dpr(5): F2063 Could not compile used unit 'MAIN.PAS'
Ну если ClientHandle есть, и он соответствует "MDIClient", тогда не надо перебирать... %)
...
Рейтинг: 0 / 0
8 сообщений из 33, страница 2 из 2
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Обновление клиентской области MDI-формы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]