Не обновляется окно программы

← →
Biji ( 2003-12-10 14:30 ) [0]

Программа выполняет длительный процесс (в моем случае качает по ftp файл), если открыть другую программу, окно моей программы не обновляется, после закрытия другой программы.
Что можно сделать, что бы обновить окно?

← →
Рамиль ( 2003-12-10 14:33 ) [1]

Запустить закачку в отдельном потоке.

← →
Biji ( 2003-12-10 14:45 ) [2]

1. Набросай в двух словах как это можно сделать(в отдельном потоке)
2. Качаю indyFtp, там есть событие OnWork, может там можно что то прописать?

← →
TUser ( 2003-12-10 14:56 ) [3]

В отдельном потоке — значит создать потомка от класса TThread. Приписать ему метод Execute; override и вызывать методом Resume. Примеры есть в хелпе.
Перерисоку формы можно запустить методом TForm.Repaint;

← →
Erik ( 2003-12-10 14:56 ) [4]

Если ничего незнаеш о потоках, то просто брось на форму компонент TAntiFrez. Както так называется и все будет работать.

Как исправить — не обновляется Windows 10 (простой способ)

← →
Biji ( 2003-12-10 15:11 ) [5]

Спасибо TForm.Repaint; то что надо, все работает 🙂

P.S.
Программа не большая, грамоздить ее потоками не хочется (хотя по описанию понял вещь хорошая, в будущем может пригодиться)

Источник: delphimaster.net

Рабочий стол или Проводник не обновляются автоматически в Windows 10

Основное

Окно или папка Windows Desktop или Windows File Explorer автоматически обновятся при внесении изменений в их содержимое. Это может быть создание нового ярлыка, создание или сохранение в нем нового файла или папки и т. Д.

Читайте также:
Программа которая переводит в машинные коды символьную запись

Но иногда вы можете обнаружить, что рабочий стол или окно могут не обновляться автоматически и видеть изменения; Вы должны вручную обновить его, нажав F5 или через контекстное меню.

Проводник не обновляется автоматически

Если вы обнаружите, что вам необходимо часто обновлять рабочий стол в Windows 10/8/7, вы можете выполнить следующие действия, чтобы попытаться устранить проблему.

Откройте редактор реестра и перейдите к следующему разделу реестра:

HKEY_CLASSES_ROOT CLSID

64-разрядным пользователям, возможно, придется заглянуть в:

HKCR Wow6432Node CLSID

Здесь щелкните правой кнопкой мыши CLSID и выберите Найти , чтобы найти dontrefresh . Если вы найдете его, и если для него установлено значение 1, измените его значение на 0 .

Вероятно, вы найдете его в одном из следующих мест в зависимости от того, является ли ваша Windows 32-битной или Windows 64-битной:

HKEY_CLASSES_ROOT CLSID Instance
HKEY_CLASSES_ROOT Wow6432Node CLSID Instance

Если вы его не видите, у вас будет создать путь Instance dontrefresh , щелкнув правой кнопкой мыши и выбрав команду «Создать». > DWORD на каждом уровне следующим образом:

Не обновляются приложения в Play Market: устранение ошибки

  • Щелкните правой кнопкой мыши> Создать> Ключ> Назовите его
  • Щелкните правой кнопкой мыши> Создать> Ключ> Назовите его экземпляр
  • Щелкните правой кнопкой мыши Экземпляр> Создать> DWORD для 32-разрядных систем. -ИЛИ- QWORD для 64-разрядных систем.
  • Затем снова щелкните правой кнопкой мыши это слово, переименуйте его в dontrefresh и присвойте ему значение 0 .

Известно, что это помогло решить проблему в большинстве случаев.

Если это не так, вот несколько других советов:

1] Используйте ShellExView из Nirsoft и отключите сторонние расширения оболочки, которые могут препятствовать нормальному функционированию Windows Explorer. Это может быть метод проб и ошибок.

Читайте также:
Программа которая настраивает видео

2] В диспетчере задач завершите процесс explorer.exe и перезапустите его снова. Также восстановите настройки Explorer по умолчанию. Для этого откройте «Свойства папки» и на вкладке «Общие» нажмите «Восстановить настройки по умолчанию». Нажмите Применить и выйти.

3] Некоторые обнаружили, что удаление кеша миниатюр и восстановление кеша иконок помогло им решить проблему.

4] Перезагрузитесь в чистом состоянии загрузки и попробуйте устранить проблему.

Эта проблема кажется довольно распространенной – настолько, что для нее даже есть аббревиатура: WEDR – проводник Windows не обновляется! Итак, у BSOD появился компаньон!

Microsoft выпустила некоторые исправления для решения таких проблем в KB960954 и KB823291. Прежде чем принять решение о загрузке и применении, проверьте, ЕСЛИ они применимы к вашей операционной системе и ситуации.

См. Этот пост, если значки вашего рабочего стола медленно загружаются при запуске в Windows 10.

ОБНОВЛЕНИЕ . Также см. комментарий от tralala/Truth101/Guest ниже.

Проверьте это сообщение, если обнаружите, что ваша корзина не обновляется правильно.

Источник: techarks.ru

Окно C ++ WINAPI не обновляется

У меня есть простое окно внутри потока, который создается с помощью инъекции DLL , Вот так выглядит моя тема:

int Thread() < HWND hwnd; MSG messages; WNDCLASSEX wincl; /* The Window structure */ wincl.hInstance = hThisInstance; wincl.lpszClassName = szClassName; wincl.lpfnWndProc = WindowProcedure; wincl.style = CS_CLASSDC; wincl.cbSize = sizeof(WNDCLASSEX); wincl.hIcon = LoadIcon(NULL, IDI_APPLICATION); wincl.hIconSm = LoadIcon(NULL, IDI_APPLICATION); wincl.hCursor = LoadCursor(NULL, IDC_ARROW); wincl.lpszMenuName = NULL; wincl.cbClsExtra = 0; wincl.cbWndExtra = 0; wincl.hbrBackground = (HBRUSH)COLOR_BACKGROUND; if (!RegisterClassEx( hwnd = CreateWindowEx( 0, szClassName, «Windows App», WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 544, 375, NULL, NULL, hThisInstance, NULL ); ShowWindow(hwnd, SW_SHOW); while (true) < if (GetMessage( TranslateMessage( DispatchMessage( >SetWindowText(hwnd, b); ShowWindow(hwnd, SW_SHOW); UpdateWindow(hwnd); RedrawWindow(hwnd, NULL, NULL, RDW_UPDATENOW); //do the stuff that computes values to show > return 0; >

Читайте также:
Как узнать где находится человек по номеру телефона программа для Андроид

И это моя оконная процедура:

LRESULT CALLBACK WindowProcedure(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) < switch (message) < case WM_PAINT: < PAINTSTRUCT ps; HDC hdc = BeginPaint(hwnd, TextOut(hdc, 10, 10, b, 50); EndPaint(hwnd, return 0L; >break; case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hwnd, message, wParam, lParam); > return 0; >

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

И несмотря на использование этих 3 функций внутри цикла: ShowWindow , UpdateWindow , RedrawWindow перерисовка не работает так, как хотелось бы. Когда я работаю с приложением, которое внедряется и генерирует значение, которое я хочу отобразить в моем созданном окне, ни строка заголовка, ни основная область моего окна не обновляются. Но когда желаемое значение изменяется, и я перемещаю курсор мыши по окну, строка заголовка обновляется. Что касается основной области, она обновляется ТОЛЬКО, когда я перетаскиваю окно к краю экрана, чтобы покрыть место, где должен отображаться текст, а затем раскрыть его (он может даже частично перерисоваться) или просто свернуть и восстановить окно.

Решение

if (GetMessage( TranslateMessage( DispatchMessage( >SetWindowText(hwnd, b); ShowWindow(hwnd, SW_SHOW); UpdateWindow(hwnd); RedrawWindow(hwnd, NULL, NULL, RDW_UPDATENOW);

GetMessage блоки если нет сообщений для обработки.
Вы должны либо убедиться, что у него есть сообщения для обработки, возможно, с помощью SetTimer для создания сообщений таймера, либо изучить использование PeekMessage вместо GetMessage (с флагом PM_REMOVE)

Другие решения

Вызов InvalidateRect до UpdateWindow ,

Источник: web-answers.ru

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru