Spuneți-mi cum să eliminați o selecție de celulă dintr-o coardă

Cereți cum să eliminați alocarea unei celule la StringGrid

În mod automat în albastru, elementul tabelului StringGrid [0,0]
Dacă apoi faceți clic pe masă. atunci selecția în albastru dispare.






Cum pot elimina o selecție în albastru când rulez Stringgrid?

Da am uitat să spun că nu există elemente fixe.

Aici este proprietatea goDrawFocusSelected că celula curentă este marcată cu o culoare. Colegii cum să-l curățați?

Înțeleg că trebuie să alocăm statutul Fals
Care este sintaxa?
StringGrid1.Options: = [goDrawFocusSelected: = false];

StringGrid1.Options.goDrawFocusSelected: = false; de ​​asemenea, acest lucru nu funcționează

Dacă doar mi-ar răspunde. ce nonsens a cerut?


> StringGrid1.Options: = [goDrawFocusSelected: = false];

Și ce fel de compilator nu te-a certat.
Opțiunile acestui set. Operațiile pe seturi sunt descrise în ajutor și se referă la conceptele de bază ale limbii.


> inteligente # xA0; (07.12.07 18:32)
>
> Automat în albastru, elementul tabelului StringGrid [0,
> 0]
> Dacă faceți clic pe masă. apoi selecția de albastru
> culoarea dispare.
> Cum pot elimina o selecție albastră când rulez Stringgrid?
>
>

xs. N-am găsit căi simple.


> # xA0; TabOrder = 0

Nu ajută. Apropo, FixedXX nu cânta la pian.

Shl A TabOrder - Nu am atins-o, a fost "accidental" în hit-ul dfm, deoarece această proprietate a fost implicită -1, iar în IO se modifică (cel puțin 0)

Mulțumesc, dar, din păcate, nu a ajutat.
Și problema este asta. în detaliu.
Într-adevăr, în cazul în care grila este desenat de celule albe, iar celula cu coordonatele [0,0] selecție în frontieră abia vizibile, dar imediat ce fac clic pe orice buton în formă de prioritate ridicată în cadrul celulei pictate automat în albastru. Și pot selecta orice celulă cu un șoarece sau chiar cu câteva și toate sunt vopsite în albastru. Nu fac nimic pentru buton. chiar a creat un buton gol oricum afectează.

procedura TForm2.Button3Click (expeditor: TObject);
var i: întreg;
începe
i: = 0;
se încheie;

O rețea este inițializată după cum urmează:
StringGrid1.ColCount: = 32;
StringGrid1.RowCount: = 8;
StringGrid1.DefaultColWidth: = 20;
StringGrid1.DefaultRowHeight: = 20;
StringGrid1.FixedCols: = 0;
StringGrid1.FixedRows: = 0;
form2.StringGrid1.TabOrder: = 0;
StringGrid1.Options: = StringGrid1.Options- [goDrawFocusSelected];
k: = 1;
pentru i: = 0 la 7 nu
# xA0; Pentru j: = 0 la 31 nu
# xA0; începe
StringGrid1.Cells [j, i]: = inttostr (k);
# xA0; k: = k + 1;
# xA0; sfârșitul;

Da, folosesc D7

> [13] inteligenți # xA0; (07.12.07 23:45)
> [14] inteligenți # xA0; (07.12.07 23:45)

procedura TForm1.FormCreate (expeditor: TObject);
var i, j, k: Integer;
începe
# xA0; StringGrid1.ColCount: = 32;
# xA0; StringGrid1.RowCount: = 8;
# xA0; StringGrid1.DefaultColWidth: = 20;
# xA0; StringGrid1.DefaultRowHeight: = 20;
# xA0; StringGrid1.FixedCols: = 0;
# xA0; StringGrid1.FixedRows: = 0;
# xA0; k: = 1;
# xA0; pentru i: = 0 până la 7 nu
# xA0; # xA0; Pentru j: = 0 până la 31 nu
# xA0; # xA0; începeți
# xA0; StringGrid1.Cells [j, i]: = inttostr (k);
# xA0; # xA0; k: = k + 1;
# xA0; se încheie;
se încheie;

procedura TForm1.StringGrid1DrawCell (Expeditor: TObject; ACol, ARow: Integer;
# xA0; Rect: TRect; Stat: TGridDrawState);
începe
# xA0; dacă gdSelected în State atunci
# xA0; cu TStringGrid (Sender), TStringGrid (Sender) .Canvas să înceapă
# xA0; # xA0; Brush.Color: = clWhite;






# xA0; # xA0; FillRect (Rect);
# xA0; TextRect (Rect, Rect.Left + 2, Rect.Top + 2, Celule [ACol, ARow]);
# xA0; se încheie;
se încheie;

> Brush.Color: = ClWhite;

Această linie este mai bine înlocuită de:
Brush.Color: = Culoare;
Dacă te confundă cu asta fără ea:
dacă nu Sender este TStringGrid apoi Exit; // dar cu, de asemenea, trebuie să verificați
dacă începe gdSelected in State
# xA0; TStringGrid (Expeditor) .Canvas.Brush.Color: = Culoare;
# xA0; TStringGrid (Expeditor) .Canvas.FillRect (Rect);
# XA0; TextRect (Rect, Rect.Left + 2, Rect.Top + 2, TStringGrid (Sender) .Cells [AcOI, Arow]);
se încheie;

> TStringGrid (Expeditor) .Canvas.Brush.Color: = Culoare;

Desigur,
TStringGrid (Expeditor) .Canvas.Brush.Color: = TStringGrid (Expeditor) .Color;
Sunt deja confuz :)

> TextRect (Rect, Rect.Left + 2, Rect.Top + 2, TStringGrid (Sender) .Cells [AcOI, Arow]);

În general, este clar :) TextRect este o metodă de pânză a unei grile)
și anume
TStringGrid (Sender) .Canvas.TextRect (Rect, Rect.Left + 2, Rect.Top + 2, TStringGrid (Sender) .Cells [AcOI, Arow]);
toate cu cu ea este mai compact :)

Ceva nu funcționează. oricum, celula evidențiată este evidențiată în albastru când apăsați orice buton.
În general, puteți interzice selectarea mouse-ului cu o celulă?

> [19] inteligenți # xA0; (08.12.07 00:11)
> Ceva nu funcționează. Totuși, este alocată celula alocată în albastru
> când apăsați orice buton

Nu poate fi. În acest exemplu, am eliminat în general selecția.

> [19] inteligenți # xA0; (08.12.07 00:11)

Sau tu și FocusRect, de asemenea, interfera.
Apoi StringGrid.DefaultDrawing = False și trageți grila după cum doriți.

A introdus StringGrid1.DefaultDrawing: = false;
în inițializare și textul a dispărut.

procedura TForm1.FormCreate (expeditor: TObject);
var i, j, k: Integer;
începe
StringGrid1.ColCount: = 32;
StringGrid1.RowCount: = 8;
StringGrid1.DefaultColWidth: = 20;
StringGrid1.DefaultRowHeight: = 20;
StringGrid1.FixedCols: = 0;
StringGrid1.FixedRows: = 0;
k: = 1;
StringGrid1.DefaultDrawing: = false;<<<<<<<<<<<<<Сюда вставил
pentru i: = 0 la 7 nu
# xA0; Pentru j: = 0 la 31 nu
# xA0; începe
StringGrid1.Cells [j, i]: = inttostr (k);
# xA0; k: = k + 1;
# xA0; sfârșitul;
se încheie;
Grilă nu a fost umplut cu un text gol

> [22] inteligente # xA0; (08.12.07 00:22)
> Inserat StringGrid1.DefaultDrawing: = false;

DefaultDrawing nu este doar. acest lucru indică faptul că ieșirea completă (!) a rețelei este pe conștiința programatorului
Ie Aici trebuie să ia în considerare totul și totul, cu excepția grila însăși, este atrasă de mina printr-o rețea.
Așadar, punând această proprietate într-o minciună, acum trebuie să desenați atât fundalul celulei cât și conținutul (textul).
luând în considerare starea celulei, parametrul de stat va ajuta în acest sens. E bine că nu aveți celule fixe și chiar ar trebui să tragă "cu mâna".
Încă o dată. verificați codul în [15]. Poate că nu ați conectat dispozitivul OnDrawCell.

Nu totul are dreptate, nu există selecție de celule, numai albastru selectează automat o celulă selectată anterior de mouse-ul în cadru.
Și acele celule pe care am vrut să le evidențiez nu se evidențiază.
Poate că nu permiteți alocarea celulelor într-un cadru mouse-ul? Pentru că atunci când apăsați orice buton, această celulă din cadru devine albastră. Codul [15] a fost bifat de două ori, numai acele celule pe care doresc să le selectez nu sunt selectate.

Ce e interesant, am desenat o rețea, văd celula zero din cadru, apăs butonul
procedura TForm2.Button3Click (expeditor: TObject);
var i: întreg;
începe
i: = 0;
se încheie;
Ea devine albastră. Apasă mouse-ul pe celulă. albastru dispare. dar rămâne în cadru, apăs pe următoarea celulă. ea devine încadrată. Apăs butonul. Acum, această celulă vecină devine albastră. Cum să scăpați de acest lucru, astfel încât această rețea să fie doar o modalitate de a afișa informații. și nu pe ce mouse-ul deychtviya nu a reacționat?

> [27] inteligenți # xA0; (08.12.07 01:17)

Și acum faceți ca și în [15] și totul funcționează. ) Nu glumesc)
Nu lucrați la condiție
dacă # xA0; (unzero512 [index]> 0) apoi
# xA0; # xA0; # xA0; # xA0; # xA0; # xA0; # xA0; # xA0; # xA0; # xA0; # xA0; # xA0; # xA0; # xA0; începeți
.
se încheie;
De ce? Cunoaște-te. )
Ei bine, și, în consecință, acea bucată de cod de la [15] care este în atunci începe. sfârșitul "în intervalul de timp". prin urmare, toate necazurile tale)
De ce nu verificați imediat codul pe un nou proiect gol, fără linii de cod inutile. Ar fi trebuit mult timp să-și dea seama ce sa întâmplat. )
Mult noroc)

> [30] inteligente # xA0; (08.12.07 01:34)

La tine peste tot verificarea elementelor din acest (onezero512) o matrice, dar oriunde sa umplut, adică toate elementele matricei conțin 0.
Prin urmare, în TForm2.StringGrid1DrawCell, verificând elementul matricei cu orice index, codul "selecție albastră ștergere" a eșuat și codul nu este executat :(

Această matrice este umplută când este apăsat butonul DMX Channel. elementele acestei matrice sunt 0 sau 1, dacă 1 atunci canalele sunt considerate ocupate, iar pe Grid aceste canale ar trebui să fie evidențiate cu roșu, astfel încât utilizatorul să știe ce este ocupat. dar ce nu.
Matricea conține 256 de octeți după numărul de celule.

Memorie: 0.79 MB
Durată: 0,043 secunde







Articole similare

Trimiteți-le prietenilor: