Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2011.11.13;
Скачать: [xml.tar.bz2];

Вниз

WordWrap в TMemo c фиксированным количеством строк   Найти похожие ветки 

 
alexvan ©   (2010-04-30 10:04) [0]

Вот код, но дело в том что он корректно работает только в случае если WordWrap=false, в случае true как только происходит WordWrap в последней строке, вылетает EOverFlow.
Подскажите варианты как с этим бороться.

procedure TForm1.Memo1Change(Sender: TObject);
const
  MaxLineCount = 3;
begin
  if Memo1.Lines.Count > MaxLineCount then
    Memo1.Perform(EM_UNDO, 0, 0);
  Memo1.Perform(EM_EMPTYUNDOBUFFER, 0, 0);
end;

Спасибо


 
alexvan ©   (2010-04-30 12:40) [1]

Нашёл другое решение только здесь ещё один косяк

procedure TFMain.Memo1KeyPress(Sender: TObject; var Key: Char);
var
 l, w: Integer;
 b: TBitmap;
begin
 b:=TBitmap.Create;
 try
   l:=Memo1.Perform(EM_LINEFROMCHAR, -1, 0);
   b.Canvas.Font:=Memo1.Font;
   w:=b.Canvas.TextWidth(Memo1.Lines[l]);
   if ((w>=Memo1.ClientWidth) AND (l>=1)) then
   begin
     case Key of
       " "..#255, #13: key:=#0;
     end;
   end;
 finally
   b.Free;
 end;
end;

Странно как то с ClientWidth строка Сanvas.TextWidth(Memo1.Lines[l] при переносе получается значительно больше чем видимая часть Memo - что это баг или както фиксится?


 
{RASkov} ©   (2010-04-30 12:44) [2]

procedure TForm1.Memo1KeyPress(Sender: TObject; var Key: Char);
begin
 if (Key=#13) and (Memo1.Lines.Count>=3) then Key:=#0;
end;


 
{RASkov} ©   (2010-04-30 12:46) [3]

Хотя нет... от вордврап не спасет...


 
{RASkov} ©   (2010-04-30 12:54) [4]

еще один дурацкий вариант:
procedure TForm1.Memo1Change(Sender: TObject);
begin
 if Memo1.Lines.Count>2 then Memo1.Lines.Delete(3);
end;

А какая конкретно задача? Может есть другие решения....


 
alexvan ©   (2010-04-30 12:57) [5]

Задача n-строк и не больше и WordWrap true


 
Leonid Troyanovsky ©   (2010-04-30 12:58) [6]


> {RASkov} ©   (30.04.10 12:54) [4]

> еще один дурацкий вариант:

Дурацких вариантов еще больше.

> А какая конкретно задача? Может есть другие решения....

Вот.
Пусть объяснится, чем ему 3 edit или 1 stringgrid не угодил.

--
Regards, LVT.


 
alexvan ©   (2010-04-30 13:08) [7]

А если 10 строк то 10 Edit? А вообще на телегу вместо колеса можно лыжу приделать.


 
Leonid Troyanovsky ©   (2010-04-30 13:16) [8]


> alexvan ©   (30.04.10 13:08) [7]

> А если 10 строк то 10 Edit

Хоть 100. T*Grid, T*View.

--
Regards, LVT.


 
alexvan ©   (2010-04-30 13:28) [9]

Вообще постановка вопроса в 2-х первых постах. Это вообще-то работает - только в 1 случае WordWrap не идёт а во втором случае всё ок кроме странностей с шириной строки и ClientWidth. Я пытаюсь разобраться в данном вопросе а не в практикуме использования различных компонентов при наталкивании на первый же подводный камень.


 
{RASkov} ©   (2010-04-30 13:34) [10]

> [9] alexvan ©   (30.04.10 13:28)

Тогда создавай свой TMyMemo, а тык ты действительно лыжу приделываешь...


 
Демо ©   (2010-04-30 13:35) [11]


>{RASkov} ©   (30.04.10 12:54) [4]
> еще один дурацкий вариант:

Тогда уж так:

procedure TForm1.Memo1Change(Sender: TObject);
begin
 while Memo1.Lines.Count>MaxCount then Memo1.Lines.Delete(Memo1.Lines.Count-1);
end;


 
Leonid Troyanovsky ©   (2010-04-30 13:40) [12]


> alexvan ©   (30.04.10 13:28) [9]

>  Я пытаюсь разобраться в данном вопросе

Попытайся сначала разобраться, для каких целей
используются те или иные контролы.

--
Regards, LVT.


 
alexvan ©   (2010-04-30 14:05) [13]


> Попытайся сначала разобраться, для каких целей
> используются те или иные контролы.


Что я  пытаюсь или не пытаюсь - судить об этом мне. Выбор конечного и оптимального решения и наиболее правильного с моей точки зрения - тоже дело моё, другой вопрос что это может в действительности оказаться заблуждением, но это уже мои трудности. В данном случае TMemo  именно то что надо. А то что над Вами висит MASTER DELPHI совсем не означает, что все должны беспрекословно следовать вашему мнению и рекомендациям.

With Regards!!!


 
Leonid Troyanovsky ©   (2010-04-30 14:37) [14]


> alexvan ©   (30.04.10 14:05) [13]

> уже мои трудности. В данном случае TMemo  именно то что
> надо.

Флаг в руки и барабан на шею.

--
Regards, LVT.


 
alexvan ©   (2010-04-30 14:42) [15]

тема закрыта - задача решена! Вариант №2 рулит.



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2011.11.13;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.005 c
2-1311063552
Ш-К
2011-07-19 12:19
2011.11.13
Толстые и тонкие клиенты


2-1311177238
alexdn
2011-07-20 19:53
2011.11.13
Функция определения цвета пикселя


15-1311009842
istok
2011-07-18 21:24
2011.11.13
что может приводить к проблемам с клавой..?


2-1311508935
prodex
2011-07-24 16:02
2011.11.13
Как построить запрос в Oracle, если...


15-1310648771
SQLEXPRESS
2011-07-14 17:06
2011.11.13
Вот такой прикол нашел.. MSSQL





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский