Nu redrageți dbgrida

Nu redrafli DBGrida

Bine ai venit! Solicitați, vă rog, cum să interzicați redigarea DBGrida când se deplasează un alt obiect (panoul).
Înțelesul este următorul:
- interzic redresarea
- panoul temporizatorului
- Permiteți revopsirea.
Acum, panoul se mișcă foarte încet, când în DBGride există multe elemente, mai ales decorate.

Nu!
DisableControls dezactivează actualizarea datelor în DataSet
Și am nevoie de o redesenare DBGrid.
Desigur, am încercat DisableControls - nu ajută, panoul superior de pe DBGrid se mișcă la fel foarte încet.

Cel mai probabil, în orice fel. Fiecare fereastră trebuie redesenată, dacă se schimbă ceva.

Nu pot să înțeleg: ce fel de panou?

înainte de apariția panoului:
# xA0; Salvați imaginea în bitmap;
# xA0; ascundeți grilă,
# xA0; puneți bitmap-ul pentru examinare.
Când mutați panoul, este ușor să desenați această diagramă
Când ascundeți panoul, întoarceți totul înapoi

Vă sugerez:
a) mutați panoul nu pe pixel de fiecare dată, dar la numărul de pixeli, proporțional cu timpul petrecut de trecerea anterioară. Corectați timpul total de schimbare dorit. Apoi plecarea va fi pentru un (aproximativ) timp.


> Și pe acest bitmap va fi posibilă desenarea părților lipsă
> grilă?

Lipsesc, de ce? Din câte înțeleg, în timp ce panoul plutește, grila nu se schimbă.

Așadar, vă sugerăm să vă amintiți întreaga parte vizibilă a grilei înainte ca panoul să apară.
Și atunci când zborul pe panou nu va fi desenat, ci bitmap.

> DisableControls dezactivează actualizarea datelor din DataSet
Prostii. Dezactivează doar redarea.

Ce oroare!
- opriți panoul
- zabitmapit Grid
- ascundeți grila
- desena Bitmap
- activați panoul
- părăsi
- distrugeți harta wit
- activați grila

Doamne ferește, cineva va vedea asta.

la Desdechado
# xA0; DBGRID.DataSource.DataSet.DisableControls
# xA0 Dezactivează afișarea datelor în controalele de date asociate cu setul de date.

# xA0; Metoda DBGrid nu are DisableControls!

Și cel mai important, am scris același lucru pe care l-am verificat.


> Metoda DBGrid nu are DisableControls!

Firește. DisableControls aparține setului de date "y.


> Dezactivează afișarea datelor în controalele asociate datelor
> cu setul de date.

Tradus. Vedeți cuvântul "actualizare" undeva?

Deși, dacă nu toți aceiași lucru nu ajută, este necesar să căutăm altceva.

Apropo, ceva ce nu vreau să-ți descarc dosarul. Puneți-o într-un alt loc.

Dar intuitiv:
Dacă dezactivați grila însăși? Ie de exemplu, puneți-l în Activat?
Sau dezactivați DrawCell? Deci, cum este cauzată de randare? Dezactivați DrawCell - ascundeți panoul - activați DrawCell?

În cazul ăsta, picioarele nu se bate. Cel puțin în față :)

Dacă panoul nu modifică dimensiunea / conținutul grila, este suficient să setați pavilionul CS_SAVEBITS în clasa de ferestre a panoului.
Grilă nu este redesenată atunci când ComboBox este deschis pe ea.
Pentru nefig.

la Igor
# xA0; Poate un mic detaliu, în ce proprietate este setat pavilionul?


> # xA0; Este posibil un pic mai mult în detaliu, în ce proprietate este expus
> pavilion?

Panoul suprascrie metoda CreateParams, scrie:

procedura TMyPanel.CreateParams (var Params: TCreateParams);
începe
# xA0; moștenit;
# xA0; WindowClass.Style: = WindowClass.Style sau CS_SAVEBITS;
se încheie;


> special decorate.

De ce este gol atunci DrawCell?

la Bugage
În principiu, logica este fier! Într-adevăr prins. Dar, oricum, să spunem # xA0; că nu există nici o decorare.

la Igor
# xA0; este necesar să vă creați propriul panou de componente?


> Dar, totuși, să spunem # xA0; că nu există nici o decorare.

Deci Nu înțeleg. Este așa sau nu?

VEB # xA0; (06.04.06 17:24) [20]


> # xA0; este necesar să vă creați propriul panou de componente?

Ei bine, nu chiar componenta ta, ci moștenitorul celui existent. Desigur, puteți încerca fereastra ferestrei existente pentru a seta stilul clasei:

# xA0; SetClassLong (Panel1.Handle, GCL_STYLE, GetClassLong (Panel1.Handle, GCL_STYLE) sau CS_SAVEBITS);
# xA0; Panel1.Perform (CM_RECREATEWND, 0, 0);

dar sunt sigur că această metodă vă va ajuta.

Am avut o suspiciune puternică că a fost ceva de genul:

pentru i: = Panel1.Left to Panel1.Bounds.Right face
începe
# xA0; Panel1.Left: = i;
# xA0; Application.ProcessMessages;
se încheie;

Evident, după fiecare schimbare a panoului către pixel, este trasată o rețea (eu suspectez că aproape toți, nu sunt optimizați în mod special pentru ei). Prin urmare, soluția din [7] a)


> Îmi cer scuze, ați văzut dosarul. )

Nu, nu este. Eu nu descarc EXEs, mi-am destui viruși :) Ce-i atât de interesant despre asta?

Panoul iese de la cronometrul (tmVisPanel), care este pornit de buton. Unic tot timpul redrafli GRID. Prin urmare, vreau să dezactivez redesenarea GRIDa.

procedura TfmDisks.tmVisPanelTimer (expeditor: TObject);
var dx. integer;
începe
# xA0; dacă sbVisiblePanel.Down apoi dx: = -20 alt dx: = 20; // apăsat
# xA0; paMRight.Width: = paMRight.Width - dx;
# xA0; dacă paMRight.Width <1 then begin
# xA0; # xA0; paMRight.Width: = 1;
# xA0; # xA0; tmVisPanel.Enabled: = false;
# xA0; sfârșitul;
# xA0; dacă paMRight.Width> = 300 atunci # xA0; începeți
# xA0; # xA0; paMRight.Width: = 300;
# xA0; # xA0; tmVisPanel.Enabled: = false;
# xA0; sfârșitul;
se încheie;

Domnilor, îmi pare rău, pentru o întrebare incorectă. Am postat codul și înțeleg cum am înșelat pe toată lumea. Adevărat că problema a rămas.
Panoul cu GRIDOM are proprietatea align = alClient. dar panoul care se mișcă # xA0; align = alRight. Panoul în mișcare scade pur și simplu în dimensiune. Un panou cu DBGridom ocupă tot spațiul.

Spuneți-mi cum să optimizați sau, în general, cum să faceți o ieșire corectă, ieșire la bord?

la Igor
# xA0; garantez absența codului rău intenționat! O glumă cu privire la saltul ehe-shnikov îi plăcea.

> veb # xA0; (07.04.06 12:07) [27]
> Panoul cu GRIDOM are proprietatea align = alClient. și panoul,
> # xA0; care se mișcă # xA0; align = alRight. Panoul în mișcare este simplu
> scăderea dimensiunii. Un panou cu DBGridom ia tot
> spațiu.

Tada mai bine, cred.

Imediat după apăsarea butonului:
Grid.align: = none;
Panel.align: = niciuna; (în această ordine!)

Prin cronometru:
Panel.Left = Panel.Left - 1;
Grid.Bounds.Right: = Grid.Bounds.Right + 1;

După ce panoul a plecat - restaurați
Grid.align: = client;

Este de la sine înțeles că nu se abate de la alte recomandări ale asociaților, dar mi se pare o îmbunătățire. Dar nu am testat.


> Spuneți-mi cum să optimizați sau, în general, cum să procedați corect
> plecare ușoară, sosire la bord?

Am o suspiciune puternică că este perfectă în orice fel.

Articole similare