Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2011.11.13;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.011 c
2-1311177238
alexdn
2011-07-20 19:53
2011.11.13
Функция определения цвета пикселя


1-1272350903
Юрий Зотов
2010-04-27 10:48
2011.11.13
Ошибка создания формы в design-time


2-1311686055
alexx777
2011-07-26 17:14
2011.11.13
devexp & ribbon & skin


1-1272500252
SPeller
2010-04-29 04:17
2011.11.13
Можно ли проверить указатель на корректность?


3-1266236064
Раиса
2010-02-15 15:14
2011.11.13
MySQL и несколько insert-ов