powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Обновление клиентской области MDI-формы
33 сообщений из 33, показаны все 2 страниц
Обновление клиентской области MDI-формы
    #39672925
Фотография Virtual Student
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день!
Рисую в клиентской области MDI-формы всякие подсказки для пользователей.
Подскажите, а как правильно перерисовывать эту самую клиентскую область после изменения текста?

Спасибо!
...
Рейтинг: 0 / 0
Обновление клиентской области MDI-формы
    #39672934
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Virtual Studentв клиентской области
Нет такой компоненты...

А так: WM_PAINT в гугле.
...
Рейтинг: 0 / 0
Обновление клиентской области MDI-формы
    #39672935
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Обновление клиентской области MDI-формы
    #39672942
Василий 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Из моих запасников

=========== заставить перерисовать клиентскую область MDI формы ===========

SetWindowPos(Handle, 0, 0, 0, 0, 0, SWP_FRAMECHANGED or SWP_NOMOVE or SWP_NOZORDER or SWP_NOSIZE);
...
Рейтинг: 0 / 0
Обновление клиентской области MDI-формы
    #39672945
Фотография Virtual Student
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadmanVirtual Studentв клиентской области
Нет такой компоненты...

А так: WM_PAINT в гугле.
Пробовал - не помогает... :(
...
Рейтинг: 0 / 0
Обновление клиентской области MDI-формы
    #39672946
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Virtual Studentwadmanпропущено...

Нет такой компоненты...

А так: WM_PAINT в гугле.
Пробовал - не помогает... :(
Грустька и печалька...

Код-то наверное секретный, раз словами описываешь?
...
Рейтинг: 0 / 0
Обновление клиентской области MDI-формы
    #39672948
Фотография Virtual Student
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Василий 2Из моих запасников

=========== заставить перерисовать клиентскую область MDI формы ===========

Код: pascal
1.
SetWindowPos(Handle, 0, 0, 0, 0, 0, SWP_FRAMECHANGED or SWP_NOMOVE or SWP_NOZORDER or SWP_NOSIZE);


Чего-то и сие не помогло. :(
Видимо я где-то сообщения неправильно перехватываю. Буду разбираться.

Всем спасибо за внимание и содействие!
...
Рейтинг: 0 / 0
Обновление клиентской области MDI-формы
    #39672949
Фотография Virtual Student
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadmanVirtual Studentпропущено...

Пробовал - не помогает... :(
Грустька и печалька...

Код-то наверное секретный, раз словами описываешь?
Да не особо секретный. Большой просто...
Мне бы такое лень читать было.
...
Рейтинг: 0 / 0
Обновление клиентской области MDI-формы
    #39672957
Фотография Квейд
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: pascal
1.
2.
3.
4.
5.
6.
7.
const
  RDW_REDRAWALL = RDW_FRAME
    or RDW_INVALIDATE
    or RDW_NOINTERNALPAINT
    or RDW_ALLCHILDREN;

RedrawWindow(YourMDIParentForm.ClientHandle, nil, 0, RDW_REDRAWALL);

?
...
Рейтинг: 0 / 0
Обновление клиентской области MDI-формы
    #39672959
Фотография Квейд
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если не поможет, попробуй убрать RDW_NOINTERNALPAINT
...
Рейтинг: 0 / 0
Обновление клиентской области MDI-формы
    #39672966
Василий 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Virtual StudentВасилий 2Из моих запасников

=========== заставить перерисовать клиентскую область MDI формы ===========

Код: pascal
1.
SetWindowPos(Handle, 0, 0, 0, 0, 0, SWP_FRAMECHANGED or SWP_NOMOVE or SWP_NOZORDER or SWP_NOSIZE);


Чего-то и сие не помогло. :(
Видимо я где-то сообщения неправильно перехватываю. Буду разбираться.

Всем спасибо за внимание и содействие!
Просто кинь кнопку и повесь на нее этот код, для проверки. У меня работал
...
Рейтинг: 0 / 0
Обновление клиентской области MDI-формы
    #39673068
Фотография LocksmithPC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"в клиентской области MDI-формы" и всё таки, это где?!
...
Рейтинг: 0 / 0
Обновление клиентской области MDI-формы
    #39673091
Фотография LocksmithPC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так что ли?
...
Рейтинг: 0 / 0
Обновление клиентской области MDI-формы
    #39673220
Фотография Virtual Student
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LocksmithPCТак что ли?
Да.
...
Рейтинг: 0 / 0
Обновление клиентской области MDI-формы
    #39673443
зонд
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как выводите? Как пытаетесь обновлять?
Virtual StudentДа не особо секретный. Большой просто...В таких случаях создают пустой проект и отдельно повторяют проблему.
...
Рейтинг: 0 / 0
Обновление клиентской области MDI-формы
    #39673516
Фотография LocksmithPC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Virtual Student, тупо сделал так:

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
      Left := Left - 1;
      Top := Top - 1;
      Width := Width + 1;
      Height := Height + 1;

      Application.ProcessMessages;

      Left := Left + 1;
      Top := Top + 1;
      Width := Width - 1;
      Height := Height - 1;

      Application.ProcessMessages;
...
Рейтинг: 0 / 0
Обновление клиентской области MDI-формы
    #39673574
Фотография Virtual Student
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LocksmithPCVirtual Student, тупо сделал так:

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
      Left := Left - 1;
      Top := Top - 1;
      Width := Width + 1;
      Height := Height + 1;

      Application.ProcessMessages;

      Left := Left + 1;
      Top := Top + 1;
      Width := Width - 1;
      Height := Height - 1;

      Application.ProcessMessages;


Оно работает.
Но я вас умоляю, - это же не кошерно!..
...
Рейтинг: 0 / 0
Обновление клиентской области MDI-формы
    #39673636
Фотография LocksmithPC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Virtual Student, чо уж теперь :(
...
Рейтинг: 0 / 0
Обновление клиентской области MDI-формы
    #39673714
зонд
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вы так и не показали как вы выводите ваш текст... "Я тут кое-где и кое-как вывожу текст, как мне вызвать перерисовку, что-то ничё не срабатывает?" Как же вам помогать?
...
Рейтинг: 0 / 0
Обновление клиентской области MDI-формы
    #39673731
white_nigger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Virtual StudentРисую в клиентской области MDI-формы всякие подсказки для пользователей.Изначально, говнорешение. Подсказки должны быть в хинтах, скринтипах, тултипах или как раньше уже подсказали в статусбаре. Тебе какое окно надо перерисовать MDIForm или MDIChild? Если первое - используй ClientHandle для вызовов WinApi, если второе - то просто Repaint
...
Рейтинг: 0 / 0
Обновление клиентской области MDI-формы
    #39673739
Фотография LocksmithPC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
white_nigger, Через ClientHandle & WinAPI как?
...
Рейтинг: 0 / 0
Обновление клиентской области MDI-формы
    #39673749
Фотография Virtual Student
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
white_niggerVirtual StudentРисую в клиентской области MDI-формы всякие подсказки для пользователей.Изначально, говнорешение. Подсказки должны быть в хинтах, скринтипах, тултипах или как раньше уже подсказали в статусбаре. Тебе какое окно надо перерисовать MDIForm или MDIChild? Если первое - используй ClientHandle для вызовов WinApi, если второе - то просто Repaint
Дяденька (или тетенька), то, что должно быть абсолютно не соответствует пожеланиям пользователей, к сожалению... Я и сам бы рад, если бы они читали подсказки в "хинтах, скринтипах, тултипах", но к сожалению, у меня таки пользователи, что видят лишь то, что нарисовано "грубо" и жирным шрифтом. :)
P.S.: Пишу на Delphi приложения (и продаю их) аж с 2000 года.
P.S.S.: К сожалению, какие-то "преподаватели" впаривают студентам, что Delphi годиться только для обучения...
...
Рейтинг: 0 / 0
Обновление клиентской области MDI-формы
    #39673760
white_nigger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LocksmithPCwhite_nigger, Через ClientHandle & WinAPI как?Да как хочешь. Хочешь ручками, хочешь - вешаешь свой WndProc и отрабатываешь WM_Paint (последнее использовал в нашей риббон форме)
...
Рейтинг: 0 / 0
Обновление клиентской области MDI-формы
    #39673773
Фотография LocksmithPC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
white_nigger, вопрос почему не срабатывает стандартный FormPaint в котором идет отрисовка. Update, Refresh, InvalidateRect, и даже прямой вызов FormPaint эффекта не дают. А изменение размера формы отрисовывает на ура.
...
Рейтинг: 0 / 0
Обновление клиентской области MDI-формы
    #39673811
schi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LocksmithPCwhite_nigger, вопрос почему не срабатывает стандартный FormPaint в котором идет отрисовка. Update, Refresh, InvalidateRect, и даже прямой вызов FormPaint эффекта не дают. А изменение размера формы отрисовывает на ура.

SPY++ тебе в помощь
...
Рейтинг: 0 / 0
Обновление клиентской области 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
33 сообщений из 33, показаны все 2 страниц
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Обновление клиентской области MDI-формы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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