|
|
|
Автоматическое включение вертикального ScrollBars в нескольких компонентах TMemo
|
|||
|---|---|---|---|
|
#18+
Привет, парни! На форме имеется несколько компонентов ТМемо ... Необходимо одной процедурой (по событию OnCange ) реализовать для всех ТМемо включение вертикального ScrollBars . ... На просторах Интернета нашел вот такую : Реализация для одного ТМемо Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. В моем случае имеется 4 компонента Memo1 , Memo2 , Memo3 , Memo4 , каждому из которых назначил соответствующее значение свойства Tag ( 1 , 2 , 3 и 4 ). ( В реальности компоненты не имеют цифр в конце имени, и здесь пронумерованы для упрощения! ) Отлавливать компоненту по событию думаю анализируя Tag через CASE : Код: pascal 1. 2. 3. 4. 5. 6. Вопросы: 1. Далее хотел применить " with ... do ", передав в конструкцию имя конкретного компонента... но затрудняюсь - как его сформировать!? 2. По самому вышеприведенному коду - может будут у кого другие, более изящные варианты? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2018, 12:47 |
|
||
|
Автоматическое включение вертикального ScrollBars в нескольких компонентах TMemo
|
|||
|---|---|---|---|
|
#18+
TMemo(Your_Form.FindComponent('Memo' + i.ToString)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2018, 13:00 |
|
||
|
Автоматическое включение вертикального ScrollBars в нескольких компонентах TMemo
|
|||
|---|---|---|---|
|
#18+
Bellic, Код: pascal 1. 2. 3. или так Код: pascal 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2018, 13:16 |
|
||
|
Автоматическое включение вертикального ScrollBars в нескольких компонентах TMemo
|
|||
|---|---|---|---|
|
#18+
Vizit0rTMemo(Your_Form.FindComponent('Memo' + i.ToString)) Спасибо, но я вроде это уже через Tag определил!? ... Осталось сделать что-то похожее на: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Вышеприведенный код - конечно же с ошибками! - Только лишь для понятия сути вопроса!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2018, 13:17 |
|
||
|
Автоматическое включение вертикального ScrollBars в нескольких компонентах TMemo
|
|||
|---|---|---|---|
|
#18+
Купить букварь про Дельфи и читать главу про ООП и приведение типов. http://www.cyberforum.ru/delphi-beginners/thread1005593.html http://parsers.info/2009/12/perechislenie-vsex-komponentov-na-forme/ Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2018, 13:17 |
|
||
|
Автоматическое включение вертикального ScrollBars в нескольких компонентах TMemo
|
|||
|---|---|---|---|
|
#18+
BellicСпасибо, но я вроде это уже через Tag определил!? и довольно глупо это - совершенно ненадёжно. через год забудешь и в каком-нибудь другом тэге всунешь то же значение для других целей - и начнёёёётся ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2018, 13:18 |
|
||
|
Автоматическое включение вертикального ScrollBars в нескольких компонентах TMemo
|
|||
|---|---|---|---|
|
#18+
Ariochи довольно глупо это - совершенно ненадёжно. через год забудешь и в каком-нибудь другом тэге всунешь то же значение для других целей - и начнёёёётся Возможно Вы правы, но на данном этапе - это самое простое решение! Тем более, что с Tag в другом контексте вообще не работаю... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2018, 13:23 |
|
||
|
Автоматическое включение вертикального ScrollBars в нескольких компонентах TMemo
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2018, 13:25 |
|
||
|
Автоматическое включение вертикального ScrollBars в нескольких компонентах TMemo
|
|||
|---|---|---|---|
|
#18+
BellicТолько лишь для понятия сути вопроса!!! суть соверщшенно потерялась 1) имя компонента ( свойсто .Name ) ты можешь меня тькак угодно, прямо в запущеннйо программе можешь взять и поменять. Код: sql 1. 2) имя компонента и имя переменной в published-секции формы с точки зрения языка не связаны никак вообще. Они связаны только с точки зрения библиотеки VCL (или FMX) и c точки зрения среды программирования. Но не с точки зрения самого языка. Завязываться на это - ненадёжно. Также как с тэгами, только если нет лучше вариантов. 3) "(Sender as TComponent).Tag" - вот здесь ты читаешь Tag без всяких там имён и названий. Никаких case, ничего. Так ведь? Чем принципиально отличается установка скроллбаров? Да ничем по большому счёту. И не нужно выдумывать лишнего. Вот так же как тэг читал, так же и настройки прокрутки ставь. Названия свойств и типов конечно другие ,но это детали, а суть та же самая. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2018, 13:26 |
|
||
|
Автоматическое включение вертикального ScrollBars в нескольких компонентах TMemo
|
|||
|---|---|---|---|
|
#18+
Bellicно на данном этапе - это самое простое решение! срать под стол в кухне, прямо во время еды, тоже самое простое решение "на данном этапе" но чуть только шаг в следующий этап - и потратишь в 10 раз больше времени на разгребание проблем "не размножай сущности без необходимости" DRY = Don't Repeat Yourself Ты и так знаешь какие у тебя на форме компоненты - мемо, а какие нет. И это надежная информация. Она зашита компилятором наглухо, хрен отломаешь. И попусту дублировать наждёжную информацию о типах ненадёжной фигнёй в тэгах - неумно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2018, 13:30 |
|
||
|
Автоматическое включение вертикального ScrollBars в нескольких компонентах TMemo
|
|||
|---|---|---|---|
|
#18+
Еще один вариант, когда нужно обработать несколько memo, но не все Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2018, 13:32 |
|
||
|
Автоматическое включение вертикального ScrollBars в нескольких компонентах TMemo
|
|||
|---|---|---|---|
|
#18+
BellicОтлавливать компоненту по событию думаю анализируя Tag через CASE : зачем тебе вообще отлавливать какую-то одну конкретную компоненту, если ты собираешься в любом случае включать скролл Bellicдля всех ТМемо??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2018, 13:38 |
|
||
|
Автоматическое включение вертикального ScrollBars в нескольких компонентах TMemo
|
|||
|---|---|---|---|
|
#18+
Arioch, столько разных слов... ... Еще раз попробую словесно описать суть... ... Имеем N -ное количество ТМемо (с запретом редактирования и фиксированного размера!), программа в разное время выводит в них какие-то значения различной длины. Необходимо для каждого компонента написать процедуру, включающую СкроллБар, если записываемые данные больше видимого размера компонента. Первый вариант - написать N процедур и назначить их на событие OnChange для каждого конкретного ТМемо , но этот вариант слишком накладный! Второй вариант - написать Одну Общую процедуру для всех ТМемо , а внутри ее уже вычислять - для какого из них она была вызвана по событию. Для отлавливания выбрано уникальное значение (в моем случае) свойство TAG . Для меня осталось задачей - в конструкции CASE правильно сформировать (или просто присвоить " := ") имя компонента, что бы позже его можно было подставить в " with NameMemo do". Разве так нельзя сделать (не перебирая все элементы на форме)? Или же как то "вычислить" имя компонента, для которого была вызвана процедура, через SENDER? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2018, 13:56 |
|
||
|
Автоматическое включение вертикального ScrollBars в нескольких компонентах TMemo
|
|||
|---|---|---|---|
|
#18+
1. Совершенно зря гоните на Tag, не было проблем с ним ни разу. Использую постоянно, удобно. 2. Беллик, конкретно в твоём случае удобно не возится с тэгами, а найти все TMemo 'оптом' и с ними что-то сделать: Gerasimenkodo if Form1.Components[i].ClassName = 'TMemo' Лучше так: Код: pascal 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2018, 13:58 |
|
||
|
Автоматическое включение вертикального ScrollBars в нескольких компонентах TMemo
|
|||
|---|---|---|---|
|
#18+
Bellic, У события есть Sender. Может его заиспользовать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2018, 13:59 |
|
||
|
Автоматическое включение вертикального ScrollBars в нескольких компонентах TMemo
|
|||
|---|---|---|---|
|
#18+
Arioch, процедура включает СкроллБар в один момент времени только для Одного ТМемо! А вот для какого из них конкретно - и нужно вычислить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2018, 14:00 |
|
||
|
Автоматическое включение вертикального ScrollBars в нескольких компонентах TMemo
|
|||
|---|---|---|---|
|
#18+
Только так: авторВторой вариант - написать Одну Общую процедуру для всех ТМемо, а внутри ее уже вычислять - для какого из них она была вызвана по событию. Беллик, надо мыслить по-программистски. Одна из фундаментальных идей - это бритва Оккама. Всё, что может быть сделано минимальными телодвижениями, только так и должно быть сделано. авторДля отлавливания выбрано уникальное значение (в моем случае) свойство TAG. В OnChange у тебя уже есть Sender, больше тебе ничего не нужно, я так думаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2018, 14:04 |
|
||
|
Автоматическое включение вертикального ScrollBars в нескольких компонентах TMemo
|
|||
|---|---|---|---|
|
#18+
[quot makhaon]Только так: авторВторой вариант - написать Одну Общую процедуру для всех ТМемо, а внутри ее уже вычислять - для какого из них она была вызвана по событию. makhaon , ну а по тексту разве не понятно, что я не похож на мазохиста, пишущего N-процедур?..))) В OnChange у тебя уже есть Sender, больше тебе ничего не нужно, я так думаю. Да, возможно... пытаюсь восполнить пробелы в технологии Sender...))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2018, 14:09 |
|
||
|
Автоматическое включение вертикального ScrollBars в нескольких компонентах TMemo
|
|||
|---|---|---|---|
|
#18+
авторВ OnChange у тебя уже есть Sender, больше тебе ничего не нужно, я так думаю. makhaon, тогда CASE вообще не нужен будет!?..)) Получилось вот так: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. Все вроде нормуль, только при компиляции выругалось на выделенную строку: Код: pascal 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2018, 14:22 |
|
||
|
Автоматическое включение вертикального ScrollBars в нескольких компонентах TMemo
|
|||
|---|---|---|---|
|
#18+
Код: pascal 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2018, 14:34 |
|
||
|
Автоматическое включение вертикального ScrollBars в нескольких компонентах TMemo
|
|||
|---|---|---|---|
|
#18+
goldmi45 Код: pascal 1. Ага, ..))) Тут бы переменные не мешало бы переименовать..) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2018, 14:40 |
|
||
|
Автоматическое включение вертикального ScrollBars в нескольких компонентах TMemo
|
|||
|---|---|---|---|
|
#18+
Что касается самой реализации вычислений - попробую сам разобраться, возможно для моего случая код можно и сократить. Спасибо Всем, что были со мной!,,)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2018, 14:48 |
|
||
|
Автоматическое включение вертикального ScrollBars в нескольких компонентах TMemo
|
|||
|---|---|---|---|
|
#18+
1) автор сам не понимает, что ему надо - но пытается это реализовать. 2) автор явно фанат with...do и кучи переменных, одноименных с пропами компонента. соответственно, большие проблемы с кодом в грядущем у него предвижу я, особенно из-за пункта 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2018, 15:20 |
|
||
|
Автоматическое включение вертикального ScrollBars в нескольких компонентах TMemo
|
|||
|---|---|---|---|
|
#18+
Vizit0r1) автор сам не понимает, что ему надо - но пытается это реализовать. 2) автор явно фанат with...do и кучи переменных, одноименных с пропами компонента. соответственно, большие проблемы с кодом в грядущем у него предвижу я, особенно из-за пункта 2. Vizit0r , вместо того, что бы обливать грязью или унижать ТС - предложите полный вариант своей процедуры! Напомню - сей код был позаимствован вот от сюда: http://forum.vingrad.ru/topic-33922.html Надеюсь еще раз "постановку задачи" для Вас повторять не нужно? На текущий момент Общая процедура имеет следующий вид: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. Т.к. мои TMemo не редактируемые, то выделенные строки видимо можно удалить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2018, 15:36 |
|
||
|
Автоматическое включение вертикального ScrollBars в нескольких компонентах TMemo
|
|||
|---|---|---|---|
|
#18+
грязью обливать? унижать? Вот делать мне больше нечего. и да, свой ответ я дал сам первым. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2018, 15:48 |
|
||
|
Автоматическое включение вертикального ScrollBars в нескольких компонентах TMemo
|
|||
|---|---|---|---|
|
#18+
Bellic, автор...Напомню - сей код был позаимствован вот от сюда: http://forum.vingrad.ru/topic-33922.html... А зачем Вам весь код? Или Вы хотите Код: pascal 1. 2. 3. Или наследника написать Код: pascal 1. Никто - ж понять не может, чего Вы на выходе получить хотите. Решений Вам уже накидали, но Вас они почему-то не устраивают... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2018, 15:53 |
|
||
|
Автоматическое включение вертикального ScrollBars в нескольких компонентах TMemo
|
|||
|---|---|---|---|
|
#18+
Gerasimenko, в крайнем своем посте я выложил то, что у меня получилось... вся реализация через Сендер, без перебора всех компонентов на форме и прочего! Куда еще проще то? За сам заимствованный код (ссылку первоисточника я указал!) я сказать ничего не могу, кроме удаленных строк, не нужных мне... ... Имеете свое видение - предложите полный текст процедуры! Если не понятна Задача - перечитайте все мои посты еще раз... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2018, 16:21 |
|
||
|
Автоматическое включение вертикального ScrollBars в нескольких компонентах TMemo
|
|||
|---|---|---|---|
|
#18+
так у тебя действительно хрен поймешь сначала ты сказал, тебе нужна процедура, которая всем мемкам на форме сраз включит/выключит прокрутку потом оказалось, не всем, а только одной потом оказывается, надо то включать, то выключать в процессе набора текста (вот пользователь-то порадуетсЯ, когда у него все слова туда-сюда будут скакать в околограничных значениях).... поэтому и решения вам давали не для того, что у вас в голове вертится ,словами не выраженное, а для того, что 1) вы выразили словами 2) обычно составляет проблему у новичков то, что вы переменную Sender можете привести к типу TComponent, но не можете приветси к типу TMemo, ну извините, до такого догадаться и впрямь никому не удалось ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2018, 16:34 |
|
||
|
Автоматическое включение вертикального ScrollBars в нескольких компонентах TMemo
|
|||
|---|---|---|---|
|
#18+
Arioch, да, пожалуй не сразу все правильно объяснил с первого раза..((( Каюсь!!! P.S. Что касается Сэндера - то я о нем сразу и не подумал... не часто применяю это, мало опыта..( А вот через TAG а потом в CASE сформировать (или просто присвоить) имя компонента, чтоб позже подставить в "with ... do" - не понял таки как? Ну на примере имен ТМемо (Amemo, BMemo, CMemo, DMemo) - можете расписать полностью? Буду премного благодарен!,,)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2018, 16:45 |
|
||
|
Автоматическое включение вертикального ScrollBars в нескольких компонентах TMemo
|
|||
|---|---|---|---|
|
#18+
BellicА вот через TAG а потом в CASE сформировать (или просто присвоить) имя компонента, чтоб позже подставить в "with ... do" - не понял таки как? никак. не нужно. просто берешь напрямую. вместо (Sender as TComponent). КомпонентнаяПропертяТэг - что ты уже сделал - АБСОЛЮТНО ТОЧНО ТАК ЖЕ пишешь (Sender as TMemo). МемнаяПропертяСкроллБарз никаких дополнительных кейзов тут нафиг не нужно, у тебя уже ВСЕ и так есть ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2018, 16:51 |
|
||
|
Автоматическое включение вертикального ScrollBars в нескольких компонентах TMemo
|
|||
|---|---|---|---|
|
#18+
Bellicимя компонента И ещё раз скажу, имя компонента почти никогда никому не нужно, пользуются указателем на компонент. смотри мои куски кода, там нет никаких имён, просто перебираем указатели на все мемки (в массиве или на форме, источник не принципиален), и с указателями работает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2018, 16:53 |
|
||
|
Автоматическое включение вертикального ScrollBars в нескольких компонентах TMemo
|
|||
|---|---|---|---|
|
#18+
и ещё with - штука мощная, но опасная, по крайней мере в Паскалевском варианте есть очень многие, кто вообще выступают за то, чтобы из языка это слово убрать навсегда внутри with-блока должно быть одна, две, много - три, очень простых и очевидных команды. иначе начинается ералаш и путанится. и хорошо, если сразу, а не через пару лет. у тебя под with очень развесистое дерево. Не надо так делать. заведи переменную например var M: TMemo, присваивай в неё укaзатель M := Sender as TMemo; и дальше с ним работай без всяких with с этой переменной ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2018, 16:58 |
|
||
|
Автоматическое включение вертикального ScrollBars в нескольких компонентах TMemo
|
|||
|---|---|---|---|
|
#18+
Ariochзаведи переменную например var M: TMemo, присваивай в неё укaзатель M := Sender as TMemo; и дальше с ним работай без всяких with с этой переменной Если считаете, что в получившемся коде от WITH нужно избавиться - пусть так и будет! Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. Меня тоже кстати немного напрягали непонятные отдельные типа "Font", ...) А по большому счету - СкроллБарс можно было бы вообще оставить навечно включенным! Не так уж он собственно и мешает!..))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2018, 17:23 |
|
||
|
Автоматическое включение вертикального ScrollBars в нескольких компонентах TMemo
|
|||
|---|---|---|---|
|
#18+
BellicА по большому счету - СкроллБарс можно было бы вообще оставить навечно включенным! на мой взгляд, лучше так и сделать если бы полоска была СНАРУЖИ мемо и не меняла расположения текста - это одно но она появляется внутри, места для текста становится меньше, он перераспределяется по другому Ariochнадо то включать, то выключать в процессе набора текста (вот пользователь-то порадуетсЯ, когда у него все слова туда-сюда будут скакать в околограничных значениях).... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2018, 17:32 |
|
||
|
Автоматическое включение вертикального ScrollBars в нескольких компонентах TMemo
|
|||
|---|---|---|---|
|
#18+
Ariochнадо то включать, то выключать в процессе набора текста (вот пользователь-то порадуетсЯ, когда у него все слова туда-сюда будут скакать в околограничных значениях)....[/quot] У меня - Мемо не редактируемые пользователем! - Чисто для вывода результатов на просмотр! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2018, 17:35 |
|
||
|
Автоматическое включение вертикального ScrollBars в нескольких компонентах TMemo
|
|||
|---|---|---|---|
|
#18+
Bellic Код: pascal 1. если ты так считаешь, значит у тебя TMemo.WordsWrap выключен но тогда длинные строки будут уезжать вправо за границу и нужна будет горизонтальная прокрутка тоже а если включить заворот слишком длинных строк, то Lines.Count может оказаться меньше ,чем количество реальных строк. Такая вот фигня... В какой-то степени может помочь TCanvas.TextExtent ну а уж про использование TempLabel в цикле - это явно писал альтернативно одарённый программист впрочем, это не самый .... удивительный, скажем, код из онлайн-учебников, который мне попадался. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2018, 17:37 |
|
||
|
Автоматическое включение вертикального ScrollBars в нескольких компонентах TMemo
|
|||
|---|---|---|---|
|
#18+
я для вывода обычно включаю вертикальную прокрутку, а если горизонтально места не хватает - то пусть пользователь всю форму растягивает тоже не идеал, но мне так больше нравится и еще не выводи в Memo чаще, чем 2-3 раза в секунду будет только тормозить без всякой пользы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2018, 17:38 |
|
||
|
Автоматическое включение вертикального ScrollBars в нескольких компонентах TMemo
|
|||
|---|---|---|---|
|
#18+
кстати, а OnChange при этом вызывается ? в VCL тут чехарда, если пользователь что-то меняет, то OnChange вызывается у всех а когда меняется программно - то у одних контролов вызывается, а у других нет так тчо лучше проверять всегда ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2018, 17:40 |
|
||
|
Автоматическое включение вертикального ScrollBars в нескольких компонентах TMemo
|
|||
|---|---|---|---|
|
#18+
AriochBellic Код: pascal 1. если ты так считаешь, значит у тебя TMemo.WordsWrap выключен но тогда длинные строки будут уезжать вправо за границу и нужна будет горизонтальная прокрутка тоже а если включить заворот слишком длинных строк, то Lines.Count может оказаться меньше ,чем количество реальных строк. Такая вот фигня... В какой-то степени может помочь TCanvas.TextExtent ну а уж про использование TempLabel в цикле - это явно писал альтернативно одарённый программист впрочем, это не самый .... удивительный, скажем, код из онлайн-учебников, который мне попадался. Про WordsWrap я пока не думал... Он по умолчанию вроде оказался Включенным. Пока суть да дело - набросал тестовый проект... правда всего с одним ТМемо, но это не важно... На форме - две кнопки: Короткая фраза(длина выводимого в Мемо стринга меньше его объема и Длинная фраза(стринг длиннее Мемо)... Ну и увидев, что при выводе Кототкой происходит перенос, тоже подумалось, что формула то вычисления может быть не верная, хотя на взгляд - все устраивает в Примере (ну разве что одна пустая строка в конце Мемо). Ну а по TempLabel - видимо челу было проще всего вычислять!,,))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2018, 17:56 |
|
||
|
Автоматическое включение вертикального ScrollBars в нескольких компонентах TMemo
|
|||
|---|---|---|---|
|
#18+
В моем Реальном проекте вычисления необходимости Включения-Выключения можно вообще сделать проще, зная заранее - используемый в Мемо шрифт - количество видимых в одной строке символов - количество видимых строк Но у чела ведь получился практически универсальный код - для разных шрифтов и разного размера Memo! (Если не брать в расчет WordWrap!) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2018, 18:14 |
|
||
|
Автоматическое включение вертикального ScrollBars в нескольких компонентах TMemo
|
|||
|---|---|---|---|
|
#18+
Ну а самый простой вариант, без вычислений - заменить TMemo на TRichEdit... Задействовать в нем свойства: Код: pascal 1. 2. И в результате - полосы прокрутки будут автоматически появляться, если текст отсекается границами компонента...) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2018, 23:36 |
|
||
|
Автоматическое включение вертикального ScrollBars в нескольких компонентах TMemo
|
|||
|---|---|---|---|
|
#18+
Ariochа если включить заворот слишком длинных строк, то Lines.Count может оказаться меньше ,чем количество реальных строк.Если мне не изменяет память, то Lines хранит (вернее обеспечивает доступ) именно к отображаемым строкам. Именно потому оно Lines, а не Items. Но нужно проверить ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2018, 01:24 |
|
||
|
Автоматическое включение вертикального ScrollBars в нескольких компонентах TMemo
|
|||
|---|---|---|---|
|
#18+
Ничего подобного. Иначе бы в свойстве Lines.Text хранились бы только отображаемые строки. А в нем хранятся все строчки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2018, 07:57 |
|
||
|
Автоматическое включение вертикального ScrollBars в нескольких компонентах TMemo
|
|||
|---|---|---|---|
|
#18+
В Лазаре и в Memo, и RichEdit есть доп.стили ssAutoVertical, ssAutoHorizontal, ssAutoBoth, позволяющие не думать о таких мелочах. Правда, они отображаются даже тогда, когда текст умещается в окне. Пришлось писать специальную функцию для расчета высоты текста в заданном прямоугольнике. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2018, 10:57 |
|
||
|
Автоматическое включение вертикального ScrollBars в нескольких компонентах TMemo
|
|||
|---|---|---|---|
|
#18+
ДокВ Лазаре и в Memo, и RichEdit есть доп.стили ssAutoVertical, ssAutoHorizontal, ssAutoBoth, позволяющие не думать о таких мелочах...Лазарус ибо для Человека был сделан, а не для галочки. Док...Правда, они отображаются даже тогда, когда текст умещается в окне...Но ведь идея-то была хорошая, просто кто-то не успел доделать. Док...Пришлось писать специальную функцию для расчета высоты текста в заданном прямоугольнике.Да, Лазарус не для рукожопых лентяев. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2018, 12:39 |
|
||
|
Автоматическое включение вертикального ScrollBars в нескольких компонентах TMemo
|
|||
|---|---|---|---|
|
#18+
BellicНо у чела ведь получился практически универсальный код - для разных шрифтов Было бы чему удивляться, ей богу. AriochВ какой-то степени может помочь TCanvas.TextExtent .....а вообще, к вопросу о сумрачном гении, сталкивался я с загрузкой дерева из БД в невидимый TVirtualTreeView Причём он грузился подряд в один уровень, а потом уже начиналась сортировка - восстановление в загруженном VTV древообразной структуры. И после этого сформированное дерево переносилось в видимый VTV на форме. Тормоза были непредставимые... Те же данные, которые сортировались на сервере и грузились в самописное дерево, грущятся вообще глазу не заметно. Это я к тому, что TLabel предназначен для рисования текста на экране. Если рисловать не надо - то и TLabel не надо. Вычисления через "невидимые" контролы - это дикая кривизна, и для этого должно быть ОЧЕНЬ сильное обоснование. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2018, 16:31 |
|
||
|
Автоматическое включение вертикального ScrollBars в нескольких компонентах TMemo
|
|||
|---|---|---|---|
|
#18+
Arioch, TextExtent не нужен. Есть штатная TCanvas.DrawText, которая с нужными флагами возвращает высоту текста в прямоугольнике с заданной шириной Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. Но ТС это не интересует, он вообще на подсказки не смотрит - слишком увлечен своими идеями :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2018, 23:06 |
|
||
|
Автоматическое включение вертикального ScrollBars в нескольких компонентах TMemo
|
|||
|---|---|---|---|
|
#18+
Док, Штатный в Delphi как раз TCanvas.TextExtent Что до h:= DrawText(Handle, ..... То само слово Handle первым параметром подсказывает, чот это вовсе не часть TCanvas, а сторонняя процедура, скорее всего из WIndows GDI У методоа TCanvas такого бы быть не могло ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2018, 23:16 |
|
||
|
Автоматическое включение вертикального ScrollBars в нескольких компонентах TMemo
|
|||
|---|---|---|---|
|
#18+
Док, спасибо, я все читаю, что вы пишите!..)) Ну правда не всегда вовремя могу ответить! Просто раз в RichEdit оказалась нужная опция - проще заменить Мемо на него и отказаться от вычислений... Или вообще навечно включить СкроллБарс..)) ... Кстати - при выводе в Мемо, в нем в конце мешалась последняя пустая строка, получаемая ввиду заключительным символам $0A, $0D... Вопрос легко решился простой командой удаления пробелов и упр.символов RightTrim... Я конечно же Америку не открыл, но всеж решил дополнить инфу..) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2018, 14:31 |
|
||
|
|

start [/forum/search_topic.php?author=vadim245&author_mode=last_posts&do_search=1]: |
0ms |
get settings: |
9ms |
get forum list: |
9ms |
get settings: |
5ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
150ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
47ms |
get tp. blocked users: |
1ms |
| others: | 675ms |
| total: | 918ms |

| 0 / 0 |
