Sign in Join
Wiki copytemporary

TStringGrid/ru: what changed

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

Title: TStringGrid/ru

OldNewLine
1+------------------------------------------------------------------------
2+
3+--Zoltanleo 00:38, 6 October 2018 (CEST) Ввиду сложности дословного перевода текста с английского на русский слова, требующиеся по смыслу, но отсутствующие в английской версии, указаны в квадратных скобках.
4+
5+------------------------------------------------------------------------
6+
7+**TStringGrid** ![](/wiki-images/6/67/Tstringgrid.png) это компонент с вкладки [[Additional tab/ru|Additional tab]] палитры компонент [[Component Palette/ru|Component Palette]]. Stringgrid обеспечивает табличное представление текстовой информации, которая может быть отредактирована.
8+
9+## Пример программы StringGrid
10+
11+Чтобы создать этот пример, создайте новый проект в Lazarus. Выберите TStringGrid, чтобы добавить на форму, щелкнув компонент TStringGrid из области меню или окна компонента, затем нажмите на форму. В этом случае, как показано \[на рисунке\], также были выбраны и брошены на форму две кнопки [[TButton/ru|TButton]]. В этом примере также необходимо выбрать компонент [[TOpenDialog/ru|TOpenDialog]] и поместить его в форму.\
12+
13+![](/wiki-images/7/7c/TStringGrid02.png)
14+
15+## Настройка столбцов и изменение их свойств
16+
17+Столбцы могут быть легко добавлены щелчком правой кнопки мыши 'Columns: TGridColumns':\
18+
19+![](/wiki-images/f/f0/TStringGrid09.png)\
20+
21+При выборе AddItem, новый столбец отобразится ниже. На вкладке Properties \[в окне\] Object Inspector отображается новый список Properties\[(свойств)\] и Events\[(событий)\], относящихся к этому столбцу. Отсюда имена столбцов задаются вместе с шириной. Когда закончите \[добавлять столбцы\], TreeView будет выглядеть так:\
22+
23+![](/wiki-images/3/39/TStringGrid10.png)\
24+
25+В этом примере имя Button1 было изменено на ButtonAddFiles, а имя Button2 было изменено на ButtonExit. StringGrid1 был растянут и кнопки были выровнены, как показано \[на рисунке\]. Обратите внимание, что есть строка и столбец другого цвета. Это состояние иллюстрирует концепцию, что эта строка и столбец могут быть \[предназначена\] для ярлыков заголовков соответствующего столбца или строки. Конечно, это состояние по умолчанию можно изменить, просто изменив 'FixedCols' или 'FixedRows' в Object Inspector.\
26+
27+![](/wiki-images/d/de/TStringGrid03.png)\
28+
29+В этом случае вы можете увидеть, что строки заголовков изменены, а компонент StringGrid1 привязан \[к краям формы\]. Это было достигнуто путем выполнения двух шагов. ***Первый*** включает в себя просмотр Object Inspector и выбор различных свойств по мере необходимости. Один шаг, который следует предпринять при запуске, - это внимательно посмотреть свойства по умолчанию. Когда вы внесли многочисленные изменения и вам нужно \[отменить изменения\] , \[то сделать\] это намного проще, если вы знаете, каково было их состояние в начале или на различных этапах \[изменений\]. Состояние этих свойств на последнем изображении иллюстрирует только одну фиксированную строку с заголовками столбцов. Это состояние иллюстрируется \[следующим кодом\]\
30+
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. `
40+
41+После просмотра \[результатов\] вашей работы путем нажатия кнопки Run в Lazarus, возможно вы пожелаете изменить эти свойства. В этом случае были выбраны дополнительные свойства ColClickSorts и AlternateColor.
42+
43+***Второе***, что можно сделать, это использовать Редактор Привязок (View -\> AnchorEditor), чтобы привязать стороны StringGrid к основной формой.
44+
45+## Использование доступных предопределенных свойств
46+
47+В нижней части Object Inspector вы можете найти полезную информацию о свойствах, показанных в этом примере:\
48+![](/wiki-images/e/ea/TStringGrid04.png)\
49+
50+Чтобы внести информацию в компонент StringGrid1, необходимо либо добавить данные из TStream/LoadCVSFile, либо связать сетку с базой данных, либо \[совершить\] другие подобные действия. Если привязываться к базе данных, \[для этих целей лучше использовать\] компоненты, как TDBGrid. Другие компоненты, такие как OpenDialog, также могут помочь в использовании таких методов, как LoadCVSFile. Во многих случаях необходимо напрямую связывать данные либо с указанными ячейками, либо с диапазонами. В нашем примере мы будем использовать метод InsertRowWithValues. Для этого необходимо добавить к ButtonAddFiles событие \[нажатия на кнопку\], щелкнув вкладку 'Events' Object Inspector'а и выбрав событие 'OnClick'.\
51+![](/wiki-images/f/f0/TStringGrid05.png)
52+
53+## Программная блокировка добавления данных в StringGrid
54+
55+При создании обработчика события *OnClick* для кнопки *ButtonAddFilesClick* редактор кода SourceEditor должен создать блок кода для процедуры *ButtonAddFilesClick*. К этому вы должны добавить следующий код:
56+
57+``` pascal
58+ uses
59+ Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
60+ Grids, LazFileUtils, LazUtf8;
61+ . . . .
62+ types
63+ { TForm1 }
64+ TForm1 = class(TForm)
65+ ButtonAddFiles : TButton;
66+ . . . .
67+ procedure ButtonAddFilesClick(Sender : TObject);
68+ procedure ButtonExitClick(Sender : TObject);
69+ . . . .
70+ var
71+ Form1 : TForm1;
72+ implementation
73+ {$R *.lfm}
74+ { TForm1 }
75+ procedure TForm1.ButtonExitClick(Sender : TObject);
76+ begin
77+ Close;
78+ end;
79+ ...
80+ procedure TForm1.ButtonAddFilesClick(Sender : TObject);
81+ var
82+ FilePathName : string;
83+ begin
84+ if OpenDialog1.Execute then
85+ FilePathName := OpenDialog1.Filename;
86+ AddFilesToList(FilePathName);
87+ end;
88+```
89+
90+Процедура закрытия приложения показана для полноты. В процедуре *ButtonAddFilesClick* теперь мы используем *OpenDialog1* и выбираем метод *Execute*. Как показано в выражении *if-then*, там проверяется логическое свойство execute. Этот метод по умолчанию имеет значение true, поэтому следующая строка при выполнении дает свойство *OpenDialog1* 'FileName' нашей переменной 'FilePathName'.
91+
92+В последней строке кода показана новая процедура *AddFilesToList*. Теперь нам нужно создать эту процедуру. В объявлении типов в разделе *Public* или *Private* нам нужно добавить эту новую процедуру. В процессе реализации \[(по умолчанию \<Shift\>+\<Ctrl\>+\<C\>)\] создается кодовый блок для процедуры. В этом примере мы будем использовать файлы DVD, как показано на этой иллюстрации:\
93+
94+![](/wiki-images/d/dc/TStringGrid06.png)\
95+Мы хотим, чтобы эти файлы были перечислены в StringGrid1.
96+
97+``` pascal
98+ Type
99+ . . . .
100+ private
101+ procedure AddFilesToList(FilePathName : String);
102+ . . . .
103+ procedure TForm1.AddFilesToList(FilePathName : String);
104+ var
105+ D, R, K : integer;
106+ FileName, FilePath : string;
107+ SearchRec1, SearchRec2 : TSearchRec;
108+ FileListVideo, FileListVst : TStringList;
109+ begin
110+ FileListVideo := TStringList.Create;
111+ FileListVst := TStringList.Create;
112+ FileName := ExtractFileName(FilePathName);
113+ FilePath := ExtractFilePath(FilePathName);
114+ FileListVideo := FindAllFiles(FilePath,'VIDEO_TS.*',true, faDirectory);
115+ R := 1;
116+ K := 0;
117+ for D := 0 to FileListVideo.Count -1 do
118+ begin
119+ if FindFirstUtf8(FilePath, faAnyFile and faDirectory, SearchRec1)=0 then
120+ begin
121+ repeat
122+ With SearchRec1 do
123+ begin
124+ FileName := ExtractFileName(FileListVideo.Strings[D]);
125+ K := FileSizeUtf8(FileListVideo.Strings[D]);
126+ StringGrid1.InsertRowWithValues(R,['0', FileName, IntToStr(K)]);
127+ R := R + 1;
128+ end;
129+ until FindNextUtf8(SearchRec1) <> 0;
130+ end;
131+ FindCloseUtf8(SearchRec1);
132+ end;
133+ .
134+ FileListVst := FindAllFiles(FilePath, 'VTS_*.*', true, faDirectory);
135+ K := 0;
136+ for D := 0 to FileListVst.Count -1 do
137+ begin
138+ if FindFirstUtf8(FilePath, faAnyFile and faDirectory,SearchRec2)=0 then
139+ begin
140+ repeat
141+ With SearchRec2 do
142+ begin
143+ FileName := ExtractFileName(FileListVst.Strings[D]);
144+ K := FileSizeUtf8(FileListVst.Strings[D]);
145+ StringGrid1.InsertRowWithValues(R,['1', FileName, IntToStr(K)]);
146+ R := R + 1;
147+ end;
148+ until FindNextUtf8(SearchRec2) <> 0;
149+ end;
150+ FindCloseUtf8(SearchRec2);
151+ end;
152+ StringGrid1.SortColRow(true, 1,1,StringGrid1.RowCount-1);
153+ FileListVst.Free;
154+ FileListVideo.Free;
155+ end;
156+```
157+
158+В этом примере используются методы 'FindAllFiles' из 'FileUtils' и 'FindFirstUtf8', 'FindNextUtf8' и 'FindCloseUtf8' из 'LazFileUtils'.
159+
160+## Столбцы с CheckBox
161+
162+Одна из функций, которая может быть очень полезна в приложениях TStringGrid, имеет столбец с checkbox, по которому пользователь либо может щелкнуть, чтобы обозначить его выбор, либо использовать для отображения определенного состояния для некоторого свойства. Добавление этого типа столбца показано в этом коде. В методе *InsertRowWithValues* первый столбец имеет '0', показанный в первой части кода, когда выбираются файлы, содержащие 'VIDEO_TS*'. '0' иллюстрирует логическое состояние checkbox'а, как отмеченный (1) и не отмеченный (0). При выборе в Object Inspector'е StringGrid1 -\> Columns: TGridColumns -\> 0-Select в TreeView отображаются значения ValueChecked и ValueUnchecked. Вы можете использовать другие числа или добавить код для изменения состояния.
163+
164+## Метод InsertRowWithValues
165+
166+В этом примере метод InsertRowWithValues используется для добавления данных в наш компонент StringGrid1. Данные каждого столбца вводятся с запятой. Может потребоваться использование функций приведения типов для получения данных в строковом формате. Переменные могут быть ссылками или просто отображаться как текст, так как наши '0' и '1' относятся к столбцу checkbox'а.\
167+
168+![](/wiki-images/d/d3/TStringGrid08.png)
169+
170+После запуска нашего нового приложения и нажатия кнопки 'AddFiles' открывается диалоговое окно, позволяющее нам выбрать файл(ы), который нужно добавить. Если вы нажмете на заголовок столбца, StringGrid1 будет отсортирован в направлении, указанном зеленой стрелкой. Результат должен выглядеть так, как показано на следующем рисунке:\
171+
172+![](/wiki-images/e/e4/TStringGrid07.png)
173+
174+В зависимости от ваших потребностей могут быть выбраны другие свойства, позволяющие редактировать, изменять размеры столбцов и т.д.
175+
176+## См. также
177+
178+- [[TDrawGrid/ru|TDrawGrid]]
179+- [[TDBGrid/ru|TDBGrid]]
180+- [[Grids Reference Page/ru|Grids Reference Page]]
181+
182+---
183+*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