Здравствуйте, уважаемые подписчики! Извините за большую паузу. Вот темы этого выпуска:
1. Автоматическое изменение ширины ячеек в StringGrid.
2. Вызов диалога "Выбор папки".
1. Поскольку в компоненте StringGrid по умолчанию все столбцы имеют одинаковую ширину - в некоторых ячейках текст обрезается. Чтобы этого избежать, после заполнения StringGrid нужно для каждого столбца находить текст максимальной длины и в соответствии с его длиной устанавливать ширину всего столбца.
Здесь StringGrid заполняется случайными строками при создании формы.
procedure TForm1.FormCreate(Sender: TObject);
var
x, y, w: integer;
s: string;
MaxWidth: integer;
beginwith StringGrid1 do
ClientHeight := DefaultRowHeight * RowCount + 5;
randomize;
with StringGrid1 do beginfor y := 0 to RowCount - 1 dofor x := 0 to ColCount - 1 do begin
s := '';
for w := 0 to random(20) do
s := s + chr(ord('a') + random(26));
Cells[x,y] := s;
end;
Canvas.Font := Font;
for x := 0 to ColCount - 1 do begin
MaxWidth := 0;
for y := 0 to RowCount - 1 do begin
w := Canvas.TextWidth(Cells[x,y]);
if w > MaxWidth then MaxWidth := w;
end;
ColWidths[x] := MaxWidth + 5;
end;
end;
end;
2. Если Вам нужно, чтобы пользователь выбрал каталог, удобно воспользоваться стандартным диалогом Windows. Для этого нужно испоьзуют функциею SHGetSpecialFolderLocation. Второй параметр определяет, какие каталоги сможет выбрать пользователь. Вот возможные значения этого параметра: CSIDL_BITBUCKET, CSIDL_CONTROLS, CSIDL_DESKTOP, CSIDL_DESKTOPDIRECTORY, CSIDL_DRIVES, CSIDL_FONTS, CSIDL_NETHOOD, CSIDL_NETWORK, CSIDL_PERSONAL, CSIDL_PRINTERS, CSIDL_PROGRAMS, CSIDL_RECENT, CSIDL_SENDTO, CSIDL_STARTMENU, CSIDL_STARTUP, CSIDL_TEMPLATES.
Название выбранного каталога можно получить при помощи функции SHGetPathFromIDList.