| 
| 
 | Вопрос # 5 865/ вопрос решён / | 
 |  Здравствуйте, уважаемые эксперты!Такой вопрос, на форме картинка, под ней находится label с текстом, если ввести текст в edit1 то  label1.caption:=edit1.text; все работает отлично, но вот только как сделать оцентровку текста под картинкой? и если выходит за поля картинки перенести текст на новую строку + выровнять. Пробывал left менять не помогает
 
|  |   Вопрос задал: 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 (статус: Посетитель), 8 января 2012, 00:18 [#1]:meson: хорошо, с этим разобрался)) а подскажите наприемер если у меня max символов в label1 = 12, как сделать чтобы если max>12 то перенести на новую строку в label. |  
|   | meson (статус: 1-ый класс), 8 января 2012, 01:10 [#2]:To victor_as! 
 Боюсь, на этот раз Ваш вопрос сформулирован не вполне корректно
 или на меня плохо действуют праздники
   
 Не понятно какое свойство Вы имеете в виду?
 Или max это не свойство класса TLable?
 |  
|   | 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; |  
|   | casio (статус: Посетитель), 8 января 2012, 17:29 [#5]:meson: что то не работает(( |  
|   | meson (статус: 1-ый класс), 8 января 2012, 17:48 [#6]:victor_as: Не знаю чем могу Вам помочь
   Вы не написали что именно не работает.
 |  
|   | casio (статус: Посетитель), 8 января 2012, 18:00 [#7]:meson: сори, не переносится символы  на новую строку, после 12го символа! при чем отмечен в wordwrap:=true; |  
|   | meson (статус: 1-ый класс), 8 января 2012, 18:46 [#8]:victor_as: Проверьте установлено ли свойство AutoSize в состояние true
 |  
|   | casio (статус: Посетитель), 8 января 2012, 18:58 [#9]:victor_as: спасибо переносит, но вот теперь не работает выравнивание, а вот если AutoSize:=false оставить то тогда я думаю работать будет,только вот как это сделать?увеличивать label.height? |  
|   | 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 (статус: Посетитель), 8 января 2012, 19:16 [#11]: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 (статус: Посетитель), 8 января 2012, 19:27 [#13]: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 (статус: Посетитель), 8 января 2012, 19:34 [#15]:meson: нужно выравнивание текста так как в примере создания папки |  
|   | meson (статус: 1-ый класс), 8 января 2012, 19:45 [#16]:victor_as: 
 Я не знаю о чем идет речь...
 И вообще наша "переписка"
 перестает носить продуктивный характер ...
 
 Успехов Вам
   |  8 января 2012, 23:28: Вопрос перемещён из тематического раздела Delphi » Общие вопросы по программированию в раздел Delphi » Работа с компонентами и библиотеками модератором Ерёмин А.А. 
|   | 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) Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |