ПредишенСледващото

Setochki (TStringGrid, TDrawGrid) в Delphi

  • Borderstyle - стил на рамката. Тук са възможни варианти bssingie или bsNone. Можете да изберете, от своя страна, да инсталирате и двата вида и да видим какви са те.
  • coiumncount - броя на колоните в мрежата. Оставете го, тъй като е - 5 броя.
  • Defauitcoiwidth - ширината на колоните по подразбиране.
  • DefauitDrawing - по подразбиране рисунка. Ако това е зададено вярно, тогава компонента ще покаже влезе самите данни. Ако False, необходимостта да го направи по своя собствена в отговор на съответните събития.
  • DefauitcoiHeight - по подразбиране височина на реда. Зададената стойност тук е достатъчно голям, така че нека се въведе 16. Така че мрежата ще изглежда по-елегантен, поне за моя вкус.
  • Fixedcoior - цветът на фиксираните редовете и колоните. Фиксираните клетки не могат да влязат в текста, те се използват като удар с глава. Фиг. 11.9 Първата колона и първия ред са фиксирани и следователно показва цветни контроли (цвят по подразбиране).
  • Fixedcois - броят на фиксираните колони. Те винаги са на първо място, не можете да създадете фиксирана колона в средата на решетката. Докато е там, може би това е само въпрос на време, но вие трябва да напишете кода сами.
  • FixedRows - броят на фиксираните линии. Те винаги са на първо място, не можете да създадете стационарна линия в средата на решетката. Това може да стане само от себе си.
  • GridLinewidth - дебелината на разделителни линии на мрежи.
  • Настройки - настройки на окото. Ако кликнете два пъти върху левия бутон на мишката върху този имот или един път на площад в ляво от името на имот, а след това разкри голям списък с допълнителни свойства.

Нека разгледаме всеки един от тях поотделно:

    • goFixedVertLine - изготвяне вертикални решетъчни линии на фиксирани клетки;
    • goFixedHorzLine - да се направи хоризонталните линии на мрежата във фиксирани клетки;
    • govertLine - изготвяне вертикални решетъчни линии в нефиксирана клетки;
    • goHorzLine - да се направи хоризонталните линии на мрежата в не-фиксирани клетки;
    • goRangeSeiect - ви позволява да изберете няколко клетки;
    • goDrawFocuSeiected - да привлече фокуса на избраната клетка;
    • goRowSizing - дали е възможно да промените размера на редовете чрез плъзгане на мишката;
    • goCoisizing - дали можете да промените размера на колони от плъзгане на мишката;
    • goRowMoving - дали е възможно да се движат по линията (ако е истина, а след това можете да щракнете върху бутона на мишката, което я поставя указател към фиксирани линии клетка, и плъзнете на нова позиция);
    • goCoiMoving - дали е възможно да се движат в колоната (ако е истина, а след това можете да щракнете върху бутона на мишката, поставяйки го указател към колона фиксирана клетка и да го плъзнете към нова позиция);
    • goEditing - дали е възможно да се въвеждат данни от клавиатурата, за да мрежа (за нашия пример ние ще установи действителна);
    • goTabs - ако са настроени така, че могат да пътуват между клетките с помощта на бутоните <ТаЬ> ;
    • goRowseiect - ако има фалшиви, избраната клетка се разпределят само (ако е вярно, тогава целият низ);
    • goAlwaysshowEditor - ако фалшива, а след това, когато се прилага към клетка, за да го редактирате, което трябва да натиснете или . ако е вярно, то веднага след като клетката е освободена, тя може да се редактира директно;
    • goThumbTracking - дали да разчитам на данни, докато потребителят се движи лентата за превъртане.
  • RowCount - брой редове. За първия пример имаме достатъчно пет.
  • scrollBars- дали да се показва плъзгачите, необходими.
    • ssNone - няма шоу;
    • ssHorizontal -само хоризонталната лента;
    • ssVertical - само вертикалната лента.

Така че нека да напише първия пример. Създаване на манипулатор за събитието Onshow форма и пиша там съдържанието обявата

процедура TMainForm.FormShow (Sender: TObject);

Задача TStringGrid има друго свойство, което не е описано в обекта инспектор клетки. Този имот едномерен масив от редове, в които се съхраняват данните, показани в таблицата. За да получи достъп до клетката да бъдат написани StringGridl.Cells [брой колона, брой клетки].

ВНИМАНИЕ. Номерирането на колони и редове е нулева база.

Например, ако искате да запишете във втората колона и четвъртият ред на текста "Hello," Вие трябва да напишете:

По същия начин можете да и прочете съдържанието на клетката:

ако StringGridl.Cells [1,3] = 'Добре' направете [действия].

Фиг. 11.10 можете да видите прозорец, който показва пример под формата на небрежност.

Нека да се засили този пример и в същото време по-дълбоко запознати с мрежата. Както можете да видите в примера е областта на Роден. В тази област трябва да въведете датите, а след това те трябва да

Setochki (tstringgrid, tdrawgrid) в Delphi, Delphi, Delphi компоненти Delphi източник

има определен формат. Би било много удобно, ако тази област може да се настрои вход маска, но мрежата не се поддържа. Тук можете да използвате един hitrost-, когато потребителят кликне върху желаната област, заместител компонент TMaskEdit, и нека потребителят въвежда информация в него по много специфичен формат.

Нека да се прилагат посочените в практиката. За да направите това, поставете компонент форма TMaskEdit (местоположение не е от значение) и го наричат ​​DateEdit. Разположен на маската за датата 99/99/9999. Сега го видим собственост на невярна, компонентът не се вижда.

Създаване на събитие и да го onDrawCeii пише съдържанието на обявата:

процедура TMainForm.StringGridlDrawCell (Подател: TObj др; Acol, ARow: Integer; Rect: TRect; Състояние: TGridDrawState);

DateEdit.Visible: = фалшива; // Направете невидим DateEdit компонент

ако (gdFocused в държава), тогава // ако текущата клетка е на фокус, а след това.

ако Acol = л // след това ако съставен клетка от първата колона, след това.

// Добави да DateEdit текст DateEdit.Text клетка: = StringGridl.Cells [Acol, ARow]; // Задаване на лявата позиция

DateEdit.Left: = Rect.Left + StringGridl.Left + 2; // Задаване на най-горната позиция

DateEdit.Top: = Rect.Top + StringGridl.top + 2; // Задаване на ширината

DateEdit.Width: = Rect.Right - Rect.Left; // Задаване на височината

DateEdit.Height: = Rect.Bottom - Rect.Top; // ли ​​DateEdit компонент видима

Този манипулатор се нарича, когато е необходимо да се привлече някои клетката. Ако цялата мрежа е изготвен, той се нарича отделно за всяка клетка. Delphi за нас да се създаде процедура манипулатор StringGridlDrawCell събития със следните параметри:

подател - е указател към обекта, който генерира събитието;

  • arow и AcOl - брой ред и колона номер (координати) на клетката, която е необходимо да се привлече;
  • Rect- структура, която показва относителното размера и позицията на клетката.

Какво се разбира под "роднина" дума? Rect структура изглежда така:

Типове TRect = запис

За ляво, горе отдясно и отдолу: Integer; приключи;

Както можете да видите, това е структура от четири parametrov- за ляво, горе вдясно и долу. Фиг. 11.11 стрелка показва размера, който ще Ляв параметри и десния Rect структура. Размерите са посочени в пиксели. Параметърът десния ще покаже разстоянието в пиксели от левия ръб на решетката

до десния край на клетката, както и при определяне на левия и най-горната позиция на клетката

Отдолу е разстоянието от горния ръб на решетката на долния ръб на клетката. Това означава, че ние получаваме от размера по отношение на самата мрежа, а не на цялата форма.

Е, последния параметър премина към нас в процедурата за боравене със събития, - състояние. Тя съдържа информация за състоянието на клетката, която трябва да бъде изготвена. Условия могат да бъдат, както следва:

  • gdseiected - клетка е избран;
  • gdFocused - клетка има входен фокус;
  • gdFixed - клетка се фиксира.

Ако параметър за състояние нито една от тези стойности, тя е проста клетка. Членка параметър е обявен като набор от ценности. Това означава, че може да приеме всяка от тези стойности, или комбинация от тях. За да проверите дали е установено нещо в държавата, е необходимо да се напише:

ако (в Държавен стойност), след това Run действието

Това е, което се тества във втория ред на код за присъствие ценности gdFocused. И само ако клетката, че трябва да се прави, е в центъра, се извършват следните действия.

Setochki (tstringgrid, tdrawgrid) в Delphi, Delphi, Delphi компоненти Delphi източник
Но преди това, ние не крием маскирани поле за въвеждане, така че тя може да се види в друга клетка, както и че няма проблеми, е по-добре да се скрие.

Ако изготвянето на клетка на фокус, обръщаме внимание на това, което в момента на създаване на колона е клетка. Ако това е първата колона (където трябва да въведете датата), ние показваме DateEdit на мястото на клетката в процес на изготвяне. За тази цел първо присвояваме текста в DateEdit, която трябва да бъде в дадена клетка. След това настройте позицията и размера на DateEdit компонент и след това да го покаже.

Както можете да видите, процесът е много прост и елегантен. Сега трябва само да се създаде манипулатор събитие # 111; nchange за DateEdit компонент. Това събитие се случва, когато данните се променя в реда за въвеждане, а това означава, че ние трябва да бъдем на тяхното право да се регистрират в редактируем мрежова клетка, в противен случай те ще бъдат загубени. Това е така, защото всички данни се влезе в DateEdit, а не в мрежата, и да ги преместите, ние трябва да ръчно:

процедура TMainForm.DateEdi tChange (подателя: TObj др);

За по-нататъшно консолидиране на материала в тази част на главата, нека да последното TSheskvoh компонент вид колона, която ви позволява да промените стойността в клетката между "омъжена" и "Single". За да направите това във формуляра, трябва да инсталирате компонента кутийката и да го направи невидим. След това трябва да се промени onDrawCeii събитие, както е показано на Обява:

процедура TMainForm.StringGridlDrawCell (подателя: TObj др; Acol,

ARow: Integer; Rect: TRect; Състояние: TGridDrawState); започвам

ако (gdFocused в държава), след това да започне, ако Acol = л след това да започне

DateEdit.Left: = Rect.Left + StringGridl.Left + 2;

DateEdit.Top: = Rect.Top + StringGridl.top + 2;

DateEdit.Width: = Rect.Right - Rect.Left;

DateEdit.Height: = Rect.Bottom - Rect.Top;

ако Acol = 4 след това започва

и е CheckBoxl.Caption = 'ао "след CheckBoxl.Checked: = вярно

CheckBoxl.Left: = Rect.Left + StringGridl.Left + 2;

CheckBoxl.Top: = Rect.Top + StringGridl.top + 2;

CheckBoxl.Width: = Rect.Right - Rect.Left;

CheckBoxl.Height: = Rect.Bottom - Rect.Top;

И, разбира се, трябва да се "хване" събитие # 111; nКликнете, CheckBox1 компонент да пиша променената стойност обратно в мрежата. В този манипулатор, пишете код оферта:

процедура TMainForm.CheckBoxlClick (Sender: TObject);

ако CheckBoxl.Checked = вярно, тогава CheckBoxl.Caption: "Женен" = друг

Подкрепете проекта - споделете линка, благодаря!