Виртуальная библиотека Delphi

Тут можно читать онлайн Виртуальная библиотека Delphi - бесплатно полную версию книги (целиком) без сокращений. Жанр: comp-programming. Здесь Вы можете читать полную версию (весь текст) онлайн без регистрации и SMS на сайте лучшей интернет библиотеки ЛибКинг или прочесть краткое содержание (суть), предисловие и аннотацию. Так же сможете купить и скачать торрент в электронном формате fb2, найти и слушать аудиокнигу на русском языке или узнать сколько частей в серии и всего страниц в публикации. Читателям доступно смотреть обложку, картинки, описание и отзывы (комментарии) о произведении.
  • Название:
    Виртуальная библиотека Delphi
  • Автор:
  • Жанр:
  • Издательство:
    неизвестно
  • Год:
    неизвестен
  • ISBN:
    нет данных
  • Рейтинг:
    3/5. Голосов: 11
  • Избранное:
    Добавить в избранное
  • Отзывы:
  • Ваша оценка:
    • 60
    • 1
    • 2
    • 3
    • 4
    • 5

Виртуальная библиотека Delphi краткое содержание

Виртуальная библиотека Delphi - описание и краткое содержание, автор Неизвестный Автор, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru

Виртуальная библиотека Delphi - читать онлайн бесплатно полную версию (весь текст целиком)

Виртуальная библиотека Delphi - читать книгу онлайн бесплатно, автор Неизвестный Автор
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

21. Как определить реальный размер поля типа BLOB, которое сохранено в таблице?

Ниже приведена функция GetBlobSize , которая возвращает размер данного BLOB или MEMO поля.

functionGetBlobSize(Field: TBlobField): Longint;

begin

withTBlobStream.Create(Field, bmRead) do

try

Result := Seek(0, 2);

finally

Free;

end;

end;

procedureTForm1.Button1Click(Sender: TObject);

begin

{ This sets the Edit1 edit box to display the size of }

{ a memo field named Notes. }

Edit1.Text := IntToStr(GetBlobSize(Notes));

end;

22. Как осуществить поиск по неиндексированному полю в таблице?

Вы можете добавить следующую функцию в ваш модуль и вызвать, например:

Locate(Table1, Table1LName, 'Beman');

Table1 — компонент TTable , Table1LNameTField , который вы добавили с помощью Fields Editor и 'Beman' - имя, которое вы хотите найти.

23. Как узнать, что изменилась текущая запись?

Событие TDataSource.OnDataChange когда State=dsBrowse .

24. Как считать даты для вычисляемых полей?

При вычислении дат важно удостовериться в том, что все используемые значения подходят по типу. В документации не совсем явно отражен тот факт, что на самом деле тип TDataTime эквивалентен типу Double , который можно использовать далее.

В примере, D1 и D2 (поля в Table1 ) могут быть типа или Date , или TDateTime , а D3 — поле типа Integer .

procedureTForm1.Table1CalcFields(DataSet: TDataset);

var

T1, T2: TDateTime;

begin

Table1D1.AsDateTime := Date+2;

{ or Table1D1.Value := Date+2; }

Table1D2.AsDateTime := Date-2;

T1 := Table1D1.AsDateTime;

T2 := Table1D2.AsDateTime;

Table1D3.AsInteger := Trunc(Double(T1) - Double(T2));

end;

Компоненты и VCL

1. Почему возникает ошибка компиляции при обращении к объекту Sender в обработчике события?

картинка 52

Я в обработчике события OnChange для компонента TEdit пытаюсь получить содержимое его текстового буфера. Однако, следующая конструкция вызывает ошибку компиляции 'неизвестный идентификатор':

Caption := Sender.Text;

картинка 53

Если вы рассматривали декларацию, объект Sender имеет тип TObject , который является классом, который наследуется почти всеми остальными объектами. Вы, вероятно, пробуете обращаться к свойству, которое не определено в TObject , вроде Text или Caption . По этой причине, выражение Sender.Text вызовет ошибку, но если (для примера) вы знаете, что Sender имеет тип TEdit, тогда вы можете использовать выражение:

Caption := (Sender asTEdit).Text;

Если вы не уверены, что объект Sender будет всегда иметь данный тип, то рекомендуется предварительно проверить это:

ifSender isTEdit then

2. Проблемы с полями класса типа TObject, TTable и т.д.

картинка 54

Я объявляю поле класса как TTable , но при обращении к нему происходит ошибка.

картинка 55

Дело в том, что в Delphi все экземпляры объектов, объявленых как class, являются динамическими. Соответственно поле MyTable, объявленное как

type

TMyClass = class(TObject)

public

MyTable: TTable;

constructorCreate;

destructorDestroy; override;

end;

является указателем на класс TTable , и должно быть инициализировано в конструкторе вашего объекта и соответственно разрушено в деструкторе следующим образом:

constructorTMyClass.Create;

begin

MyTable := TTable.Create( nil);

MyTable.DatabaseName := 'DBDEMOS';

end;

destructorTMyClass.Destroy;

begin

MyTable.Free;

end;

Подробнее см. Changes in Object Pascal Language в документации или on-line help.

3. Как закрыть модальную форму (ShowModal)? И вообще, каков лучший способ закрыть любую форму?

Вообще говоря, нужно вызывать метод Close для формы. Close вызывает событие OnClose (обработчик которого может решить, что форму нельзя закрывать, например, если имеются несохраненные данные). Close не освобождает память, связанную с формой, если вы, конечно, не поместите в обработчик события вызов метода Release .

Если вы хотите уничтожить форму без вызова события OnClose , используйте метод Release . Этот метод работает подобно Free , но позволяет всем обработчикам событий данной формы закончить работу перед тем, как память будет освобождена.

Модальные формы "прекращают свой модальный статус", когда вы устанавливаете свойство ModalResult формы в любое значение, отличное от нуля. Если вы поместите кнопку на модальную форму и установите свойство ModalResult для кнопки в некоторое значение, то, когда пользователь нажмет на эту кнопку, форма закроется с результатом, который вы определили. Этот результат можно узнать вызывая ShowModal как функцию. То есть:

Result := Form.ShowModal;

4. Перемещение существующих компонентов на TPanel, TGroup и т.п.

картинка 56

Я поместил кнопку (или что-то другое) на форму, затем поместил панель, и решил переместить кнопку на панель, но ничего не получилось.

картинка 57

Действительно, чтобы поместить кнопку на панель, необходимо на форму сначала поместить панель, выбрать ее, а затем уже помещать кнопку.

Но и в вашей ситуации есть решение. Скопируйте (Copy) или вырежьте (Cut) нужный компонент, выберите панель, и сделайте вставку (Paste). Рекомендуется предварительно "подогнать" копируемый компонент в левый верхний угол формы, иначе компонент на панели может выпасть из "пределов видимости" панели (или любого другого группового компонента).

Если компонент все-таки "выпал" из пределов видимости - найдите этот компонент в Инспекторе Объектов, и установите нужные значения его свойств Left и Top .

Используя группы компонент можно огранизовать форму-шаблон, на которой можно складывать (например в Notebook) компоненты с предварительно заданными свойствами, отличными от стандартных. Это решение проще чем добавлять такие компоненты в палитру компонент — не увеличивается размер библиотеки компонентов DCL (Delphi 3.0 не считается), не загромождается палитра компонент.

Учтите, что при таком копировании компонент их имена меняются на новые ( Button1 , Button2 и т.д.).

5. Как можно добавить новый компонент на страницу TTabbedNoteBook во время выполнения программы? Как нужно определить свойство Parent для этого компонента?

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать


Неизвестный Автор читать все книги автора по порядку

Неизвестный Автор - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




Виртуальная библиотека Delphi отзывы


Отзывы читателей о книге Виртуальная библиотека Delphi, автор: Неизвестный Автор. Читайте комментарии и мнения людей о произведении.


Понравилась книга? Поделитесь впечатлениями - оставьте Ваш отзыв или расскажите друзьям

Напишите свой комментарий
x