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

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

Разные винды - разный результат [D7, WinXP]


MUHAMOR ©   (2005-04-28 21:40:00) 

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

И что самое интересное то это не происходит под теми виндами под которыми я компилировал. Т.е. если я в ХР скомпил то в ХР все будет работать, но под 98 будет выше сказаное, и наоборот. Подскажите что нибудь.


MUHAMOR   (2005-04-30 08:48:00) [1]

Процедура перерисовки:

Procedure PaintForm;
Var
 I:Byte;
Begin
MainFonBB.Draw(MainDC,0,0);
If EditWindow Then Begin
 SelectObject(MainDc,MainFonBB.Font);
 SetBkMode(MainDc, Windows.TRANSPARENT);
 SetTextColor(MainDC, $000000);
 TextOut(MainDC,101,41,PChar(TXTEdit),Length(TXTEdit));
 SetTextColor(MainDC, $AAFFAA);
 TextOut(MainDC,100,40,PChar(TXTEdit),Length(TXTEdit));
 SelectObject(MainDc,MainFont);
For I:=1 To 8 Do Begin
 TXT:=EditWND[I].Name;
 SetBkMode(MainDC, Windows.TRANSPARENT);
 SetTextColor(MainDC, $000000);
 TextOut(MainDC,EditWND[I].X+2,EditWND[I].Y-18,PChar(EditWnd[I].Name),Length(EditWnd[I].Name));
 SetTextColor(MainDC, $FFFFFF);
 TextOut(MainDC,EditWND[I].X,EditWND[I].Y-20,PChar(EditWnd[I].Name),Length(EditWnd[I].Name));
 End;
 End;

If FoundWindow Then Begin
 SelectObject(MainDc,MainFonBB.Font);
 SetBkMode(MainDc, Windows.TRANSPARENT);
 SetTextColor(MainDC, $000000);
 TXT:='ÏÎÈÙÅÌ ???';
 TextOut(MainDC,48,401,PChar(TXT),Length(TXT));
 SetTextColor(MainDC, $AAFFAA);
 TextOut(MainDC,48,400,PChar(TXT),Length(TXT));
 SelectObject(MainDc,MainFont);
 TXT:=EditWND[9].Name;
 SetBkMode(MainDC, Windows.TRANSPARENT);
 SetTextColor(MainDC, $000000);
 TextOut(MainDC,EditWND[9].X+2,EditWND[9].Y-18,PChar(EditWnd[9].Name),Length(EditWnd[9].Name));
 SetTextColor(MainDC, $FFFFFF);
 TextOut(MainDC,EditWND[9].X,EditWND[9].Y-20,PChar(EditWnd[9].Name),Length(EditWnd[9].Name));
 TXT:='Ãäå èñêàòü...';
 SetTextColor(MainDC, $000000);
 TextOut(MainDC,291,391,PChar(TXT),Length(TXT));
 SetTextColor(MainDC, $FFFFFF);
 TextOut(MainDC,290,390,PChar(TXT),Length(TXT));
 End;

If FoundDRParam Then Begin
 SetBkMode(MainDC, Windows.TRANSPARENT);
 SelectObject(MainDC,MainFonBB.Font);
 SetTextColor(MainDC, $000000);
 TXT:='Ñåãîäÿ '+ToDay+' èìåíèííèêè:';
 TextOut(MainDC,32,37,PChar(TXT),28);
 SetTextColor(MainDC, $9999FF);
 TextOut(MainDC,30,35,PChar(TXT),28);
 End;
End;

Отрисовка кнопок:

Procedure PaintButton;
Var
 I:Byte;
Begin
MainDC:=GetDC(MainWND);
For I:=1 To TotalButton Do
  If I=SelectButton Then  Begin
      If MouseDown Then Button[I].Pic3.Draw(MainDC,Button[I].X,Button[I].Y)
         Else
         Button[I].Pic2.Draw(MainDC,Button[I].X,Button[I].Y);
      End
      Else
      If Button[I].Visable Then
         Button[I].Pic1.Draw(MainDC,Button[I].X,Button[I].Y);
 ReleaseDC(MainWND,MainDC);
End;

Обработка WM_PAINT:

WM_PAINT  : Begin
           BeginPaint(MainWND,PS);
           MainDC:=PS.hdc;
           PaintForm;
           EndPaint(MainWND,PS);
           PaintButton;
           Result:=0;
           Exit;
           End;

Ну вот вроде все что связано с перерисовкой.


alpet   (2005-04-29 17:40:00) [2]

У тебя в коде ошибки, и указанная функция абсолютно не причем. Выложи лучше код который отвечает за перерисовку окна, если таковой есть (обработчик WM_PAINT).


MUHAMOR   (2005-04-29 17:27:00) [3]

Меняю вот так:

GetWindowRect(MainWND,TmpRect);
Movewindow(MainWnd,TmpRect.Left,TmpRect.Top,614,488,True);

>Не может такого быть для этой функции по крайней мере.
Ну я покрайней мере на 5 машинах тестил, все именно так как есть, я сам с таким первый раз столкнулся, запара полная, просто незнаю что поменять для нормальной работы.


DVM   (2005-04-29 14:30:00) [4]


> Т.е. если я в ХР скомпил то в ХР все будет работать, но
> под 98 будет выше сказаное, и наоборот

Не может такого быть для этой функции по крайней мере.


alpet   (2005-04-29 12:18:00) [5]

Прототип функции в Windows.pas:

function MoveWindow(hWnd: HWND; X, Y, nWidth, nHeight: Integer; bRepaint: BOOL): BOOL; stdcall;

Ты устанавливаешь последний параметр в TRUE ?


Чапаев   (2005-04-29 11:39:00) [6]

Попробуй SetWindowPos().


Наверх

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