Juri Shutenko Personal Homepage. Visual FoxPro.

Из старого сундучка. Часть 1.

Ну вот и нашлось время немного разобрать содержимое старых CD, коих набралось немало. Нашлась и старая "база знаний", начатая еще во времена использования FoxPro for Windows 2.5. Может быть старые заметки будут кому-то полезны.

  1. Controls - элементы управления
    1. Этот непростой "простой" textbox.

Этот непростой "простой" textbox. (1999)

Решил заняться созданием форм "на лету". И понадобился мне "саморасширяющийся" textbox. Расширяющийся до известных пределов, коими могли стать размеры какого-либо контейнера, в которые он мог бы быть вставлен. Расчет длины введенного текста вроде не представляет особой сложности. И тут я влетел в проблему. Начал потихоньку разбираться и получил очень интересные результаты.

Чему изначально равняется значение свойства "Value" свободно лежащего на форме объекта класса "textbox" (имеется в виду что textbox ни к чему не привязан и имеет свойства, установленные у базового класса по умолчанию)? Ничему? Ничего подобного. Чтобы убедиться в этом, откройте в дизайнере форм новую форму и бросьте на нее два объекта класса "textbox" и четыре объекта класса "Label". В методе, ассоциированном с событием LostFocus первого объекта textbox пропишите приведенный ниже фрагмент кода

With Thisform
   .Label1.Caption="Selection Length: "+;
      TRANSFORM(This.SelLength)
   lnUsefulPartLength=;
      TXTWIDTH(Alltrim(This.Value))*Fontmetric(6,This.FontName,This.FontSize)
   lnNotFilledPartLength=;
      TXTWIDTH(Space(This.SelLength))*Fontmetric(6,This.FontName,This.FontSize)
   .Label2.Caption=;
      "Filled part of value: "+Transform(lnUsefulPartLength)
   .Label3.Caption=;
      "Non-filled part of value: "+Transform(lnNotFilledPartLength)
   .Label4.Caption=;
      "Both parts summary: "+Transform(lnUsefulPartLength+lnNotFilledPartLength)
Endwith

Если вам лень собирать пример - возьмите его здесь.
 
Запустите форму. Фокус окажется в исследуемом объекте. Нажимаем Shift+End.

Test 1

Переносим фокус щелчком мыши на второй текстбох и получаем первые значения:

Test 1

Произвольно шлепаем по клавишам и затем вновь нажимаем Shift+End.

Test 1

Переносим фокус щелчком мыши на второй текстбох и получаем следующие значения:

Test 1

Добавляем несколько символов и затем вновь нажимаем Shift+End. Что это вдруг произошло - введенная в текстбокс строка прокрутилась на один символ влево!

Test 1

Переносим фокус щелчком мыши на второй текстбох и получаем такие вот значения:

Test 1

Вот это уже интересно. Поскольку мы не изменяли никаких свойств textbox'ов, то в общей длине заполненной и незаполненной частй следует учесть по два пикселя с каждой стороны, что определяется установкой Margin, равной, по умолчанию, 2 пикселям. Итого имеем общий размер составных частей свойства Value равный 96 пикселям. Поскольку длина самого textbox'а равна 100 пикселям, то оставшееся свободное место менее значения, возвращаемого Fontmetric(6,"Arial",9).Может быть прокрутка связана как раз с вычислением этого свободного для ввода очередного символа пространства?





















Cелектор для быстрого перехода на сайты, связанные с Visual FoxPro.