Чтение онлайн

ЖАНРЫ

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

Озеров Валентин

Шрифт:

 inherited MouseDown(Button, Shift, X, Y);

end;

procedure TBitDBGrid.MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer);

begin

 inherited MouseUp(Button, Shift, X, Y);

 if FResizeFlag then begin

FResizeFlag := false;

UpdateTitlesHeight;

 end;

end;

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

var

 Indicator : TBitmap;

 TitleText : string;

 Al : TAlignment;

begin

 if not ((gdFixed in AState) and ((ARow = 0) and (dgTitles in Options) and (ACol <> 0))) then

inherited DrawCell(ACol, ARow, ARect, AState)

 else begin

if DefaultDrawing 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;

if Assigned(OnDrawTitle) then OnDrawTitle(ACol, ARect, TitleText);

if DefaultDrawing and (TitleText <> '') then begin

Canvas.Brush.Style := bsClear;

Canvas.Font := RealTitleFont;

if ACol > 0 then Al := Columns[ACol - 1].Title.Alignment

else Al := Columns[0].Title.DefaultAlignment;

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

end;

 end;

end;

procedure TBitDBGrid.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 ===

procedure TMainForm.dbgWorkDblClick(Sender: TObject);

begin

 TriggerRowSelection;

end;

procedure TMainForm.TriggerRowSelection;

begin

 if dmFile.AdvertisCount <> 0 then begin

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

tblFounds.AppendRecord([tblAdvertisID.Value]);

end else begin

tblFounds.Delete;

end;

dbgWork.Refresh;

 end;

end;

procedure TMainForm.dbgWorkDrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);

begin

 if DataCol = 0 then with dmFile, dbgWork.Canvas do begin

FillRect(Rect); {clear the cell}

if tblFounds.FindKey([tblAdvertisID.Value]) then begin

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

end else begin

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

end;

 end;

end;

=== cut ===

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

Поделиться с друзьями: