Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2008.09.21;
Скачать: [xml.tar.bz2];

Вниз

Мерцание окна при изменение размеров   Найти похожие ветки 

 
demon ©   (2008-08-07 01:12) [0]

Окно сильно мерцает при изменении размеров, на окне listbox, его размеры изменял так:

function WindowProc( .....
......
     WM_SIZE :
       MoveWindow(HListBox, 0, 0, LOWORD(lparam)-16,  HIWORD(lparam)-50, true);

Из-за чего это может быть?


 
{RASkov} ©   (2008-08-07 01:20) [1]

> [0] demon ©   (07.08.08 01:12)

WM_SIZE приходит после изменения размеров, а затем опять смена.... Есть WM_SIZING...


 
demon ©   (2008-08-07 01:28) [2]


> Есть WM_SIZING...

Тогда вообще listbox закрашиваеться цветом фона.


 
{RASkov} ©   (2008-08-07 11:32) [3]

Попробуй вопрос более менее попонятнее сформулировать...
Я что-то не совсем верно понял, поэтому в [1] возможно бред написал...


 
demon ©   (2008-08-07 12:04) [4]

Вроде сделал нормально сам.
Переформулирую: есть окно, на этом окне компонент ListBox, всё саздано через API. Нужно чтобы при изменении размеров окна, ListBox тоже менял свои размеры, поэтому при событии от окна WM_SIZE я менял размеры ListBox.
Но при изменении размеров ListBox мерцает. Вот и хотел узнать как от этого избавиться.


 
Darkmoon   (2008-08-07 12:24) [5]

поставь параметр doublebuffed:=true в листбоксе и не мудись)


 
DVM ©   (2008-08-07 12:43) [6]


> Darkmoon


> есть окно, на этом окне компонент ListBox, всё саздано через
> API


 
Slym ©   (2008-08-07 12:50) [7]

2Darkmoon   (07.08.08 12:24) [5]
demon ©   (07.08.08 12:04) [4]всё саздано через API
а через SetWindowPos не пробывал?
SetWindowPos(HListBox,0,0,0,LOWORD(lparam)-16,  HIWORD(lparam)-50,SWP_NOZORDER or SWP_NOACTIVATE or SWP_NOMOVE);


 
DVM ©   (2008-08-07 13:06) [8]


> demon ©   (07.08.08 01:12)  


> Из-за чего это может быть?

Из двойного стирания фона сначала для родительского окна потом для дочернего. Возможно поможет WS_CLIPCHILDREN


 
DVM ©   (2008-08-07 13:22) [9]

Вот на скорую руку набросал (нет проверки возвращаемых значений и проч.), не мерцает ничего:


program test;

uses
 windows, messages;

var
 wc: TWndClassEx;
 MainWnd: HWND;
 ListBoxWnd: HWND;
 Mesg: TMsg;

//------------------------------------------------------------------------------

function WindowProc(Wnd: HWND; Msg: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
begin
 case msg of
   wm_create:
     begin
       ListBoxWnd :=  CreateWindow("LISTBOX", "",
                                 WS_VISIBLE or WS_CHILD,
                                 0, 0, 0, 0, Wnd, 0, 0, nil);
     end;
   wm_destroy :
     begin
       PostQuitMessage(0);
       Result := 0;
       exit;
     end;
   WM_SIZE :
     begin
       MoveWindow(ListBoxWnd, 0, 0, LOWORD(lparam)-10,  HIWORD(lparam)-10, true);
       Result := 0;
     end;
 else
   Result := DefWindowProc(Wnd, Msg, wParam, lParam);
 end;
end;

//------------------------------------------------------------------------------

var
 xPos, yPos, nWidth, nHeight: integer;

begin
 wc.cbSize:=sizeof(wc);
 wc.style:=cs_hredraw or cs_vredraw;
 wc.lpfnWndProc:=@WindowProc;
 wc.cbClsExtra:=0;
 wc.cbWndExtra:=0;
 wc.hInstance:=HInstance;
 wc.hIcon:=LoadIcon(0,idi_application);
 wc.hCursor:=LoadCursor(0,idc_arrow);
 wc.hbrBackground:=COLOR_BTNFACE+1;
 wc.lpszMenuName:=nil;
 wc.lpszClassName:="WndClass1";

 RegisterClassEx(wc);

 xPos := 100;
 yPos := 150;
 nWidth := 400;
 nHeight := 250;

 MainWnd := CreateWindowEx(0, "WndClass1", "Caption", ws_overlappedwindow or WS_CLIPCHILDREN,
                           xPos, yPos, nWidth, nHeight, 0, 0, Hinstance, nil);

 ShowWindow(MainWnd,CmdShow);
 while GetMessage(Mesg,0,0,0) do
   begin
     TranslateMessage(Mesg);
     DispatchMessage(Mesg);
   end;
end.



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2008.09.21;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.007 c
2-1218439239
начинающий
2008-08-11 11:20
2008.09.21
Журнал документов


15-1217311137
TUser
2008-07-29 09:58
2008.09.21
Установка Линукса на рейд 1


2-1218186434
ProgRAMmer Dimonych
2008-08-08 13:07
2008.09.21
OnIdle в приложении на чистом WinAPI


2-1218531259
mandalay
2008-08-12 12:54
2008.09.21
Как из фрейма обратится к форме на которой лежит этот фрейм?


2-1218506684
Abcdef123
2008-08-12 06:04
2008.09.21
Проблемы перевода проекта с Delphi6 на Delphi 2007





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский