Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Asm: Общие вопросы > медленное обновние клиентской части окна


Автор: Lonley 29.8.2004, 20:20
============
Привет!!! smile.gif
Вот написал небольшой редактор smile.gif после упорных трудов, но
есть небольшая промблема...
1. обновление экрана клиентской части окна
происходит медленно
2. и вставка текста из буффера обмена тоже медленно
особенно на медленных компьютеров
-------
но в других редакторов токое не происходит в чем промблема
-------
З.Ы.
сообщение WM_PAINT
обрабатывается по умолчанию

--------
взять можно тут smile.gif
http://pascal.net.ru/forum/index.php?act=ST&f=2&t=2585

Автор: _Chingachguk_ 30.8.2004, 08:56
На твоем форуме нужно зарегистрироваться, чтобы скачать твой файл. Дай кусок кода, относящийся к делу. Можно использовать SendMessage для вставки буфера в текст ?

Автор: Lonley 30.8.2004, 17:57
Код

WMSIZE:
     mov eax,0
     mov ebx,0
     mov ax,[ebp+014h];ðàçìåð Õ
     mov bx,[ebp+016h];ðàçìåð ïî Y
     sub bx,20  ;êîððåêòèðîâêà îò âåðõíåãî  êðàÿ ò.ê.
   
     push 1

     push ebx
     push eax
     push 20
     push 0
     push [HWNDSTAT]
     call MoveWindow
     
     jmp finish  
  ;  jmp DefWNDPROC
WMCOMMAND:
;---------------------------------Îáðàáîòêà êíîïêè
    mov eax,HWNDBUTT
    cmp DWORD ptr [ebp+14h],eax;ïî àäðåñó ebp+14h õðàíèòñÿ äåñêðèïòîð -=LPARAM=-
                               ;îòïðàâèòåëÿ ñîîòâåòñòâåííî âåäåòñÿ ïðîâåðêà
    je BUTTS
;---------------------------------Îáðàáîòêà ìåíþ îááîóò-------------------------------------    
    CMP WORD PTR  [ebp+10h],5; èíäåíòèôèêàòîð ïóíêòà ìåíþ WPARAM
    JE MenAbout
   
    CMP WORD ptr [ebp+10h],1;SAVE
    JE SaveFil
   
    CMP WORD PTR [ebp+10h],2;OPEN
    JE OpenFil
   
    jmp Finish
;=================================Îòêðûòü ôàéë äèàëîãîâîå îêíî    
OpenFil:  
     lea esi,NEWHWND
     mov ebx,[esi]
     mov lpofn_o.hwndOwner,ebx
     
     push offset lpofn_o
     call GetOpenFileNameA
     
     cmp eax,0
     je no_select_op
;===========================================Îòêðûòèå ôàéëà
     lea esi,lpofn.lpstrFile

     push 0
     push FILE_ATTRIBUTE_NORMAL;
     push OPEN_EXISTING   ;OPEN_ALWAYS
     push 0               ;
     push FILE_SHARE_READ   ; ñîâìåñòíîå èñïîëüçîâàíèå    
     push GENERIC_ALL     ; ðåæèì äîñòóïà
     push [esi]           ; Name File
     call CreateFileA
     mov [filedesk],eax
;----------------------------------ðàçìåð ôàéëà
     lea esi,lpFileSizeHigh
     push esi
     push eax
     call GetFileSize
     
     lea esi,lpFileSizeHigh
     mov ebx,[esi]
     add eax,ebx
     mov sizefile,eax
;--------------------------------âûäåëåíèå ïàìÿòè ïîä áóôôåð
     push eax
     push GMEM_ZEROINIT
     call GlobalAlloc
     mov HWNDBUFF,eax
;----------------------------------------
     lea  esi,filedesk           ;
     mov  eax,[esi]              ;
     lea  esi,HWNDBUFF           ;
     mov  ebx,[esi]              ;âñå ýòî äëÿ íàãëÿäíîñòè
     lea esi,SizeFile            ;
     mov edx,[esi]               ;
     lea esi,NuberByteRead       ;
     
     
     push 0
     push esi
     push edx
     push ebx
     push eax
     call ReadFile
;------------------------------
     lea esi,HWNDSTAT
     mov eax,[esi]
     lea esi,HWNDBUFF

     push [esi]
     push eax
     call SetWindowTextA            
;------------------------------Çàêðûâàåì äåñêðèïòîð ôàéëà      
     lea esi,filedesk
     mov eax,[esi]
     push eax
     call CloseHandle
;------------------------------îñâîáîæäàåì äèíàìè÷åñêóþ ïàìÿòü
     lea esi,HWNDBUFF
     mov eax,[esi]
     push eax
     call GlobalFree      
     
;------------------------------------------------


;===========================================================
no_select_op:      
     jmp DefWNDPROC
     
     
;=================================Ñîõðàíèòü ôàéë äèàëîãîâîå îêíî    
SaveFil:
     lea esi,NEWHWND
     mov ebx,[esi]
     mov lpofn.hwndOwner,ebx

     push offset lpofn
     call GetSaveFileNameA
     
     cmp eax,0
     je no_select_sa
     
     lea esi,lpofn.lpstrFile
     
     push 0
     push FILE_ATTRIBUTE_NORMAL
     push OPEN_ALWAYS
     push 0
     push FILE_SHARE_RW          
     push GENERIC_ALL
     push [esi]; Name File
     call CreateFileA
     mov [FileDesk],eax
     
     push [HWNDSTAT]
     call GetWindowTextLengthA
     mov [buffsize],eax
     
     push eax
     push GMEM_FIXED
     call GlobalAlloc
     mov [HWNDBUFF],eax

     lea esi,HWNDBUFF
     mov eax,[esi]
     
     push offset buffsize
     push eax;   offset HWNDBUFF
     push [HWNDSTAT]
     call GetWindowTextA
     
     lea esi,HWNDBUFF
     mov eax,[esi]

     push 0
     push offset FileBytWri
     push [buffsize]
     push [HWNDBUFF]
     push [FileDesk]
     call WriteFile
     

     lea esi,HWNDBUFF
     mov eax,[esi]

     push eax
     call GlobalFree
           
     push [FileDesk]
     call CloseHandle


;===========================================================
no_select_sa:
    jmp DefWNDPROC
MenAbout:
    lea esi,WC.clsHIcon; ãðóçèì àäðåñ äåñêð íàøåé èêîíêè
    push [esi]         ; ãðóçèì èç àäðåñà çíà÷åíèå äåñêðèï íàøåé èêíîêè
    push Offset progr;
    push Offset progs;
 push NEWHWND  ;ÒÓÒ íóæåí äåñêðèïòîð îêíà , à íå ðèëîåíèÿ
 call ShellAboutA
 
    jmp DefWNDPROC
;ShellAbout(Form1.Handle,'Lonley Raven','FreeLancer Programming',0);
BUTTS:
     push 0
     call GetDC
     push 18
     push offset MESS_BUT
     push 10
     push 10
     push eax
     call TextOutA
;=-=-=-SelStart
push [HWNDSTAT]
Call SetFocus
     push 8
     push 4
     push EM_SETSEL
     push [HWNDSTAT]
     Call SendMessageA
     jmp DefWNDProc
WMACTIVATE:
    jmp Finish
;      jmp DefWNDPROC
;===================================
;WMPAINT:
;      
;     jmp finish
;     jmp DefWNDPROC      
;===================================
WMCREATE:
     push offset richeditdll;çàãðóçêà áèáëèîòåêè ñ áîãàòûì ðåäàêòîðîì
     call LoadLibraryA      ;  
     mov hriched,eax        ;äåêðèïòîð îáúåêòà

     push 0
     push [HINST];Äåñêðèïòîð ýêçåïë ïðèëîæåíèÿ
     push 0
     push DWORD PTR [EBP+08h];Äåñêðèïòîð îêíà âëàäåëüöà
     push 250;y
     push 377;x
     push 1 ;y
     push 0  ;x
     push ClsEDIT
     push offset EDITTITLE
     push offset CLSSTATIC
     push WS_EX_CLIENTEDGE
     call CreateWindowExA;ñîçäàëè RICHEDIT
     mov [HWNDSTAT],eax
     
     push 0
     push -1
     push EM_LIMITTEXT
     push [HWNDSTAT]
     call SendMessageA;óñòàíàâëèâàåì íîâûé ðàçìåð áóôåðà òåêñòà ðåäàêòîðà
;---------------------------------------------
     push 0
     push [HINST];Äåñêðèïòîð ýêçåïë ïðèëîæåíèÿ
     push 0
     push DWORD PTR [EBP+08h];Äåñêðèïòîð îêíà âëàäåëüöà
     push 15;y2
     push 52;x2
     push 0;y1
     push 0 ;x1
     push ClsBUT
     push offset BUTTON
     push offset CLSBUTTON
     push 0
     call CreateWindowExA;ñîçäàåì êíîïêó
     mov [HWNDBUTT],eax
;----------------------------------------------
     push offset PMENU
     push [HINST]
     call LoadMenuA
;----------------------------------------------
     push eax
     push DWORD PTR [EBP+08h]
     CAll SetMenu
     
     lea esi,NEWHWND
     mov eax,[esi]
     
     push FALSE
     push eax
     call GetSystemMenu
     mov hSysMenu,eax
     jmp finish
     
;InsertMenuItem(p1: HMENU; p2: UINT; p3: BOOL; const p4: TMenuItemInfo)
DefWNDPROC: ;Îáðàáàòûâàåìûå ñîîáùåíèå ïî óìîë÷àíèþ ò.å. ïî DEFAULT-ó
    Push dword ptr [ebp+14h]
    Push dword ptr [ebp+10h]
    Push dword ptr [ebp+0ch]
    Push dword ptr [ebp+08h]
    call DefWindowProcA
    jmp Finish
WMDESTROY:
    push 0
    call PostQuitMessage
    Mov eax,0
     
FINISH:  ;âîñòàíàâëèâàåì ðåãèñòðû  
    pop edi
    pop esi
    pop ebx
    pop ebp
    ret 16
WNDPROC ENDP  
_TEXT ENDS
END START

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)