Вниз
Скачать: CL | DM;

Про DeleteLines   Найти похожие ветки 

 
=BuckLr=   (2007-06-10 19:25) [0]

Обнаружил, что DeleteLines не удаляет линию, если она
I1 := Item2Pos( FromLine );
 I2 := Item2Pos( ToLine+1 );
 SStart := SelStart;
 SLength := SelLength;
 SelStart := I1;
 SelLength := I2 - I1;


В этом случае SelStart и SelLength - оба будут равны нулю


 
=BuckLr=   (2007-06-10 19:26) [1]


> если она

последняя :)


 
Vladimir Kladov   (2007-06-10 19:49) [2]

Удаление непустой последней строки:

procedure TForm1.Button16Click(Sender: PObj);
var i: Integer;
begin
 i := Memo1.Count-1;
 if Memo1.Items[ i ] = "" then dec( i );
 if i < 0 then Exit;
 Memo1.DeleteLines( i, i );
end;


проверил, работает.


 
=BuckLr=   (2007-06-10 22:57) [3]

Ну я примерно так и делаю. Просто думал, может имеет смысл чуть подправить исходную процедуру, чтобы удаляла любую строчку :) если вы не против, конечно


 
=BuckLr=   (2007-06-10 23:29) [4]

Не, всё-таки, не так я делаю, у меня удаляет :) А ваш код имеет тот же недостаток - не удаляет именно последнюю линию. Удаляет нормально только если последняя линия является пустой и содержит #13#10. А если  не содержит, то хана :)

Т.е. если нажать контрол+а, удалить ВЕСЬ текст, а затем ввести одну лишь строку, не нажимая интер, то ничего не будет - строка останется на месте. А если на следующей строке даже ничего нет, но на ней стоит каретка (нажали интер), то строка будет удалена. Вот я про что.


 
Vladimir Kladov   (2007-06-11 09:37) [5]

На memo - работает. Ctrl+A - работает только для rich edit, сам. Но и на RichEdit тоже работает, проверил. Даже после ctrl+A и ввода текста без последненго enter.

Может, разница в ОС? У меня XP. С unicode не проверял.


 
=BuckLr=   (2007-06-11 21:17) [6]

Jсь у меня XP тоже, сервиспак 2 плюс куча обновлений самых новых. КОЛ 2,66. От юникода не зависит. Вот, выложил проект, можете посмотреть: http://ifolder.ru/2314526
Первая кнопка у меня не удаляет, вторая - удаляет. Но стоит снести строку в первом мемо, как нажатие на кнопку приведёт к желаемому эффекту. Может быть, у вас будет по-другому, мне тоже интересно. А пока я поступаю тупо - определяю символы возврата каретки в конце текста в мемо, и если их нет и строка последняя - сношу каретку.


 
Vladimir Kladov   (2007-06-11 21:43) [7]

Что я могу сказать. И правда не работает, если программно добавлять. Поздравляю, вы нашли ошибку в MSDN. По поводу EM_LINEINDEX там написано:

Return Value

The return value is the character index of the line specified in the wParam parameter, or it is –1 if the specified line number is greater than the number of lines in the edit control.

Но возвращается 0, а не -1 (которое было бы = $FFFFFFFF как DWORD).
В обновлении исправлю.


 
=BuckLr=   (2007-06-11 23:00) [8]


>  Поздравляю, вы нашли ошибку в MSDN

Не очень радуют такие ошибки в мсдн"не и в самой системе :( Однако...


 
Vladimir Kladov   (2007-06-12 12:19) [9]

О! Я не прав. (Но и не лев). Это не MSDN, это я виноват. Надо было внутрь Item2Pos / Pos2Item смотреть. Там стоит зануление отрицательного результата. Достаточно убрать лишний код, и все в порядке. Только надо dword возвращать, а не Integer, и всех делов.



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

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.016 c
15-1195383515
@!!ex
2007-11-18 13:58
2007.12.16
Бесплатные аналоги FrutyLoops


15-1195110851
Cyrax
2007-11-15 10:14
2007.12.16
Кодировка в pdf-файле...


2-1195843770
Knob
2007-11-23 21:49
2007.12.16
Браузер и соединение с ним


2-1195667957
vegarulez
2007-11-21 20:59
2007.12.16
Вопрос про создание БД Access+Tables в одним действием.


2-1195503680
дима
2007-11-19 23:21
2007.12.16
Поля




   Наверх