![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
WordWrap в TMemo c фиксированным количеством строк [D6, D7, WinXP]
alexvan © (2010-04-30 10:04:00)Вот код, но дело в том что он корректно работает только в случае если 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 14:42:00) [1]тема закрыта - задача решена! Вариант №2 рулит.
Leonid Troyanovsky (2010-04-30 14:37:00) [2]
> alexvan © (30.04.10 14:05) [13]
> уже мои трудности. В данном случае TMemo именно то что
> надо.
Флаг в руки и барабан на шею.
--
Regards, LVT.
alexvan (2010-04-30 14:05:00) [3]
> Попытайся сначала разобраться, для каких целей
> используются те или иные контролы.
Что я пытаюсь или не пытаюсь - судить об этом мне. Выбор конечного и оптимального решения и наиболее правильного с моей точки зрения - тоже дело моё, другой вопрос что это может в действительности оказаться заблуждением, но это уже мои трудности. В данном случае TMemo именно то что надо. А то что над Вами висит MASTER DELPHI совсем не означает, что все должны беспрекословно следовать вашему мнению и рекомендациям.
With Regards!!!
Leonid Troyanovsky (2010-04-30 13:40:00) [4]
> alexvan © (30.04.10 13:28) [9]
> Я пытаюсь разобраться в данном вопросе
Попытайся сначала разобраться, для каких целей
используются те или иные контролы.
--
Regards, LVT.
Демо (2010-04-30 13:35:00) [5]
>{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;
{RASkov} (2010-04-30 13:34:00) [6]> [9] alexvan © (30.04.10 13:28)
Тогда создавай свой TMyMemo, а тык ты действительно лыжу приделываешь...
alexvan (2010-04-30 13:28:00) [7]Вообще постановка вопроса в 2-х первых постах. Это вообще-то работает - только в 1 случае WordWrap не идёт а во втором случае всё ок кроме странностей с шириной строки и ClientWidth. Я пытаюсь разобраться в данном вопросе а не в практикуме использования различных компонентов при наталкивании на первый же подводный камень.
Leonid Troyanovsky (2010-04-30 13:16:00) [8]
> alexvan © (30.04.10 13:08) [7]
> А если 10 строк то 10 Edit
Хоть 100. T*Grid, T*View.
--
Regards, LVT.
alexvan (2010-04-30 13:08:00) [9]А если 10 строк то 10 Edit? А вообще на телегу вместо колеса можно лыжу приделать.
Leonid Troyanovsky (2010-04-30 12:58:00) [10]
> {RASkov} © (30.04.10 12:54) [4]
> еще один дурацкий вариант:
Дурацких вариантов еще больше.
> А какая конкретно задача? Может есть другие решения....
Вот.
Пусть объяснится, чем ему 3 edit или 1 stringgrid не угодил.
--
Regards, LVT.
alexvan (2010-04-30 12:57:00) [11]Задача n-строк и не больше и WordWrap true
{RASkov} (2010-04-30 12:54:00) [12]еще один дурацкий вариант:
procedure TForm1.Memo1Change(Sender: TObject);
begin
if Memo1.Lines.Count>2 then Memo1.Lines.Delete(3);
end;
А какая конкретно задача? Может есть другие решения....
{RASkov} (2010-04-30 12:46:00) [13]Хотя нет... от вордврап не спасет...
{RASkov} (2010-04-30 12:44:00) [14]
procedure TForm1.Memo1KeyPress(Sender: TObject; var Key: Char);
begin
if (Key=#13) and (Memo1.Lines.Count>=3) then Key:=#0;
end;
alexvan (2010-04-30 12:40:00) [15]Нашёл другое решение только здесь ещё один косяк
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 - что это баг или както фиксится?