Shagrouni

مكوّن شبكة شفّاف

خالد الشقروني, 26 فبراير 2001

أن تكون شفافا..طفلا ، أن تكون هناك.

أوراق دلفي

منشورة في  Delphi3000.com

 

هذا اختبار سريع عن كيفية جعل الشبكة شفافة ، بحيث تظهر  الصورة من تحتها . المثال التالي هو توليف لوحدة متكاملة ، و تتوزّع المكونات في نافذتها كالتالي:

  • ADOTable1: (يمكنك استعمال TTable إذا أردت) تعرض فيه ما أردت من بيانات ، و ليكن حيا Active .
  • DataSource1: مرتبط بالجدول المشار إليه أعلاه .
  • Image1: يغطّي حيزها كامل النافذة (Aligne = alClient) ، و اختر لها صورة نوع bmp ( ليس jpg) .
  • Panel1: و يكون كبيرا بما يكفي ليسع شبكتنا .
  • DbGrid1: و تكون مستضافة داخل اللوح Panel1 ، كما أن انحيازها يكون لأسفل (Aligne = alBottom) ، مع ترك مساحة تظهر الجانب الأعلى من لوح Panel1 . و لا تنسى بأن تربط شبكة DbGrid1 بمورد البيانات DataSource1 .

التوليف آخر المقالة ، به إجرائيتان ، الأولى لمناولة حدث OnDrawDataCell في الشبكة ، و التي تحوي أيضا التوليف الفعلي لجعل الشبكة شفّافة .

أما الإجرائية الثانية ، تتعامل مع حدث OnMouseDown الخاص بلوح Panel1 ، و التي تقوم بتحريك اللوح بحسب حركة الفأرة ، و تجعله شفافا للصورة تحته أيضا.

 


شبكة DBGrid شفّافة

 

مثال fTransparentGrid:

unit fTransparentGrid;

interface

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

type
  TForm1 = class(TForm)
    ADOTable1: TADOTable;
    DataSource1: TDataSource;
    Image1: TImage;
    Panel1: TPanel;
    DBGrid1: TDBGrid;
    procedure DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect;
      Field: TField; State: TGridDrawState);
    procedure Panel1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.DBGrid1DrawDataCell(Sender: TObject;
const Rect: TRect; Field: TField; State: TGridDrawState); var Text: string; Rct: TRect; begin Text := Field.AsString; Rct:= Rect; BitBlt(DBGrid1.Canvas.handle, Rct.left, Rct.top, Rct.right - Rct.left, Rct.bottom - Rct.top, Image1.Canvas.Handle, Rct.left + DBGrid1.Left + Panel1.Left, Rct.Top + DBGrid1.Top + Panel1.Top, SRCCOPY); SetBkModE(DBGrid1.Canvas.Handle, TRANSPARENT); DBGrid1.Canvas.Font.Style := [fsBold]; DrawtextEx(DBGrid1.Canvas.Handle, PChar(Text), Length(Text), Rct, DT_WORDBREAK, nil); end; procedure TForm1.Panel1MouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin ReleaseCapture; Panel1.Perform(WM_SYSCOMMAND, $F012, SC_MOVE); Application.ProcessMessages ; BitBlt(GetDc(Panel1.Handle), 0, 0, Panel1.Width, Panel1.Height, Image1.Canvas.Handle , Panel1.Left, Panel1.Top, SRCAND); DBGrid1.refresh; end; end.

 

 

Shagrouni 2001 Khaled Shagrouni khaled@shagrouni.com