Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Π‘ΠΎΠ²Π΅Ρ‚Ρ‹ ΠΏΠΎ Delphi. ВСрсия 1.4.3 ΠΎΡ‚ 1.1.2001Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 70

Автор Π’Π°Π»Π΅Π½Ρ‚ΠΈΠ½ ΠžΠ·Π΅Ρ€ΠΎΠ²

var nIndex : Integer;


 function ReadWidth : Integer;

 var i : Integer;

 begin

  i := _HideColumns.IndexOf(Columns[nIndex]);

  if i = -1 then result := 120

  else result := Integer(_HideColumnsValues[i]);

 end;


 procedure SaveWidth;

 var i : Integer;

 begin

  i := _HideColumns.IndexOf(Columns[nIndex]);

  if i <> - 1 then begin

   _HideColumnsValues[i] := Pointer(Columns[nIndex].Width);

  end else begin

   _HideColumns.Add(Columns[nIndex]);

   _HideColumnsValues.Add(Pointer(Columns[nIndex].Width));

  end;

 end;


begin

 for nIndex := 0 to Columns.Count - 1 do begin

  if (Columns[nIndex].Width = 0)  then begin

   if (nIndex + 1 <= FreezeCols) or (nIndex >= SelectedIndex + ADelta) then

    Columns[nIndex].Width := ReadWidth;

  end else begin

   SaveWidth;

   if (nIndex + 1 > FreezeCols) and (nIndex < SelectedIndex + ADelta) and

    (nIndex + 1 < Columns.Count) and (FreezeCols > 0) then

    Columns[nIndex].Width := 0;

  end;

 end;

end;

Dbgrid с Ρ†Π²Π΅Ρ‚Π½Ρ‹ΠΌΠΈ ячСйками IV

Nomadic совСтуСт:

HΠ°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‚Π°ΠΊ:

DefaultDrawing:=False;

….

procedure TfrmCard.GridDrawColumnCell(Sender: TObject; constRect: TRect; DataCol: Integer; Column: TColumn;State: TGridDrawState);

var

 Index : Integer;

 Marked, Selected: Boolean;

begin

 Marked := False;

 if (dgMultiSelect in Grid.Options) and THackDBGrid(Grid).Datalink.Active then

 Marked:=Grid.SelectedRows.Find(THackDBGrid(Grid).Datalink.Datasource.Dataset.Bookmark, Index);

 Selected := THackDBGrid(Grid).Datalink.Active and (Grid.Row-1 = THackDBGrid(Grid).Datalink.ActiveRecord);

 if Marked then begin

  Grid.Canvas.Brush.Color:=$DFEFDF;

  Grid.Canvas.Font.Color :=clBlack;

 end;

 if Selected then begin

  Grid.Canvas.Brush.Color:=$FFFBF0;

  Grid.Canvas.Font.Color :=clBlack;

  if Marked then Grid.Canvas.Brush.Color:=$EFE3DF; { $8F8A30 }

 end;

 Grid.DefaultDrawColumnCell(Rect, DataCol, Column, State);

end;

Π³Π΄Π΅

THackDBGrid = class(TDBGrid)

 property DataLink;

 property UpdateLock;

end;

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° обьявлСниС класса THackDBGrid. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½Ρ‹ΠΌ полям, свойствам ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌ класса, Ρ‡Ρ‚ΠΎ, ΠΊ соТалСнию, приходится Π΄Π΅Π»Π°Ρ‚ΡŒ, Ссли Π°Π²Ρ‚ΠΎΡ€Ρ‹ исходного класса оказались Π½Π΅ ΠΏΡ€Π΅Π΄ΡƒΡΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹. 

Dbgrid с Ρ†Π²Π΅Ρ‚Π½Ρ‹ΠΌΠΈ ячСйками V

Delphi 1 

ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄ Π² ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ΅ события TDBGrid OnDrawDataCell:

Procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect; Field: TField; State: TGridDrawState);

begin

 If gdFocused in State then with (Sender as TDBGrid).Canvas do begin

  Brush.Color := clRed;

  FillRect(Rect);

  TextOut(Rect.Left, Rect.Top, Field.AsString);

 end;

end;

УстановитС рисованиС ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡ΠΈΠ½ΠΈΡŽ (Default drawing) Π² True. Волько послС этого ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΡƒΡŽ ячСйку. Если Π²Ρ‹ установили DefaultDrawing Π² False, Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ сами Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ всС ячСйки, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ свойство Canvas. 

Π§Ρ‚ΠΎ я ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽ ΠΎΡ‚ наличия ConstraintBroker (Π±Ρ€ΠΎΠΊΠ΅Ρ€Π° ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ)?

Nomadic ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚:

ConstraintBroker позволяСт Π’Π°ΠΌ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π½Π° ограничСния Π² Π΄Π°Π½Π½Ρ‹Π΅.

Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ³Π΄Π° Π’Ρ‹ Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚Π΅ Π΄Π°Π½Π½Ρ‹Π΅, Π’Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚Π΅ вмСстС с Π½ΠΈΠΌΠΈ ΠΈ ΠΏΡ€Π°Π²ΠΈΠ»Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΎΠ½ΠΈ Π΄ΠΎΡ€Π»ΠΆΠ½Ρ‹ ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€ΡΡ‚ΡŒ. Π­Ρ‚ΠΈ ΠΏΡ€Π°Π²ΠΈΠ»Π° автоматичСски Π±Π΅Π· Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° входят Π² силу.

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ это происходит Π±Π΅Π· Π΅Π΄ΠΈΠ½ΠΎΠΉ строчки ΠΊΠΎΠ΄Π°, Ρ‚ΠΎ Π’Π°ΠΌ Π½Π΅ трСбуСтся ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ ΠΈΠ»ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· ΠΏΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΠΏΡ€Π°Π²ΠΈΠ».

ЀактичСски это простоС Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π·Π°Π΄Π°Ρ‡ΠΈ обновлСния клиСнтского прилоТСния Π±Π΅Π· Π²Ρ‹Ρ…ΠΎΠ΄Π° ΠΈΠ· Π½Π΅Π³ΠΎ.

КаТдоС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰Π΅Π΅ ConstraintBroker, автоматичСски ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ это качСство…

Π£Π»ΡƒΡ‡ΡˆΠ΅Π½Π½Ρ‹ΠΉ Dbgrid

Delphi 1

{

Код ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½Π½ΠΎΠ³ΠΎ TDBGrid, ΠΈΠΌΠ΅ΡŽΡ‰Π΅Π³ΠΎ свойства Col, Row ΠΈ Canvas ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ CellRect. Π­Ρ‚ΠΎ Ρ‡Ρ€Π΅Π·Π²Ρ‹Ρ‡Π°ΠΉΠ½ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π² случаС, Ссли Π²Ρ‹, ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠ°Π΄Π°ΡŽΡ‰ΠΈΠΉ список Π½Π° мСстС Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠΉ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ ячСйки.

}

unit VUBComps;


interface


uses SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,Forms, Dialogs, Grids, DBGrids, DB, Menus;


type TDBGridVUB = class(TDBGrid)

private

  { Private declarations }

protected

 { Protected declarations }

public

 property Canvas;

 function CellRect(ACol, ARow: Longint): TRect;

 property Col;

 property Row;


procedure Register;


implementation


procedure Register;

begin

 RegisterComponents('VUBudget', [TDBGridVUB]);

end;


function TDBGridVUB.CellRect(ACol, ARow: Longint): TRect;

begin

 Result := inherited CellRect(ACol, ARow);

end;

end.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Drag and Drop ΠΌΠ΅ΠΆΠ΄Ρƒ двумя Dbgrid

Delphi 3

Π”Π°Π½Π½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° ΠΈ дСмонстрационный ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ простой ΠΏΡƒΡ‚ΡŒ осущСствлСния ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ "drag and drop" (ΠΏΠ΅Ρ€Π΅Ρ‚Π°Ρ‰ΠΈ ΠΈ Π±Ρ€ΠΎΡΡŒ) ΠΌΠ΅ΠΆΠ΄Ρƒ двумя полями Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ‚Π°Π±Π»ΠΈΡ‡Π½Ρ‹Ρ… сСток.

ЗапуститС Delphi 3 (с Π½Π΅Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ измСнСниями Π΄Π°Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΈ Π² Delphi 1-2).


АктивизируйтС File|New|Unit. Π‘ΠΊΠΎΠΏΠΈΡ€ΡƒΠΉΡ‚Π΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π½ΠΈΠΆΠ΅ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ MyDBGrid Π²ΠΎ вновь созданный ΠΌΠΎΠ΄ΡƒΠ»ΡŒ. Π‘Π΄Π΅Π»Π°ΠΉΡ‚Π΅ File|Save As. Π‘ΠΎΡ…Ρ€Π°Π½ΠΈΡ‚Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ ΠΊΠ°ΠΊ MyDBGrid.pas.


Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ ΠΏΡƒΠ½ΠΊΡ‚ мСню Component|Install Component. ΠŸΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ΡΡŒ Π½Π° страницу Info New Package. ΠŸΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚Π΅ MyDBGrid.pas Π² ΠΏΠΎΠ»Π΅ рСдактирования "Unit file name" (имя Ρ„Π°ΠΉΠ»Π° модуля). НазовитС ΠΌΠΎΠ΄ΡƒΠ»ΡŒ MyPackage.dpk. ΠžΡ‚Π²Π΅Ρ‚ΡŒΡ‚Π΅ Yes Π½Π° вопрос Delphi 3 ΠΎ нСобходимости сборки ΠΈ установки ΠΏΠ°ΠΊΠ΅Ρ‚Π°. НаТмитС OK Π½Π° сообщСниС Delphi 3 ΠΎ нСобходимости Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ VCL30.DPL. ПослС этого ΠΏΠ°ΠΊΠ΅Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ собран ΠΈ установлСн. Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ TMyDBGrid Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ Π² ΠŸΠ°Π»ΠΈΡ‚Ρ€Π΅ ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² Π² Π³Ρ€ΡƒΠΏΠΏΠ΅ "Samples". Π—Π°ΠΊΡ€ΠΎΠΉΡ‚Π΅ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² ΠΈ сохранитС ΠΏΠ°ΠΊΠ΅Ρ‚.


Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ ΠΏΡƒΠ½ΠΊΡ‚ мСню File|New Application. Π©Π΅Π»ΠΊΠ½ΠΈΡ‚Π΅ ΠΏΡ€Π°Π²ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ ΠΌΡ‹ΡˆΠΈ Π½Π° Ρ„ΠΎΡ€ΠΌΠ΅ (Form1) ΠΈ Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ View As Text. Π‘ΠΊΠΎΠΏΠΈΡ€ΡƒΠΉΡ‚Π΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π½ΠΈΠΆΠ΅ исходный ΠΊΠΎΠ΄ Ρ„ΠΎΡ€ΠΌΡ‹ GridU1 Π² Form1. Π©Π΅Π»ΠΊΠ½ΠΈΡ‚Π΅ ΠΏΡ€Π°Π²ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ ΠΌΡ‹ΡˆΠΈ Π½Π° Ρ„ΠΎΡ€ΠΌΠ΅ ΠΈ Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ View As Form. Π£Π±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ Π² активности Π²Π°ΡˆΠΈΡ… Ρ‚Π°Π±Π»ΠΈΡ†. Π‘ΠΊΠΎΠΏΠΈΡ€ΡƒΠΉΡ‚Π΅ располоТСнный Π½ΠΈΠΆΠ΅ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ GridU1 Π² ваш ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Unit1.


Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ ΠΏΡƒΠ½ΠΊΡ‚ мСню File|Save Project As. Π‘ΠΎΡ…Ρ€Π°Π½ΠΈΡ‚Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ ΠΊΠ°ΠΊ GridU1.pas. Π‘ΠΎΡ…Ρ€Π°Π½ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ ΠΊΠ°ΠΊ GridProj.dpr.


Π’Π΅ΠΏΠ΅Ρ€ΡŒ запуститС ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ ΠΈ Π½Π°ΡΠ»Π°ΠΆΠ΄Π°ΠΉΡ‚Π΅ΡΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ Drag and Drop ΠΌΠ΅ΠΆΠ΄Ρƒ двумя Ρ‚Π°Π±Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ сСтками.

ΠœΠΎΠ΄ΡƒΠ»ΡŒ MyDBGrid

unit MyDBGrid;


interface


uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Grids, DBGrids;


type TMyDBGrid = class(TDBGrid)

private

 { Private declarations }

 FOnMouseDown: TMouseEvent;

protected

 { Protected declarations }

 procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override;

published

 { Published declarations }

 property Row;

 property OnMouseDown read FOnMouseDown write FOnMouseDown;

end;


procedure Register;


implementation


procedure TMyDBGrid.MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer);

begin

 if Assigned(FOnMouseDown) then FOnMouseDown(Self, Button, Shift, X, Y);

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

end;


procedure Register;

begin

 RegisterComponents('Samples', [TMyDBGrid]);

end;

end.

ΠœΠΎΠ΄ΡƒΠ»ΡŒ GridU1

unit GridU1;


interface


uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Db, DBTables, Grids, DBGrids, MyDBGrid, StdCtrls;


type TForm1 = class(TForm)

 MyDBGrid1: TMyDBGrid;

 Table1: TTable;

 DataSource1: TDataSource;

 Table2: TTable;

 DataSource2: TDataSource;

 MyDBGrid2: TMyDBGrid;

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

 procedure MyDBGrid1DragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);