Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

TextOut в win2000 [Win2k]


AllDer ©   (2004-09-10 16:48:00) 

проблемы с обнавлением текста
форма апи-ставлю
таймер  SetTimer(hwnd,1,10000,@UP);

procedure UP;  // тут текст выводится
begin
TextOut( hdc,0,0,PChar(sizedisk),4);
end;

sizedisk-меняющий текст
все идеально работает в Win98,текст меняется.
В Win2000 c тем же! кодом,работает плохо,
текст меняется не через 10 сек,а вобщее не меняется,
либо через 2 минуты,прописка
TextOut( hdc,0,0,PChar(sizedisk),4);
updateWindow(hwnd); не дает результата
под XP не пробывал,но возможен глюк
Может не так работаю с рисованием ?


AllDer   (2004-09-18 14:52:00) [1]

а кто сделать может?
чтоб готовый код был,SetTimer не применять
для подробностей пишите (а то это commerce уже wmr_wmz)
marinazolotay@mail.ru


Polevi   (2004-09-12 19:35:00) [2]

неправильно работаешь, рисовать надо в WM_PAINT, по таймеру InvalidateRect


AllDer   (2004-09-11 22:19:00) [3]

никто незнает?


AllDer   (2004-09-11 14:53:00) [4]

да действительно не обнавляется,если,только
окно какое нубудь поверху не пустить(поверх моего),а потом
свернуть-тогда обновится

!Код (скомплируйте и посмотрите в Win2000\XP)

для проверочки я повесил секундное обнавление
и убрал все лишнее
в Win98 секунды идут,в других плохо,
что посоветуете эксперты?

uses
 Windows, Messages;
implementation
const
 AppName = 'TForm1';

var
 hWnd: DWord;
 Msg: TMsg;
 WndClass: TWndClassEx;
 hdc:dword;
 disksize:cardinal;
 id:dword;
 test:word;   // Тест  вывода на экран
//-----------------------------------------------------

function WndFunc(hWnd, Msg: DWord; wParam, lParam: integer): integer; stdcall;
begin
 if Msg = WM_Destroy
    then begin
           PostQuitMessage(0);
           Result := 0;
         end
    else Result := DefWindowProc(hWnd, Msg, wParam, lParam);
end;

procedure UP;stdcall;  // проверка вывода
label a;
var
buf:string;
 begin
 a:
 sleep(800);
test:=test+1; // test count
str(test,buf);
TextOut( hdc,0,0,PChar( buf),5);
UpdateWindow(hwnd);
goto a;
end;

begin
WndClass.cbSize:=sizeof(WndClass);
WndClass.style:=CS_GLOBALCLASS;
WndClass.lpfnWndProc:=@WndFunc;
WndClass.cbClsExtra:=0;
WndClass.cbWndExtra:=0;
WndClass.hInstance:=HInstance;
WndClass.hIcon:=LoadIcon(0,0);
WndClass.hCursor:=LoadCursor(0,idc_arrow);
WndClass.hbrBackground:=COLOR_BTNFACE+1;
WndClass.lpszMenuName:=nil;
WndClass.lpszClassName:=AppName;

WndClass.hInstance := hInstance;
 RegisterClassEx(WndClass);
hWnd := CreateWindowEx(
 0,AppName,AppName,
 ws_overlappedwindow ,
 300,200,155,120,0,0,hInstance,Nil);

 hdc:=getDC(hWnd);
ShowWindow(hWnd,CmdShow);
CreateThread(nil,0,@UP,0,0,id);
while  GetMessage(Msg, 0, 0, 0)do ;
begin
     TranslateMessage(Msg);
     DispatchMessage(Msg);
    end;
Halt(Msg.wParam);
end.


AllDer   (2004-09-10 22:27:00) [5]

>A hdc у тебя какой?
в смысле ?
получаю так hdc:=getDC(hwnd);
где hwnd:=CreateWindow(..главное окно

как бы еще обновить,
выяснил что с тем работает кодом!
а не работает с трейдом в Win2000 (win98 - все ОК!)
может потому что у меня это в триде крутится,
procedure UP;stdcall;  // тут текст выводится
begin
TextOut( hdc,0,0,PChar(sizedisk),4);
end;

запуск естественно CreateThread(
сам то он выполняется,а вот обновление не синхронное!


Kind   (2004-09-10 22:08:00) [6]

A hdc у тебя какой?


MetalFan   (2004-09-10 17:19:00) [7]

а могит система загружена?


Наверх

Титульная страница Поиск, карта сайта Написать письмо