Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 5 865

/ вопрос решён /

Здравствуйте, уважаемые эксперты!
Такой вопрос, на форме картинка, под ней находится label с текстом, если ввести текст в edit1 то label1.caption:=edit1.text; все работает отлично, но вот только как сделать оцентровку текста под картинкой? и если выходит за поля картинки перенести текст на новую строку + выровнять. Пробывал left менять не помогает

casio Вопрос решён, но можно продолжить его обсуждение в мини-форуме

Вопрос задал: casio (статус: Посетитель)
Вопрос отправлен: 7 января 2012, 15:14
Состояние вопроса: решён, ответов: 1.

Ответ #1. Отвечает эксперт: meson

Здравствуйте, victor_as!

Свойство Left Вам и не могло помочь.
Оно означает расстояние компонента от левой границы родителя, т.е. просто положение на экране.

Вам следует поэкспериментировать со свойствами:
WordWrap - перенос текста по словам
Alignment - положение текста в строке (taCenter - означает по центру)
Height - высота компонента
Width - ширина компонента
AutoSize - автоматический выбор размеров

Ответ отправил: meson (статус: 1-ый класс)
Время отправки: 7 января 2012, 23:11
Оценка за ответ: 5


Мини-форум вопроса

Всего сообщений: 17; последнее сообщение — 8 января 2012, 23:38; участников в обсуждении: 2.
casio

casio (статус: Посетитель), 8 января 2012, 00:18 [#1]:

meson: хорошо, с этим разобрался)) а подскажите наприемер если у меня max символов в label1 = 12, как сделать чтобы если max>12 то перенести на новую строку в label.
meson

meson (статус: 1-ый класс), 8 января 2012, 01:10 [#2]:

To victor_as!

Боюсь, на этот раз Ваш вопрос сформулирован не вполне корректно
или на меня плохо действуют праздники ;-)

Не понятно какое свойство Вы имеете в виду?
Или max это не свойство класса TLable?
casio

casio (статус: Посетитель), 8 января 2012, 01:54 [#3]:

meson:
var i:integer;
max : integer = 12;
begin
 
procedure button1click(self);
begin
i:=lenght(edit1.text;);
 
if i<=max then Label1.Caption := edit1.text;
if i>max then //здесь должны добавится 12 символов,а остальные перенисти на новую строку
end;
 
end;
meson

meson (статус: 1-ый класс), 8 января 2012, 13:33 [#4]:

victor_as:
Теперь понятно что Вы имели в виду :-)

Наверное Вам подойдет вот такое решение

procedure TTestForm.Button1Click(Sender: TObject);
var
  iIdx, iLength: integer;
  sSubStr,
  sNextLine: string;
const
  MAX = 12;
  NEXT_LINE = #13#10;
begin
  Label1.Caption := '';
  sNextLine := '';
  for iIdx := 1 to Length(Edit1.Text) do
  begin
    sSubStr := sSubStr + Copy(Edit1.Text, iIdx, 1);
    if Length(sSubStr) >= MAX then
    begin
      Label1.Caption := Label1.Caption + sNextLine + sSubStr;
      sNextLine := NEXT_LINE;
      sSubStr := '';
    end;
  end;
  Label1.Caption := Label1.Caption + sNextLine + sSubStr;
end;


Если потребуется добавлю коментарии :-)
casio

casio (статус: Посетитель), 8 января 2012, 17:29 [#5]:

meson: что то не работает((
meson

meson (статус: 1-ый класс), 8 января 2012, 17:48 [#6]:

victor_as:
Не знаю чем могу Вам помочь 8-)
Вы не написали что именно не работает.
casio

casio (статус: Посетитель), 8 января 2012, 18:00 [#7]:

meson: сори, не переносится символы на новую строку, после 12го символа! при чем отмечен в wordwrap:=true;
meson

meson (статус: 1-ый класс), 8 января 2012, 18:46 [#8]:

victor_as:
Проверьте установлено ли свойство AutoSize в состояние true
casio

casio (статус: Посетитель), 8 января 2012, 18:58 [#9]:

victor_as: спасибо переносит, но вот теперь не работает выравнивание, а вот если AutoSize:=false оставить то тогда я думаю работать будет,только вот как это сделать?увеличивать label.height?
casio

casio (статус: Посетитель), 8 января 2012, 19:06 [#10]:

meson: все спасибо я разобрался, поставил условие
if max>12 then
Label1.Autosize := True;
 Label1.Caption := '';
  sNextLine := '';
  for iIdx := 1 to Length(Edit1.Text) do
  begin
    sSubStr := sSubStr + Copy(Edit1.Text, iIdx, 1);
    if Length(sSubStr) >= MAX then
    begin
      Label1.Caption := Label1.Caption + sNextLine + sSubStr;
      sNextLine := NEXT_LINE;
      sSubStr := '';
    end;
  end;
  Label1.Caption := Label1.Caption + sNextLine + sSubStr;

8 января 2012, 19:07: Статус вопроса изменён на решённый (изменил автор вопроса — casio)

8 января 2012, 19:15: Вопрос вновь открыт (изменение состояния произвёл автор вопроса — casio)

casio

casio (статус: Посетитель), 8 января 2012, 19:16 [#11]:

meson: не учел вот что,если не тяжело подскажите когда ставлю пробел то строка разрывается, а как не учитывать пробел?
meson

meson (статус: 1-ый класс), 8 января 2012, 19:18 [#12]:

victor_as:

Рад что Вы довольны результатом.
Но, честно говоря, мне не понятно что дает Ваше сравнение.
MAX - это константа. В моем примере она равна 12.
В Вашем случае присвоение Label1.Autosize := True
ни когда не производится.

Попробуйте убрать фрагмент
if max>12 then
Label1.Autosize := True;
и убедитесь что он попросту не влияет на работу.

Более того, устанавливать AutoSize в состояние true
лучше всего прямо в свойствах компонента на форме.

И второе. По прежнему не понятно что Вы имеете в виду,
когда пишете "но вот теперь не работает выравнивание".
casio

casio (статус: Посетитель), 8 января 2012, 19:27 [#13]:

meson: я имею ввиду на форме есть картинка, ай вот лучшее объяснение - создание папки на рабочем столе! вот мне на подобие такого нужно сделать, что бы текст выравнивался относительно папки (картинки)
meson

meson (статус: 1-ый класс), 8 января 2012, 19:28 [#14]:

victor_as:

Если Вы не хотите чтобы учитывались пробелы
проверьте какой символ обрабатывается.

Для этого строку

sSubStr := sSubStr + Copy(Edit1.Text, iIdx, 1);

замените на

if Copy(Edit1.Text, iIdx, 1) <> ' ' then
sSubStr := sSubStr + Copy(Edit1.Text, iIdx, 1);
casio

casio (статус: Посетитель), 8 января 2012, 19:34 [#15]:

meson: нужно выравнивание текста так как в примере создания папки
meson

meson (статус: 1-ый класс), 8 января 2012, 19:45 [#16]:

victor_as:

Я не знаю о чем идет речь...
И вообще наша "переписка"
перестает носить продуктивный характер ...

Успехов Вам :-)

8 января 2012, 23:28: Вопрос перемещён из тематического раздела Delphi » Общие вопросы по программированию в раздел Delphi » Работа с компонентами и библиотеками модератором Ерёмин А.А.

casio

casio (статус: Посетитель), 8 января 2012, 23:38 [#17]:

meson: все я решил задачу вот таким способом
Label1.Caption := '';
       sNextLine := '';
 
        for i := 1 to Length(Edit1.Text) do
          begin
            sSubStr := sSubStr + Copy(Edit1.Text, i, 1);
             if Length(sSubStr) >= MAX then
              begin
                Label1.Caption := LabelPapka.Caption + sNextLine + sSubStr;
                sNextLine := NEXT_LINE;
                sSubStr := '';
             end;
          end;
 
            Label1.Caption := Label1.Caption + sNextLine + sSubStr;
            Label1.Width := Img1.Width * 2;
            Label1.Left := Img1.Left - ((Label1.Width - Img1.Width) div 2);

8 января 2012, 23:40: Статус вопроса изменён на решённый (изменил автор вопроса — casio)

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:33
Выполнено за 0.04 сек.