Форум: "Основная";
Текущий архив: 2003.05.26;
Скачать: [xml.tar.bz2];
ВнизНу Очень простой вопрос !!! (кол-во строк в лейбле ) Найти похожие ветки
← →
Ler (2003-05-12 16:34) [0]Мастера, Помогите!!!
На форме есть компонент Label1 и кнопка:
procedure TForm1.Button1Click(Sender: TObject);
begin
Label1.AutoSize:=false;
Label1.Width :=40;
Label1.Height :=100;
Label1.Caption :="Хочу знать количество строк!!!";
Label1.WordWrap:=true;
end;
Как получить это самое кол-во строк в лейбле после Label1.WordWrap:=true;?
← →
Ler (2003-05-12 16:56) [1]АУ !!!
← →
kull (2003-05-12 17:04) [2]А если взять ClientHeight и высоту фонта и поделить?
А можно еще через функцию DrawText (Win API) ...
← →
Ler (2003-05-12 17:05) [3]АУ !!!
АУ !!!
АУ !!!
← →
deedlit (2003-05-12 17:09) [4]Хм... а как ты их туда заносишь, если не секрет? ;)
Если так:Label1.Caption:="Borland"+chr(10)+chr(13)+"Delphi"
, где chr(10)+chr(13) - символ перевода каретки, то проблему можно решить банальным циклом. Нечто вродеWhile pos(chr(13), Label1.Caption)<>0 do Inc(Counter, 1)
, где Counter - счетчик числа строк. После завершения цикла нужно добавить к счетчику единицу, чтобы учлась последняя строка.
← →
Zz_ (2003-05-12 17:10) [5]Гы
var m:TMemo;
begin
m := TMemo.Create(Self);
m.Parent := Self;
m.Font := Label1.Font;
m.WordWrap := True;
m.ClientWidth := label1.Width;
m.Lines.Clear;
m.lines.Add(Label1.Caption);
MessageBox(0,PChar(IntToStr(m.Lines.Count)),"",0);
m.free;
← →
Ler (2003-05-12 17:11) [6]2 deedlit
Чего-то я совсем Тебя не понял...
← →
UserMicc (2003-05-12 17:16) [7]2 Ler (12.05.03 17:11)
Он говорит, что в цикле вставляй новые строчки с переводок коретки.. Потом же считай число "кореток" чтобы узнать число строк...
← →
Ler (2003-05-12 17:22) [8]Не ребят, не пойдет. Дело в том, что я пишу свой компонент у которого Label только составная часть. Т.е. выглядит это примерно так: на панели лежит лейбл и в зависимости от высоты лейбла строится высота панельки (ну что-то типа AutoHeight для панели). Высота лейбла определяется количеством строк.
Извините за некоторый сумбур в объяснении.
← →
deedlit (2003-05-12 17:29) [9]Или, ты имеешь в виду - узнать, сколько строк поместитеся на Label1 при текущих размерах? Попробуй
Label1.Height div Label1.Canvas.TextHeight("ЛЮБОЙ ТЕКСТ")
, то есть высоту компоненты нацело поделить на высоту строчки текста (ее тебе вернет TextHeight), отрисованного на его канве.
← →
Ler (2003-05-13 10:02) [10]Ну так есть еще варианты ???
Напрягайте мозги, ПРОФИ !!!
← →
dtrn (2003-05-13 10:43) [11]Length(Label1.Caption)
← →
Ler (2003-05-13 13:22) [12]2 dtrn
???
← →
default (2003-05-13 14:33) [13]ты вопрос нормально поставь
а то никто тебя не понимает...
← →
Юрий Федоров (2003-05-13 14:57) [14]kull © (12.05.03 17:04)
А если взять ClientHeight и высоту фонта и поделить?
← →
Sandman25 (2003-05-13 15:59) [15]Либо как написал Zz_ (12.05.03 17:10)
Либо посмотри исходник TCustomLabel в StdCtrls, ознакомься DrawText из WinAPI, и напиши наследника от CustomLabel, который будет пересчитывать значение, возвращаемое DrawText, в количество строк и записывать его в новом property.
← →
mukha (2003-05-13 22:03) [16]В run-time создай текстовое поле с такими же размерами как и сама метка и загрузи в него текст из memo с таким же шрифтом. Кол-во строк в memo определяется без труда, что будет соотв. к-ву строк в метке.
← →
DK (2003-05-14 03:30) [17]Если Ты используешь стандартный лейбл, то можно просто установить AutoSize и после установки Caption, высота установится автоматически. Останется только прочитать это значение и установить высоту панельки
← →
R (2003-05-14 04:24) [18]procedure TForm1.Button1Click(Sender: TObject);
var
S,S1:String;
I:Integer;
begin
S:= Memo1.text;
For I:=1 To Length(Memo1.text) do
If S[I]="-" Then S1:= S1+S[I]+#10#13 Else S1:= S1+S[I];
Label1.Caption:=S1;
Panel1.Height:= Label1.Height;//Вот нужный код остальное тест
Text:=IntToStr(Label1.Height);
end;
← →
LexusR (2003-05-14 07:52) [19]
function TForm1.GetCountLines(MyLabel: TLabel): integer;
var
Memo : TMemo;
begin
with TMemo.Create(Self) do
begin
ParentWindow := Application.MainForm.Handle;
Visible := false;
Width := MyLabel.Width;
Height := MyLabel.Height;
BorderStyle := bsNone;
WordWrap := true;
Text := MyLabel.Caption;
Result := Lines.count;
Free;
end;
end;
← →
Ler (2003-05-14 10:40) [20]Спасибо Всем !!!
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.05.26;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.011 c