Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как разрешить изменять текст в StringGrid и как получить Reсt


Kolan ©   (2005-07-04 14:32:00) 

Здравствуйте,
 Сразу два вопроса:
   1: Как разрегшить пользователям менять содержимое ячеек. Не нашел...
   2: Я хотел бы подогнать надписи в я чейках под их ширину. Для этого у меня есть функция котороя подгоняет текст под определенный Rect.

function TMainForm.AdjustStringToRect(DC: HDC; S: string;
 Rect: TRect): string;
var
 P: PChar;
begin
 P := AllocMem(Length(S) + 1);
 StrCopy(P, PChar(S));
 Rect.BottomRight.X := Rect.BottomRight.X - 2;
 DrawText(DC, P, Length(s), Rect,
   DT_SINGLELINE or DT_CALCRECT or DT_LEFT or
   DT_MODIFYSTRING or DT_PATH_ELLIPSIS);
 Result := P;
 FreeMem(P);
end;


Как мне получить Rect каждой ячейки.


Думкин   (2005-07-05 08:59:00) [1]

> [11] Kolan ©   (04.07.05 15:09)

Я это понимаю. Просто речь была о TStringGrid - там решается все у меня иначе. И обрезание есть и подгонка высоты и хинты если надо - поэтому в  код и не въехал сходу... лишнего для себязаметил. и всего.


Kolan   (2005-07-04 15:22:00) [2]


> begin...end ©   (04.07.05 15:04) [9]


Намудрил я... :)


Kolan   (2005-07-04 15:09:00) [3]


> Думкин ©   (04.07.05 14:59) [7]


Возми проверь. Кинь Edit. И используй функцию...


begin...end   (2005-07-04 15:04:00) [4]

> Kolan ©   (04.07.05 14:54) [6]

Grid.Options := Grid.Options + [goEditing]

> Думкин ©   (04.07.05 14:59) [7]

DT_MODIFYSTRING ?


Думкин   (2005-07-04 15:04:00) [5]

А...
я это в DrawCell все делал. Ясно.


Думкин   (2005-07-04 14:59:00) [6]


>  [5] begin...end ©   (04.07.05 14:51)
> > И где подгонка текста - в упор не вижу?
>
> DT_CALCRECT ?

И что? Где-то вычисленная высота используется?


Kolan   (2005-07-04 14:59:00) [7]


> Думкин ©   (04.07.05 14:49) [4]


Хорошо. А эта функция обрежет строку вот так:
Some String -> Som...ing. В зависимости от длинны прямоугольника.


> Это правильно.

Читакть как - Это правильно?


Kolan   (2005-07-04 14:54:00) [8]

Как до них добраться?
пробовал так

TFakeGrid=class(TCustomGrid);

var
 I: Integer;
 OptionsSet: TGridOptions;
...
 OptionsSet := TFakeGrid(ReportGrid).Options;
 Include(OptionsSet, goEditing);
 TFakeGrid(ReportGrid).Options := OptionsSet;


Это правильно.


begin...end   (2005-07-04 14:51:00) [9]

> Думкин ©   (04.07.05 14:49) [4]

> А резалт куда?

В строке
> Result := P
копируется не указатель, а тело строки.

> И где подгонка текста - в упор не вижу?

DT_CALCRECT ?


Думкин   (2005-07-04 14:49:00) [10]

> [3] begin...end ©   (04.07.05 14:45)

Да? Ну ладно. А резалт куда? И где подгонка текста - в упор не вижу?

Автору: посмотри для начала статью Паши Голубя про многострочный TStyringGrid.


begin...end   (2005-07-04 14:45:00) [11]

> Думкин ©   (04.07.05 14:43) [2]

Всё нормально. Кроме отсутствия try/finally и использования устаревших функций.


Думкин   (2005-07-04 14:43:00) [12]

> P := AllocMem(Length(S) + 1);
>  StrCopy(P, PChar(S));
....
>  Result := P;
>  FreeMem(P);

?


begin...end   (2005-07-04 14:39:00) [13]

> Kolan ©   (04.07.05 14:32)

> Как разрегшить пользователям менять содержимое ячеек.

TCustomGrid.Options + goEditing.

> Как мне получить Rect каждой ячейки.

TCustomGrid.CellRect.


Наверх

Титульная страница Поиск, карта сайта Написать письмо