მიმოხილვები

როგორ გამოვიყენოთ ყუთები DBGrid- ში

როგორ გამოვიყენოთ ყუთები DBGrid- ში

უამრავი გზა და მიზეზია დელფში DBGrid– ის გამომუშავების შეცვლა. ერთი გზა არის ყუთების დამატება, რათა შედეგი უფრო ვიზუალურად მიმზიდველი იყოს.

სტანდარტულად, თუ თქვენს მონაცემთა ბაზაში გაქვთ boolean ველი, DBGrid აჩვენებს მათ, როგორც "True" ან "False", მონაცემების ველის მნიშვნელობიდან გამომდინარე. ამასთან, გაცილებით უკეთესია, თუ ველების რედაქტირების შესაქმნელად შეარჩიეთ "ნამდვილი" გამშვები ყუთი.

შექმენით ნიმუში განაცხადი

დაიწყეთ ახალი ფორმა დელფში და განათავსეთ TDBGrid, TADOTable და TADOConnection, TDataSource.

დატოვე ყველა კომპონენტის სახელი, როგორც ეს მაშინ არის, როდესაც ისინი პირველად ჩაიყარა ფორმაში (DBGrid1, ADOQuery1, AdoTable1 და ა.შ.). გამოიყენეთ ობიექტის ინსპექტორი, შექმნათ ADOConnection1 კომპონენტის ConnectionString თვისება (TADOConnection), რომ მიუთითოთ QuickiesContest.mdb MS Access მონაცემთა ბაზა.

დაუკავშირდით DBGrid1- ს DataSource1- ს, DataSource1- ს ADOTable1- თან და ბოლოს ADOTable1 ADOConnection1- სთან. ADOTable1 TableName საკუთრებაში უნდა აღინიშნოს სტატიების ცხრილი (იმისათვის, რომ DBGrid აჩვენოს სტატიების ცხრილის ჩანაწერებს).

თუ სწორად დააწესეთ ყველა თვისება, როდესაც აპლიკაციას ახორციელებთ (იმის გათვალისწინებით, რომ ADOTable1 კომპონენტის აქტიური საკუთრება სიმართლეა), თქვენ უნდა ნახოთ, სტანდარტულად, DBGrid აჩვენებს boolean ველის მნიშვნელობას, როგორც "True" ან "False", მონაცემთა ველი მნიშვნელობაზე.

CheckBox DBGrid– ში

DBGrid– ის უჯრაში არსებული უჯრის საჩვენებლად, ჩვენ უნდა გამოვიყენოთ ჩვენთვის ხელმისაწვდომი დროულად.

კომპონენტის პალიტრაზე აირჩიეთ "მონაცემთა კონტროლის" გვერდი და აირჩიეთ TDBCheckbox. ჩამოაგდეთ ფორმა სადმე, - არ აქვს მნიშვნელობა სად, რადგან უმეტესი დრო ის იქნება უხილავი ან ბადეზე დაფარული.

რჩევა: TDBCheckBox არის მონაცემთა ინფორმირებული კონტროლი, რომელიც მომხმარებელს საშუალებას აძლევს შეარჩიოს ან წაშალოს ერთი მნიშვნელობა, რაც შესაფერისია boolean სფეროებში.

შემდეგი, დააყენეთ მისი ხილული ქონება False. შეცვალეთ DBCheckBox1- ის ფერის თვისება იმავე ფერის, როგორც DBGrid (ასე რომ იგი ნაზავდება DBGrid- ით) და ამოიღეთ სათაური.

რაც მთავარია, დარწმუნდით, რომ DBCheckBox1 უკავშირდება DataSource1 და სწორ ველს.

გაითვალისწინეთ, რომ DBCheckBox1 ყველა ზემოთ ჩამოთვლილი ქონებრივი მნიშვნელობა შეიძლება მითითებული იყოს ფორმის OnCreate ღონისძიების მსგავსად:

პროცედურა TForm1.FormCreate (გამგზავნი: TObject);
დაიწყოს
DBCheckBox1.DataSource: = DataSource1;
DBCheckBox1.DataField: = 'გამარჯვებული';
DBCheckBox1.Visible: = მცდარი;
DBCheckBox1.Color: = DBGrid1.Color;
DBCheckBox1.Caption: = ";
// მოგვიანებით ახსნა სტატიაში
DBCheckBox1.ValueChecked: = 'დიახ გამარჯვებული!';
DBCheckBox1.ValueUnChecked: = 'ამჯერად არა.';
დასასრული;

რაც შემდეგ მოდის, ყველაზე საინტერესო ნაწილია. DBGrid– ში ბოულინური ველის რედაქტირებისას, ჩვენ უნდა დავრწმუნდეთ, რომ DBCheckBox1 მოთავსებულია ზემოთ ("მცურავი") უჯრაში DBGrid- ში, რომელიც აჩვენებს ბოულეს ველს.

დანარჩენი (არა-ფოკუსირებული) უჯრედები, რომლებიც ატარებენ ბოულანურ ველებს ("გამარჯვებულის" სვეტში), ჩვენ უნდა გამოვიტანოთ boolean მნიშვნელობის გრაფიკული გამოსახულება (True / False). ეს ნიშნავს, რომ ნახაზისთვის მინიმუმ ორი სურათი გჭირდებათ: ერთი შემოწმებული მდგომარეობისთვის (ნამდვილი მნიშვნელობა) და ერთი არა გადამოწმებული სახელმწიფოსთვის (მცდარი მნიშვნელობა).

ამის მისაღწევად ყველაზე მარტივი გზაა Windows API DrawFrameControl ფუნქციის გამოყენება პირდაპირ DBGrid- ის ტილოზე.

ეს არის კოდი DBGrid- ის OnDrawColumnCell ღონისძიების დამუშავებაში, რომელიც ხდება მაშინ, როდესაც ქსელს უჯრედის დახატვა სჭირდება.

პროცედურა TForm1.DBGrid1DrawColumnCell (
გამგზავნი: TObject; const Rect: TRect; DataCol:
ინტერესი; სვეტი: TColumn; სახელმწიფო: TGridDrawState);
შეკრა არის შემოწმებული: მასივიბულიონი საქართველოს ინტერესი =
(DFCS_BUTTONCHECK, DFCS_BUTTONCHECK ან DFCS_CHECKED);
var
DrawState: ინტერესი;
DrawRect: TRect;
საწყისი (gdFocused შიგნით სახელმწიფო) შემდეგბეგინიფი (სვეტი.Field.FieldName = DBCheckBox1.DataField) შემდეგ
DBCheckBox1.Left: = Rect.Left + DBGrid1.Left + 2;
DBCheckBox1.Top: = Rect.Top + DBGrid1.top + 2;
DBCheckBox1. სიგანე: = Rect.Right - Rect.Left;
DBCheckBox1. Height: = Rect.Bottom - Rect.Top;
DBCheckBox1.Visible: = მართალია;
endendelsebeginif (სვეტი.Field.FieldName = DBCheckBox1.DataField) შემდეგ
DrawRect: = რექტორი;
InflateRect (DrawRect, -1, -1);
DrawState: = ISCheckedColumn.Field.AsBoolean;
DBGrid1.Canvas.FillRect (რექტორი);
DrawFrameControl (DBGrid1.Canvas.Handle, DrawRect,
DFC_BUTTON, DrawState);
დასასრული;
დასასრული;
დასასრული;

ამ ნაბიჯის დასასრულებლად, ჩვენ უნდა დავრწმუნდეთ, რომ DBCheckBox1 უხილავია, როდესაც უჯრედს დავტოვებთ:

პროცედურა TForm1.DBGrid1ColExit (გამგზავნი: TObject);
საწყისი DBGrid1.SelectedField.FieldName = DBCheckBox1.DataField შემდეგ
DBCheckBox1.Visible: = მცდარი
დასასრული;

ჩვენ მხოლოდ ორი ღონისძიება დაგჭირდებათ.

გაითვალისწინეთ, რომ როდესაც რედაქტირების რეჟიმში ხართ, ყველა ღილაკი გადადის DBGrid– ის უჯრედში, ჩვენ უნდა დავრწმუნდეთ, რომ ისინი იგზავნება CheckBox– ში. CheckBox- ის შემთხვევაში, პირველ რიგში, ჩვენ გვაინტერესებს Tab და Space კლავიში. ჩანართმა უნდა გადაიტანოს შეყვანის ფოკუსი შემდეგ უჯრედში, ხოლო Space უნდა შეცვალოს CheckBox– ის მდგომარეობა.

პროცედურა TForm1.DBGrid1KeyPress (გამგზავნი: TObject; var Key: Char);
საწყისი (გასაღები = Chr (9)) შემდეგ გასვლა;
თუ (DBGrid1.SelectedField.FieldName = DBCheckBox1.DataField) შემდეგ
DBCheckBox1.SetFocus;
SendMessage (DBCheckBox1.Handle, WM_Char, სიტყვა (გასაღები), 0);
დასასრული;
დასასრული;

ეს შეიძლება იყოს შესაფერისი, რომ ყუთის სათაური შეიცვალოს, რადგან მომხმარებელი ამოწმებს ან ამოწმებს ყუთს. გაითვალისწინეთ, რომ DBCheckBox– ს აქვს ორი თვისება (ValueChecked და ValueUnChecked), რომელიც გამოიყენება ველში გამოსახული ველი მნიშვნელობის დასადგენად, როდესაც ის შემოწმებულია ან ამოწმდება.

ამ ValueChecked ქონებას აქვს "დიახ, გამარჯვებული!", და ValueUnChecked ტოლია "ამჯერად არა."

პროცედურა TForm1.DBCheckBox1Click (გამგზავნი: TObject);
საწყისი DBCheckBox1. შემოწმდა შემდეგ
DBCheckBox1.Caption: = DBCheckBox1.ValueChecked
სხვაგან
DBCheckBox1.Caption: = DBCheckBox1.ValueUn ამოწმებულია;
დასასრული;

აწარმოეთ პროექტი და ნახავთ ყუთებს Winner ველ სვეტში.