Валентин Озеров - Советы по 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 - читать книгу онлайн бесплатно, автор Валентин Озеров
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

inheritedMouseUp(Button, Shift, X, Y);

ifFResizeFlag then begin

FResizeFlag := false;

UpdateTitlesHeight;

end;

end;

procedureTBitDBGrid.DrawCell(ACol, ARow: Longint; ARect: TRect; AState: TGridDrawState);

var

Indicator : TBitmap;

TitleText : string;

Al : TAlignment;

begin

if not((gdFixed inAState) and((ARow = 0) and(dgTitles inOptions) and(ACol <> 0))) then

inheritedDrawCell(ACol, ARow, ARect, AState)

else begin

ifDefaultDrawing then begin

DrawEdge(Canvas.Handle, ARect, BDR_RAISEDINNER, BF_BOTTOMLEFT);

DrawEdge(Canvas.Handle, ARect, BDR_RAISEDINNER, BF_TOPRIGHT);

InflateRect(ARect, -1, -1);

Canvas.Brush.Color := FixedColor;

Canvas.FillRect(ARect);

end;

TitleText := Columns[ACol - 1].Title.Caption;

ifAssigned(OnDrawTitle) thenOnDrawTitle(ACol, ARect, TitleText);

ifDefaultDrawing and(TitleText <> '') then begin

Canvas.Brush.Style := bsClear;

Canvas.Font := RealTitleFont;

ifACol > 0 thenAl := Columns[ACol - 1].Title.Alignment

elseAl := Columns[0].Title.DefaultAlignment;

WriteText(Canvas, ARect, 2, 2, TitleText, Al);

end;

end;

end;

procedureTBitDBGrid.SetRealTitleFont(Value : TFont);

begin

FRealTitleFont.Assign(Value);

Repaint;

end;

procedure Register;

begin

RegisterComponents('Andre VCL', [TBitDBGrid]);

end;

initialization

DrawBitmap := TBitmap.Create;

finalization

DrawBitmap.Free;

end.

Несколько таблиц в одном TDBGrid

Delphi 1

Насколько я знаю, единственное легкое решение заключается в использовании вычисляемых полей.

Для того, чтобы поместить данные из нескольких таблиц в один DBGrid, нужно воспользоваться объектом TQuery. На заметку: используйте TQuery в режиме только для чтения, если вы не можете обеспечить гарантию выполнения некоторых из его руководящих принципов, один из которых – данные могут быть получены только от одной таблицы.

Как сделать так, чтобы в DBGrid напротив некоторых строк можно было бы галочку поставить?

Nomadicсоветует:

Ну примерно так (лишнее мало-мало порезал, больно много его, но идея видна :) на сервере — тaблицa Advertis.DB, первичный ключ ID — autoincrement. На локальном диске — тaблицa Founds.DB, с полем Advertis: integer, по которому есть индекс, и tblFounds.IndexFieldNames = 'Advertis'.

На гриде:

=== cut ===

procedureTMainForm.dbgWorkDblClick(Sender: TObject);

begin

TriggerRowSelection;

end;

procedureTMainForm.TriggerRowSelection;

begin

ifdmFile.AdvertisCount <> 0 then begin

with dmFile do if nottblFounds.FindKey([tblAdvertisID.Value]) then begin

tblFounds.AppendRecord([tblAdvertisID.Value]);

end else begin

tblFounds.Delete;

end;

dbgWork.Refresh;

end;

end;

procedureTMainForm.dbgWorkDrawColumnCell(Sender: TObject; constRect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);

begin

ifDataCol = 0 then withdmFile, dbgWork.Canvas do begin

FillRect(Rect); {clear the cell}

iftblFounds.FindKey([tblAdvertisID.Value]) then begin

TextOut(Rect.Left, Rect.Top, '?');

end else begin

TextOut(Rect.Left, Rect.Top, 'o');

end;

end;

end;

=== cut ===

Оказывается, я переопределял рисование гридa, а не вычислял поле. Не помню точно, но кажется, чтобы не перечитывать таблицу на каждый даблклик, а только перерисовать грид.

А колонка для галки в гриде определялась так:

=== cut ===

withdmFile, dbgWork.Columns do begin

BeginUpdate;

Clear;

{check mark}

nc := Add;

nc.Width := 14;

nc.Font.Name := 'Wingdings';

nc.Font.Size := 11;

nc.Alignment := taRightJustify;

nc.Title.Caption := 'y';

nc.Title.Font.Name := 'Wingdings';

nc.Title.Font.Size := 10;

nc.Title.Alignment := taCenter;

[skip определения остaльных колонок]

EndUpdate;

end;

=== cut ===

Вроде всё.

Ну, как напечатать/обработать только помеченное, сам разберёшься. У меня там накручено чего-то с фильтрами, думаю, можно проще.

Что касается других способов – можно вместо временной тaблицы попользовать список, массив или in-memory table.

Как в TDBGrid разрешить только операции UPDATE записей и запретить INSERT/DELETE?

Nomadicсоветует:

А я делаю так.

На DataSource, к которому прицеплен Grid, вешаю обработчик на событие OnStateChange.

Ниже текст типичного обработчика –

ifDBGrid1.DataSource.DataSet.State in[dsEdit, dsInsert] then

DBGrid1.Options := DBGrid1.Options + goRowSelect

elseDBGrid1.Options := DBGrid1.Options – goRowSelect;

Дело в том, что если у Grid'а стоит опция goRowSelect, то из Grid'а невозможно добавить запись. Ну а когда програмно вызываешь редактирование или вставку, то курсор принимает обычный вид и все Ok.

Лучше использовать конструкцию «State in dsEditModes».

Обновление TDBGrid после редактирования отдельной записи на отдельной форме

Delphi 1

А вы постите запись, прежде чем закрыть форму? При закрытии, форма самостоятельно данных не постит. Вы должны постить изменения или с помощью компонента dbnavigator, или c помощью кода, который при закрытии формы постит данные в основную таблицу.

На странице 95 Database Application Developers Guide (руководство разработчиков приложений баз данных), поставляемое с Delphi, приведен демонстрационный проект с двумя формами, демонстрирующий хорошую технику при использовании ttable на мастер-форме в качестве набора данных для детали.

Одним из решений вашей проблемы может служить связывание компонента DataSource на Form2 с набором данных DataSet на Form1. Это может быть достигнуто путем добавления следующей строки в обработчик события OnActivate для Form2:

MyDataSource.DataSet := Form1.MyTable;

Данный метод имеет 3 преимущества:

1. сделанные вами изменения немедленно отображаются, поскольку вы используете одну и ту же логическую таблицу;

2. если вам нужно определить установки для ваших полей таблицы, например, DisplayFormat или EditMask, вам нужно сделать это только один раз в таблице на Form1, вам не нужно это делать на каждой форме, которая использует таблицу;

3. это сохраняет ресурсы и повышает производительность, поскольку ваше приложение при работе с таблицей использует только одну сессию. Тем не менее, в проектном времени вам нужно иметь TTable на вашей Form2 для того, чтобы вы могли выбрать поля для БД-контролов, после чего вы можете удалить TTable.

Пересортица в коде полей TDBGrid во время вополнения программы

Одной строкой

используйте <���имя поля>.index := <���желаемый номер поля>

В Delphi 3 и выше ползунок TDBGrid иногда может находится не только в трех фиксированных позициях. Что для этого нужно?

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

Интервал:

Закладка:

Сделать


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

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




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


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


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

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