Валентин Озеров - Советы по Delphi. Версия 1.4.3 от 1.1.2001

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

Валентин Озеров - Советы по Delphi. Версия 1.4.3 от 1.1.2001 краткое содержание

Советы по Delphi. Версия 1.4.3 от 1.1.2001 - описание и краткое содержание, автор Валентин Озеров, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru

…начиная с 1001. Смотрите другие файлы…

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

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

Интервал:

Закладка:

Сделать

Установите defaultDrawing в false, и создайте собственный onDrawDataCell, в котором и задавайте нужный вам цвет ячеек. Примерно так:

procedureTform1.DBgrid1DrawDataCell(Sender: TObject; constRect: TRect; Field: TField; State: TGridDrawState);

begin

{ выберите цвет для текста (font.color) и фона (brush.color) }

if(field = table1Status) then begin

{ белый на красном }

DBgrid1.canvas.font.color := clWhite;

DBgrid1.canvas.brush.color := clRed;

end else begin

{ черное на белом }

DBgrid1.canvas.brush.color := clWhite;

DBgrid1.canvas.font.color := clBlack;

end;

{ рисуем ячейку }

DBgrid1.canvas.textrect(rect, rect.left+2, rect.top+2, field.asString);

end;

procedureTMainForm.CharGridDrawCell(Sender: TObject; Col, Row: Longint; Rect: TRect; State: TGridDrawState);

varTheText: string;

begin

TheText := CharGrid.Cells[Col, Row];

withCharGrid.Canvas do begin

{ Определяем цвет фона в зависимости от состояния ячейки: }

ifgdFocused inState thenBrush.Color := clYellow {Цвет ячейки с фокусом}

else ifgdSelected inState thenBrush.Color := clOlive {Цвет выбранной ячейки}

else{ячейка не имеет фокуса и не выбрана}

ifIntFromStr(TheText) <> 0 thenBrush.Color := clNavy {Цвет фона подсвеченной ячейки}

elseBrush.Color := clWhite; {Цвет фона нормальной ячейки}

{ Определяем цвет текста: }

ifIntFromStr(TheText) <> 0 thenFont.Color := clRed {Цвет текста подсвеченной ячейки}

elseFont.Color := clNavy; {Цвет текста нормальной ячейки}

TextRect(Rect, Rect.Left + 2, Rect.Top + 2, TheText);

end; {with CharGrid.Canvas}

end;

Показ Memo-поля в Dbgrid

Delphi 1

…я все же лелею надежду, что когда-нибудь увижу TMemoField.DataSize, имеющим значение, отличное от нуля. Может быть значение DataSize является размером части Memo, которая сохранилась в .db-файле? Вместо этого я теперь пользуюсь объектом TBlobStream, который вполне хорошо справляется с этой работой. Все это у меня происходит примерно так:

Var

pBuffer: PChar;

Blob: TBlobStream;

begin

{FDataField – это TMemoField}

Blob := TBlobStream.Create(FDataField, bmRead);

try

if Blob.Size > 0 then try

GetMem(pBuffer, Blob.Size);

Blob.Read(pBuffer^, Blob.Size);

{ что-то тут делаем }

FreeMem(pBuffer, Blob.Size);

except

ShowMessage('Нехватка памяти' );

end;

finally

Blob.Free

end;

Как определить изменение фокуса строки в TDBGrid?

Используйте событие OnDataChange объекта Datasource, соединенного с DBGrid. Если параметр State в обработчике событие равен dsBrowse, значит вы перешли в новую строку (или только что открыли таблицу).

Почему сетка не поддерживает такое событие? Поскольку сетка может быть не единственным элементом управления, оторбажающим данные из текущей строки и может быть не единственным элементом, позволяющим осуществлять перемещение от строки к строке. С помощью Datasource обработка события осуществляется централизованно.

Я не уверен в том, что проблему можно решить, обрабатывая событие одинарного щелчка, для отслеживания события изменения строк я рекомендую использовать событие TDatasource.OnDataChange, а для колонок — TDBGrid.OnColEnter/Exit.

Лично я пользуюсь следующей рабочей технологией:

1. Для того, чтобы обнаружить изменения текущей строки, воспользуйтесь событием TDataSource OnDataChange. OnDataChange возникает при прокрутке или щелчке на другой строке. Обработчик события может выглядеть приблизительно так:

procedureForm1.DSrc1DataChange(Sender: TObject; Field: TField);

где Field является колонкой, где произошло изменение.

Поля TTable могут использоваться для сравнения текущих выбранных строк полей (ключ) с вашими требованиями. С той же целью может быть использовано и свойство TDBGrid Fields. Для примера:

iftbl1.Fields[0].AsString = 'BlaBlaBla' then …

или

ifdbGrid1.Fields[I].IsNull then …

2. Для отслеживания изменения колонки, используйте события TDBGrid OnColExit & OnColEnter. Для определения выбранной к настоящему времени колонки воспользуйтесь свойствами TDBGrid SelectedField и SelectedIndex.

Когда выбирается другая колонка другой строки, вы получаете события OnColExit, OnColEnter и OnDataChange.

3. Можно пойти и «кривым» путем, взявшись за обработку события TDBGrid OnDrawDataCell, которое возникает когда ячейка выбирается, или когда сетка скроллируется. Обработчик события может выглядеть примерно так:

procedureForm1.dbGrid1DrawDataCell(Sender: TObject; Rect: TRect; Field: TField; State: TGridDrawState);

При изменении ячейки вы получаете поток событий, поэтому вам нужно каким-то образом их фильтровать.

4. Если у вас нет проблем в создании «101 изменения» стандартных компонентов – что является проблемой для меня 8-), то попробуйте это. Это легко.

Чтобы иметь доступ к индексу строки или колонки выбранной ячейки, вы должны унаследовать ваш класс от TCustomGrid и опубликать свойства времени выполнения Row и Col (текущие строка и колонка сетки, не таблицы!!):

typeTSampleDBGrid = class(TCustomGrid)

public

propertyCol;

propertyRow;

end;

в соответствующей процедуре или обработчике события осуществите приведение типа:

varG: TSampleDBGrid;

begin

G := TSampleDBGrid(myDBGrid1);

ifG.Row = I then …

if G.Col = J then …

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

…из чего я могу заключить, что вы должны это сделать программным путем. Подразумеваем, что сетка уже существует, и у вас есть доступ к основной таблице TTable:

grid.colcount := dbGrid.fieldcount;

table.first;

row := 0;

while nottable.eof do begin

grid.rowcount := row + 1;

fori := 0 togrid.colcount-1 do

grid.cells[i,row] := dbGrid.fields[i].asString;

table.next;

inc(row);

end;

Могут быть ошибки, но это должно помочь.

Посмотрите на следующий код, он может вам помочь. Он берет у элемента управления свойсто 'Name' и помещает его в свойство 'Caption' метки.

unitUnit1;

interface

usesSysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;

typeTForm1 = class(TForm)

Label1: TLabel;

Edit1: TEdit;

Edit2: TEdit;

Button1: TButton;

procedureButton1Click(Sender: TObject);

procedureEdit1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);

procedureEdit2MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);

private

{ Private declarations }

public

{ Public declarations }

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

Интервал:

Закладка:

Сделать


Валентин Озеров читать все книги автора по порядку

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




Советы по Delphi. Версия 1.4.3 от 1.1.2001 отзывы


Отзывы читателей о книге Советы по Delphi. Версия 1.4.3 от 1.1.2001, автор: Валентин Озеров. Читайте комментарии и мнения людей о произведении.


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

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