проблемы с AutoSize
От: Inna_Z  
Дата: 07.04.06 13:09
Оценка:
Суть проблемы такая.
На панели программно моздаётся календарик

  FDatePicker := TMonthCalendar.Create(MainPanel);
  FDatePicker.Parent := MainPanel;
  FDatePicker.AutoSize := true;


Календарик может иметь разную ширину. По умолчанию компоненту TMonthCalendar задаётся какое-то значение. Но оно не совпадает с тем какая ширина у календаря, и он создаётся с отступами по бокам.
Я хочу сделать так чтоб их небыло. Но при этом сразу хочу знать ширину которую должен установить AutoSize.

Т.е допустим написать так:


  FDatePicker := TMonthCalendar.Create(MainPanel);
  FDatePicker.Parent := MainPanel;
  FDatePicker.AutoSize := true;

  MainPanel.Width := FDatePicker.Width;



Но после прохода строки с AutoSize ширина календарика не изменилась.
А уже только тогда когда я покажу форму на которой это всё создаётся календарик появится с изменёнными размерами. А мне нудно эти размеры изменить зарание. И знать их чтобы в соответствии с ними разместить всё остальное.
Re: проблемы с AutoSize
От: rune Россия  
Дата: 07.04.06 20:52
Оценка:
Здравствуйте, Inna_Z, Вы писали:

I_Z>А уже только тогда когда я покажу форму на которой это всё создаётся календарик появится с изменёнными размерами. А мне нудно эти размеры изменить зарание. И знать их чтобы в соответствии с ними разместить всё остальное.


Если ты знаешь, какое значение будет у календаря, то можно померять его (значения) ширину.

Вот кусочек кода:

type

 THackedWinControl = class(TWinControl)
 public
  property Font;
 end;

function CalcTextLineExtend(aControl: TWinControl; aText: string; aWidth: Integer = 0;
                            aMultiline: Boolean = False): TPoint;
var
 l_Flags: LongWord;
 l_DC: HDC;
 SaveFont: HFont;
 l_Rect: TRect;
begin
 l_DC := GetDC(0);
 try
  SaveFont := SelectObject(l_DC, THackedWinControl(aControl).Font.Handle);
  l_Rect := xiRect0;
  l_Flags := DT_LEFT or DT_CALCRECT;
  if aMultiline then
  begin
   l_Rect.Right := aWidth-1;
   l_Flags := l_Flags or DT_WORDBREAK;
  end;
  DrawText(l_DC, PChar(aText), Length(aText), l_Rect, l_Flags);
  SelectObject(l_DC, SaveFont);
  Result := l_Rect.BottomRight;
 finally
  ReleaseDC(0, l_DC);
 end;
end;
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.