Большое спасибо всем за отзывы и подсказки. Задача почти решена
| Код | unit Unit1;
interface
uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Grids, StdCtrls, ExtCtrls, RySwapStream, DB, ADODB;
type
TZadanie = record Image : [color=red]???[/color] V1, V2 ,V3 , V4 ,V5 , Key: String[25]; end;
TForm1 = class(TForm) RadioGroup1: TRadioGroup; Label1: TLabel; Label2: TLabel; Edit1: TEdit; Button1: TButton; Panel1: TPanel; Button3: TButton; Grid: TDrawGrid; Label3: TLabel; ADOConnection1: TADOConnection; ADOQuery1: TADOQuery; DataSource1: TDataSource; DataSource2: TDataSource; ADOQuery2: TADOQuery; procedure RadioGroup1Click(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure GridDrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); private FRow: Integer; FGridEnabled: Boolean; FStreamKind: Byte; Stream : TStream; FStreamActive: Boolean; FZadanie: TZadanie; procedure SetGridEnabled(const Value: Boolean); procedure SetStreamActive(const Value: Boolean); private property StreamActive : Boolean read FStreamActive write SetStreamActive; property GridEnabled : Boolean read FGridEnabled write SetGridEnabled; public constructor Create(AOwner: TComponent); override; destructor Destroy; override; end;
var Form1: TForm1;
implementation
{$R *.DFM}
constructor TForm1.Create(AOwner: TComponent); begin inherited; begin try ADOQuery1.SQL.Clear; ADOQuery1.SQL.Add('SELECT * FROM DB1'); ADOQuery1.Active:=True; ADOQuery2.SQL.Clear; ADOQuery2.SQL.Add('SELECT * FROM DB1'); ADOQuery2.Active:=True; except on e:Exception do end; end; FRow := -1;
end;
destructor TForm1.Destroy; begin StreamActive := False; inherited; end;
procedure TForm1.RadioGroup1Click(Sender: TObject);
procedure StreamKind(const Value: Byte); begin if Value = 1 then Edit1.Color := clWindow else Edit1.Color := clBtnFace; Edit1.Enabled := Value = 1; Button1.Enabled := Value > 0; Button3.Enabled := False; FStreamKind := Value; end;
begin StreamActive := False; StreamKind(RadioGroup1.ItemIndex); end;
procedure TForm1.Button1Click(Sender: TObject); begin StreamActive := True; end;
procedure TForm1.Button3Click(Sender: TObject); begin GridEnabled := True; end;
const ACount = 3;
procedure TForm1.GridDrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); const _FlagsText: Longint = (DT_LEFT or DT_NOCLIP or DT_VCENTER or DT_SINGLELINE or DT_END_ELLIPSIS); var
Str: String; begin if not GridEnabled then Exit else if (ARow < 0) or (ARow > ACount) then Exit;
if FRow <> ARow then begin FRow := ARow; Stream.Position := ARow * SizeOf(TZadanie); Stream.Read(FZadanie, SizeOf(TZadanie)); end;
case ACol of 1: Str := FZadanie.Key; 2: Str := FZadanie.V1; 3: Str := FZadanie.V2; 4: Str := FZadanie.V3; 5: Str := FZadanie.V4; 6: Str := FZadanie.V5; 7: Str := FZadanie.Image; else Str := ''; end;
with Grid.Canvas do begin if (ARow <> 0) and (ACol <> 0) then begin if (ARow mod 2) = 0 then Brush.Color := clInfoBk else Brush.Color := clWhite; FillRect(Rect); Font.Color := clBlack; end; Windows.DrawText(Handle, PChar(Str), Length(Str), Rect, _FlagsText); end end;
procedure TForm1.SetStreamActive(const Value: Boolean); var FZ: TZadanie; begin if FStreamActive = Value then Exit;
if Value then begin case FStreamKind of 1: begin if Edit1.Text = '' then Edit1.Text := 'Temp.dat'; Stream := TFileStream.Create(Edit1.Text, fmCreate); end; 2: Stream := TMemoryStream.Create; 3: Stream := TRySwapStream.Create; else Exit; end;
FZ.Key := 'Ключ'; FZ.Image := 'Вопрос'; FZ.Variant1 := 'Вариант 1'; FZ.Variant2 := 'Вариант 2'; FZ.Variant3 := 'Вариант 3'; FZ.Variant4 := 'Вариант 4'; FZ.Variant5 := 'Вариант 5'; Stream.Write(FZ, SizeOf(TZadanie));
{выводим первую строку}
begin ADOQuery1.First; ADOQuery1.Next; FZ.Key := (ADOQuery1.FieldByName('Key').AsString); FZ.Image := [color=red]????[/color]; FZ.Variant1 := (ADOQuery1.FieldByName('V1').AsString); FZ.Variant2 := (ADOQuery1.FieldByName('V2').AsString); FZ.Variant3 := (ADOQuery1.FieldByName('V3').AsString); FZ.Variant4 := (ADOQuery1.FieldByName('V4').AsString); FZ.Variant5 := (ADOQuery1.FieldByName('V5').AsString); Stream.Write(FZ, SizeOf(TZadanie));
end;
Button1.Enabled := False; Button3.Enabled := True; end else begin GridEnabled := False; Stream.Free; end;
FStreamActive := Value; end;
procedure TForm1.SetGridEnabled(const Value: Boolean); begin if FGridEnabled = Value then Exit; if Value then begin Grid.RowCount := ACount; Grid.Enabled := True; Grid.Color := clWindow; Button3.Enabled := False; end else begin Grid.RowCount := 2; Grid.Enabled := False; Grid.Color := clBtnFace; end;
FGridEnabled := Value; end;
end.
|
Подскажите пожалуйста как теперь туда запихать Image. Из БД |