Отправляет email-рассылки с помощью сервиса Sendsay

Советы по Delphi

  Все выпуски  

Советы по Delphi


Служба Рассылок Subscribe.Ru проекта Citycat.Ru

Здравствуйте, уважаемые подписчики! Извините за большую паузу. Вот темы этого выпуска:
1. Автоматическое изменение ширины ячеек в StringGrid.
2. Вызов диалога "Выбор папки".

1. Поскольку в компоненте StringGrid по умолчанию все столбцы имеют одинаковую ширину - в некоторых ячейках текст обрезается. Чтобы этого избежать, после заполнения StringGrid нужно для каждого столбца находить текст максимальной длины и в соответствии с его длиной устанавливать ширину всего столбца.

Здесь StringGrid заполняется случайными строками при создании формы.

procedure TForm1.FormCreate(Sender: TObject);
var
  x, y, w: integer;
  s: string;
  MaxWidth: integer;
begin
  with StringGrid1 do
    ClientHeight := DefaultRowHeight * RowCount + 5;
  randomize;
  with StringGrid1 do begin
    for y := 0 to RowCount - 1 do
      for 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.

uses ShlObj;

procedure CallBack(wnd: hWnd; uMsg: UINT; lParam, lpData: LParam) stdcall;
begin
  SendMessage(wnd, BFFM_ENABLEOK, 0, 1);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  bi: TBrowseInfo;
  s: PChar;
  PIDL, ResPIDL: PItemIDList;
begin
  SHGetSpecialFolderLocation(Form1.Handle, CSIDL_DESKTOP, PIDL);
  s := StrAlloc(128);
  bi.hwndOwner := Form1.Handle;
  bi.pszDisplayName := s;
  bi.lpszTitle := 'Выбор прапки';
  bi.pidlRoot := PIDL;
  bi.lpfn := addr(CallBack);
  ResPidl := SHBrowseForFolder(BI);
  SHGetPathFromIDList(ResPidl, s);
  Form1.Caption := s;
end;


Все советы и замечания, пожалуйста, присылайте на delphi4all@narod.ru

Всего доброго,
Даниил Карапетян.






http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу
Рейтингуется SpyLog

В избранное