Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Компоненты Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.02.2011, 16:55   #11
SERG1980
Участник клуба
 
Аватар для SERG1980
 
Регистрация: 28.03.2007
Сообщений: 1,814
По умолчанию

Извиняюсь. Тогда через канву как вам сказали выше
SERG1980 вне форума Ответить с цитированием
Старый 01.02.2011, 22:42   #12
xexxex
Пользователь
 
Регистрация: 31.07.2010
Сообщений: 52
По умолчанию

Может както подумать в таком направлении:
var
RL, R: TRect;
begin
Label1.AutoSize := False;
Label1.WordWrap := False;
Label1.Width := 10;
Label1.Height := 20;
RL := Label1.ClientRect;
R := RL;
with Label1 do
repeat
Font.Size := FontSize-1;
DrawText(Canvas.hadnle, Caption, Len, R, Flags or DT_CALCRECT)
until ((R.Right-R.Left) <= (RL.Right-RL.Left)) and
((R.Bottom-R.Top) <= (RL.Bottom-R.Top));
end;
написано на коленке ес-но
xexxex вне форума Ответить с цитированием
Старый 02.02.2011, 05:01   #13
ArtGrek
DelphiProger
Участник клуба
 
Аватар для ArtGrek
 
Регистрация: 14.11.2010
Сообщений: 1,023
По умолчанию

самому ето нужно
вот что я нашел в модуле Graphics

Код:
function TFont.GetSize: Integer;
begin
  Result := -MulDiv(Height, 72, FPixelsPerInch);
end;

procedure TFont.SetSize(Value: Integer);
begin
  Height := -MulDiv(Value, FPixelsPerInch, 72);
end;
если не ошибаюсь, ето получение и установка размера Label
FPixelsPerInch - Количество пикселей на дюйм

думаю из етого можно рассчитать Label.Font.Size зная Label.Hight
правда как еше не разобрался, может кто нибуд съумеет...
VirusN13

Последний раз редактировалось ArtGrek; 02.02.2011 в 05:04.
ArtGrek вне форума Ответить с цитированием
Старый 02.02.2011, 16:23   #14
ArtGrek
DelphiProger
Участник клуба
 
Аватар для ArtGrek
 
Регистрация: 14.11.2010
Сообщений: 1,023
По умолчанию

вот мои метод растягивания Label (под Label я ставлю Image, что б наводя мышкои на торчашие края Image делат Resize)
Код:
// определение с какои из 4 сторон мы делаем Resize
procedure TForm2.Image2MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  PresF:= True;
  x2 := x;
  y2 := y;
  if x < 6 then
  begin
    PresF1 := True;
  end;
  if x > Image2.Width - 6 then
  begin
    PresF2 := True;
  end;
  if y < 6 then
  begin
    PresF3 := True;
  end;
  if y > Image2.Height - 6 then
  begin
    PresF4 := True;
  end;
end;

procedure TForm2.Image2MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  if PresF then
  begin
    if PresF1 then
    begin
      TLabel(TekstS).Left := TLabel(TekstS).Left - (x2 - x);
      TLabel(TekstS).Width := TLabel(TekstS).Width + (x2 - x);
      TLabel(TekstS).Font.Size := -MulDiv(TLabel(TekstS).Width, 72, PixelsPerInch);
      Frame(TekstS);
    end;
    if PresF2 then
    begin
      TLabel(TekstS).Width := TLabel(TekstS).Width - (x2 - x);
      x2 := x;
      TLabel(TekstS).Font.Size := -MulDiv(TLabel(TekstS).Width, 72, PixelsPerInch);
      Frame(TekstS);
    end;
    if PresF3 then
    begin
      TLabel(TekstS).Top := TLabel(TekstS).Top - (y2 - y);
      TLabel(TekstS).Height := TLabel(TekstS).Height + (y2 - y);
      TLabel(TekstS).Font.Size := -MulDiv(TLabel(TekstS).Height, 72, PixelsPerInch);
      Frame(TekstS);
    end;
    if PresF4 then
    begin
      TLabel(TekstS).Height := TLabel(TekstS).Height - (y2 - y);
      y2 := y;
      TLabel(TekstS).Font.Size := -MulDiv(TLabel(TekstS).Height, 72, PixelsPerInch);
      Frame(TekstS);
    end;
  end;
end;

procedure TForm2.Image2MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  PresF1 := False;
  PresF2 := False;
  PresF3 := False;
  PresF4 := False;
  PresF := False;
end;
при изменении высоты все хорошо, но вот если начнеш изменят ширину, все куда то улетает, думаю делло во втором параметре '72',
VirusN13
ArtGrek вне форума Ответить с цитированием
Старый 03.02.2011, 05:08   #15
xexxex
Пользователь
 
Регистрация: 31.07.2010
Сообщений: 52
По умолчанию

Рабочая функция.
Устанавливаем текст и размеры лебела и вызываем функцию
Код:
function CalkLabelFont(Lb: TLabel): Boolean;
const Flags = DT_LEFT	or DT_NOCLIP or DT_WORDBREAK or DT_CALCRECT;
var R: TRect;
begin
  Result := False;
  Lb.Canvas.Font := Lb.Font;
  while True do begin
    R := Lb.ClientRect;
    with Lb do
      DrawText(Canvas.Handle, PChar(Caption), Length(Caption), R, Flags);
    if IsRectEmpty(R) then Exit;
    with Lb.ClientRect do
      if ((R.Right-R.Left) <= (Right-Left)) and ((R.Bottom-R.Top) <= (Bottom-Top)) then Break;
    Lb.Canvas.Font.Height := Lb.Canvas.Font.Height +1;
//    Lb.Canvas.Font.Size := Lb.Canvas.Font.Size -1;
  end;
  Result := True;
  Lb.Font := Lb.Canvas.Font;
end;
правда в какойто критический момент зависает цикл. надо сделать проверку.

Последний раз редактировалось xexxex; 03.02.2011 в 05:20.
xexxex вне форума Ответить с цитированием
Старый 04.02.2011, 00:46   #16
ArtGrek
DelphiProger
Участник клуба
 
Аватар для ArtGrek
 
Регистрация: 14.11.2010
Сообщений: 1,023
По умолчанию

пост 14 поправка
исползуеца высота текста, а не Label
TLabel(TekstS).Font.Size := -MulDiv(TLabel(TekstS).Font.Height, 72, PixelsPerInch);
VirusN13
ArtGrek вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Автоматическое изменение значения в ячейке TStalin Microsoft Office Excel 7 07.09.2010 18:19
Автоматическое изменение высоты строки Solex Microsoft Office Excel 3 11.02.2010 18:37
автоматическое изменение значения intelx1989 Microsoft Office Access 1 12.01.2010 21:19
Автоматическое изменение переменной в типе TwiX Общие вопросы Delphi 3 19.11.2009 03:27
автоматическое изменение падежа слова B00lean Microsoft Office Word 5 20.03.2009 00:43