Derulați cu dragdrop

Derulare cu DragDrop

Spuneți-mi cum să derulați corect în TreeView când apare DragDrop. Scrolling-ul însuși funcționează pentru mine, dar pe copac există "gunoi". A încercat chiar să facă Repaint, toate la fel nu ajută.







procedura TMainForm1.T1DragOver (Expeditor, Sursa: TObject; X, Y: Integer;
Stat: TDragState; var Acceptați: Boolean);
începe
dacă (Sursa este TLsFileListView28) sau (Sursa este TDATreeView) atunci
Acceptați: = adevărat
altfel
începe
Acceptați: = False;
ieșire;
se încheie;
dacă Y> T1.Height - Sb1.Height - 10 atunci
T1.Perform (WM_VSCROLL, SB_LINEDOWN, 0)
altfel
dacă Y <10 then
T1.Perform (WM_VSCROLL, SB_LINEUP, 0);
T1.Repaint;
se încheie;

T1: TDATreeView;
SB1: TScrollBar;
TDATreeView diferă de TreeView obișnuit doar prin faptul că vă permite să faceți DragDrop în interiorul dvs.

Și întâmplător, a doua întrebare. Cum știu ce înălțime a barei de derulare orizontale va fi implicit la rezoluția ecranului curent? Și apoi trebuie să pui o bandă invizibilă pe formă și să-i iei înălțimea.







Cu privire la a doua întrebare.
GetSystemMetrix SM_CXVSCROLL, SM_CYVSCROLL

Și nu ați încercat să faceți T.ScrollBy (DX, DY)?

clarificare la sky3d - funcția se numește GetSystemMetrics, parametrul necesar este SM_CYHSCROLL

Întârzierea nu ajută. Ce alte propuneri vor exista?

și aici este întârzierea? Ați încercat să dormiți sau ce?

Și dacă o faci doar ca în acest exemplu pe VB - pe DragOver porniți cronometrul și derulați evenimentul din timer?

Nu, nu dormi. Am încercat să mă leg de un timer ca în acest exemplu. Voi încerca acum să traducem pur și simplu întregul exemplu de la VB la Delphi.

A mutat un exemplu la Delphi unul câte unul. Același prostii se dovedește: (.
Pot trimite o captură de ecran pentru oricine interesat. Este necesar să nu fie prea leneș și să instalați VB pentru a verifica acest lucru în original.

ai fi fost mai bine să vină codul

E ciudat. Aveți versiunea corectă de control? Și copacul nu este OwnerDraw? Codul meu funcționează. Doar în caz - puteți încerca să înlocuiți Perform pe

PostMessage (T1.Handle, WM_VSCROLL, SB_LINEDOWN, 0);

Mulțumită tuturor celor care au participat la discuție.
Mult noroc

Memorie: 0,74 MB
Timpul: 0,025 c







Trimiteți-le prietenilor: