Sign in Join
Wiki copytemporary

TStringGrid/ru: what changed

Revision 1 to 2. Removed lines have a minus sign; added lines have a plus sign.

OldNewLine
11------------------------------------------------------------------------
22
33--Zoltanleo 00:38, 6 October 2018 (CEST) Ввиду сложности дословного перевода текста с английского на русский слова, требующиеся по смыслу, но отсутствующие в английской версии, указаны в квадратных скобках.
44
55------------------------------------------------------------------------
66
77**TStringGrid** ![](/wiki-images/6/67/Tstringgrid.png) это компонент с вкладки [[Additional tab/ru|Additional tab]] палитры компонент [[Component Palette/ru|Component Palette]]. Stringgrid обеспечивает табличное представление текстовой информации, которая может быть отредактирована.
88
99## Пример программы StringGrid
1010
1111Чтобы создать этот пример, создайте новый проект в Lazarus. Выберите TStringGrid, чтобы добавить на форму, щелкнув компонент TStringGrid из области меню или окна компонента, затем нажмите на форму. В этом случае, как показано \[на рисунке\], также были выбраны и брошены на форму две кнопки [[TButton/ru|TButton]]. В этом примере также необходимо выбрать компонент [[TOpenDialog/ru|TOpenDialog]] и поместить его в форму.\
1212
1313![](/wiki-images/7/7c/TStringGrid02.png)
1414
1515## Настройка столбцов и изменение их свойств
1616
1717Столбцы могут быть легко добавлены щелчком правой кнопки мыши 'Columns: TGridColumns':\
1818
1919![](/wiki-images/f/f0/TStringGrid09.png)\
2020
2121При выборе AddItem, новый столбец отобразится ниже. На вкладке Properties \[в окне\] Object Inspector отображается новый список Properties\[(свойств)\] и Events\[(событий)\], относящихся к этому столбцу. Отсюда имена столбцов задаются вместе с шириной. Когда закончите \[добавлять столбцы\], TreeView будет выглядеть так:\
2222
2323![](/wiki-images/3/39/TStringGrid10.png)\
2424
2525В этом примере имя Button1 было изменено на ButtonAddFiles, а имя Button2 было изменено на ButtonExit. StringGrid1 был растянут и кнопки были выровнены, как показано \[на рисунке\]. Обратите внимание, что есть строка и столбец другого цвета. Это состояние иллюстрирует концепцию, что эта строка и столбец могут быть \[предназначена\] для ярлыков заголовков соответствующего столбца или строки. Конечно, это состояние по умолчанию можно изменить, просто изменив 'FixedCols' или 'FixedRows' в Object Inspector.\
2626
2727![](/wiki-images/d/de/TStringGrid03.png)\
2828
2929В этом случае вы можете увидеть, что строки заголовков изменены, а компонент StringGrid1 привязан \[к краям формы\]. Это было достигнуто путем выполнения двух шагов. ***Первый*** включает в себя просмотр Object Inspector и выбор различных свойств по мере необходимости. Один шаг, который следует предпринять при запуске, - это внимательно посмотреть свойства по умолчанию. Когда вы внесли многочисленные изменения и вам нужно \[отменить изменения\] , \[то сделать\] это намного проще, если вы знаете, каково было их состояние в начале или на различных этапах \[изменений\]. Состояние этих свойств на последнем изображении иллюстрирует только одну фиксированную строку с заголовками столбцов. Это состояние иллюстрируется \[следующим кодом\]\
3030
31-FixedCols\[0\],
32-
33-`                 FixedRows[1], `\
34-`                 HeaderHotZones[gzFixedCols], `\
35-`                 HeaderPushZones[gzFixedCols], `\
36-`                 Options[goFixedVertLine,goFixedHorzLine,goVertLine,goHorzLine,goRangeSelect,goSmoothScroll], `\
37-`                 TitleFont[Color[clPurple]], `\
38-`                 Style[fsBold], and `\
39-`                 RowCount = 1. `
31+```text
32+ FixedCols[0],
33+ FixedRows[1],
34+ HeaderHotZones[gzFixedCols],
35+ HeaderPushZones[gzFixedCols],
36+ Options[goFixedVertLine,goFixedHorzLine,goVertLine,goHorzLine,goRangeSelect,goSmoothScroll],
37+ TitleFont[Color[clPurple]],
38+ Style[fsBold], and
39+ RowCount = 1.
40+```
4041
4142После просмотра \[результатов\] вашей работы путем нажатия кнопки Run в Lazarus, возможно вы пожелаете изменить эти свойства. В этом случае были выбраны дополнительные свойства ColClickSorts и AlternateColor.
4243
4344***Второе***, что можно сделать, это использовать Редактор Привязок (View -\> AnchorEditor), чтобы привязать стороны StringGrid к основной формой.
4445
4546## Использование доступных предопределенных свойств
4647
4748В нижней части Object Inspector вы можете найти полезную информацию о свойствах, показанных в этом примере:\
4849![](/wiki-images/e/ea/TStringGrid04.png)\
4950
5051Чтобы внести информацию в компонент StringGrid1, необходимо либо добавить данные из TStream/LoadCVSFile, либо связать сетку с базой данных, либо \[совершить\] другие подобные действия. Если привязываться к базе данных, \[для этих целей лучше использовать\] компоненты, как TDBGrid. Другие компоненты, такие как OpenDialog, также могут помочь в использовании таких методов, как LoadCVSFile. Во многих случаях необходимо напрямую связывать данные либо с указанными ячейками, либо с диапазонами. В нашем примере мы будем использовать метод InsertRowWithValues. Для этого необходимо добавить к ButtonAddFiles событие \[нажатия на кнопку\], щелкнув вкладку 'Events' Object Inspector'а и выбрав событие 'OnClick'.\
5152![](/wiki-images/f/f0/TStringGrid05.png)
5253
5354## Программная блокировка добавления данных в StringGrid
5455
5556При создании обработчика события *OnClick* для кнопки *ButtonAddFilesClick* редактор кода SourceEditor должен создать блок кода для процедуры *ButtonAddFilesClick*. К этому вы должны добавить следующий код:
5657
5758``` pascal
5859 uses
5960 Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
6061 Grids, LazFileUtils, LazUtf8;
6162 . . . .
6263 types
6364 { TForm1 }
6465 TForm1 = class(TForm)
6566 ButtonAddFiles : TButton;
6667 . . . .
6768 procedure ButtonAddFilesClick(Sender : TObject);
6869 procedure ButtonExitClick(Sender : TObject);
6970 . . . .
7071 var
7172 Form1 : TForm1;
7273 implementation
7374 {$R *.lfm}
7475 { TForm1 }
7576 procedure TForm1.ButtonExitClick(Sender : TObject);
7677 begin
7778 Close;
7879 end;
7980 ...
8081 procedure TForm1.ButtonAddFilesClick(Sender : TObject);
8182 var
8283 FilePathName : string;
8384 begin
8485 if OpenDialog1.Execute then
8586 FilePathName := OpenDialog1.Filename;
8687 AddFilesToList(FilePathName);
8788 end;
8889```
8990
9091Процедура закрытия приложения показана для полноты. В процедуре *ButtonAddFilesClick* теперь мы используем *OpenDialog1* и выбираем метод *Execute*. Как показано в выражении *if-then*, там проверяется логическое свойство execute. Этот метод по умолчанию имеет значение true, поэтому следующая строка при выполнении дает свойство *OpenDialog1* 'FileName' нашей переменной 'FilePathName'.
9192
9293В последней строке кода показана новая процедура *AddFilesToList*. Теперь нам нужно создать эту процедуру. В объявлении типов в разделе *Public* или *Private* нам нужно добавить эту новую процедуру. В процессе реализации \[(по умолчанию \<Shift\>+\<Ctrl\>+\<C\>)\] создается кодовый блок для процедуры. В этом примере мы будем использовать файлы DVD, как показано на этой иллюстрации:\
9394
9495![](/wiki-images/d/dc/TStringGrid06.png)\
9596Мы хотим, чтобы эти файлы были перечислены в StringGrid1.
9697
9798``` pascal
9899 Type
99100 . . . .
100101 private
101102 procedure AddFilesToList(FilePathName : String);
102103 . . . .
103104 procedure TForm1.AddFilesToList(FilePathName : String);
104105 var
105106 D, R, K : integer;
106107 FileName, FilePath : string;
107108 SearchRec1, SearchRec2 : TSearchRec;
108109 FileListVideo, FileListVst : TStringList;
109110 begin
110111 FileListVideo := TStringList.Create;
111112 FileListVst := TStringList.Create;
112113 FileName := ExtractFileName(FilePathName);
113114 FilePath := ExtractFilePath(FilePathName);
114115 FileListVideo := FindAllFiles(FilePath,'VIDEO_TS.*',true, faDirectory);
115116 R := 1;
116117 K := 0;
117118 for D := 0 to FileListVideo.Count -1 do
118119 begin
119120 if FindFirstUtf8(FilePath, faAnyFile and faDirectory, SearchRec1)=0 then
120121 begin
121122 repeat
122123 With SearchRec1 do
123124 begin
124125 FileName := ExtractFileName(FileListVideo.Strings[D]);
125126 K := FileSizeUtf8(FileListVideo.Strings[D]);
126127 StringGrid1.InsertRowWithValues(R,['0', FileName, IntToStr(K)]);
127128 R := R + 1;
128129 end;
129130 until FindNextUtf8(SearchRec1) <> 0;
130131 end;
131132 FindCloseUtf8(SearchRec1);
132133 end;
133134 .
134135 FileListVst := FindAllFiles(FilePath, 'VTS_*.*', true, faDirectory);
135136 K := 0;
136137 for D := 0 to FileListVst.Count -1 do
137138 begin
138139 if FindFirstUtf8(FilePath, faAnyFile and faDirectory,SearchRec2)=0 then
139140 begin
140141 repeat
141142 With SearchRec2 do
142143 begin
143144 FileName := ExtractFileName(FileListVst.Strings[D]);
144145 K := FileSizeUtf8(FileListVst.Strings[D]);
145146 StringGrid1.InsertRowWithValues(R,['1', FileName, IntToStr(K)]);
146147 R := R + 1;
147148 end;
148149 until FindNextUtf8(SearchRec2) <> 0;
149150 end;
150151 FindCloseUtf8(SearchRec2);
151152 end;
152153 StringGrid1.SortColRow(true, 1,1,StringGrid1.RowCount-1);
153154 FileListVst.Free;
154155 FileListVideo.Free;
155156 end;
156157```
157158
158159В этом примере используются методы 'FindAllFiles' из 'FileUtils' и 'FindFirstUtf8', 'FindNextUtf8' и 'FindCloseUtf8' из 'LazFileUtils'.
159160
160161## Столбцы с CheckBox
161162
162163Одна из функций, которая может быть очень полезна в приложениях TStringGrid, имеет столбец с checkbox, по которому пользователь либо может щелкнуть, чтобы обозначить его выбор, либо использовать для отображения определенного состояния для некоторого свойства. Добавление этого типа столбца показано в этом коде. В методе *InsertRowWithValues* первый столбец имеет '0', показанный в первой части кода, когда выбираются файлы, содержащие 'VIDEO_TS*'. '0' иллюстрирует логическое состояние checkbox'а, как отмеченный (1) и не отмеченный (0). При выборе в Object Inspector'е StringGrid1 -\> Columns: TGridColumns -\> 0-Select в TreeView отображаются значения ValueChecked и ValueUnchecked. Вы можете использовать другие числа или добавить код для изменения состояния.
163164
164165## Метод InsertRowWithValues
165166
166167В этом примере метод InsertRowWithValues используется для добавления данных в наш компонент StringGrid1. Данные каждого столбца вводятся с запятой. Может потребоваться использование функций приведения типов для получения данных в строковом формате. Переменные могут быть ссылками или просто отображаться как текст, так как наши '0' и '1' относятся к столбцу checkbox'а.\
167168
168169![](/wiki-images/d/d3/TStringGrid08.png)
169170
170171После запуска нашего нового приложения и нажатия кнопки 'AddFiles' открывается диалоговое окно, позволяющее нам выбрать файл(ы), который нужно добавить. Если вы нажмете на заголовок столбца, StringGrid1 будет отсортирован в направлении, указанном зеленой стрелкой. Результат должен выглядеть так, как показано на следующем рисунке:\
171172
172173![](/wiki-images/e/e4/TStringGrid07.png)
173174
174175В зависимости от ваших потребностей могут быть выбраны другие свойства, позволяющие редактировать, изменять размеры столбцов и т.д.
175176
176177## См. также
177178
178179- [[TDrawGrid/ru|TDrawGrid]]
179180- [[TDBGrid/ru|TDBGrid]]
180181- [[Grids Reference Page/ru|Grids Reference Page]]
181182
182183---
183184*From the Free Pascal wiki, page "TStringGrid/ru", as it stood on 2020-03-02 after a change by Trev, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).*

Back to history