Avatar billede morten_s Nybegynder
10. juni 2001 - 14:35 Der er 10 kommentarer og
1 løsning

Læse cellerne i et DBGrid

Jeg har følgende kode

var
  CurrentID, StartID : String;
  CurrentRow, CurrentCol : Integer;
  NrVisibleRow : Integer;
  CellValue : String;
begin
  CurrentID := QueryAlarm.FieldByName(\'ID\').AsString;
  CurrentCol := TStringGrid(DBGridAlarm).Col;
  CurrentRow := TStringGrid(DBGridAlarm).Row;
  NrVisibleRow := TStringGrid(DBGridAlarm).VisibleRowCount;
  CellValue := TStringGrid(DBGridAlarm).Cells[1,1];
  Label14.Caption := IntToStr(CurrentCol);
  Label15.Caption := IntToStr(CurrentRow);
  Label16.Caption := IntToStr(NrVisibleRow);
  Label17.Caption := CellValue;
end;


CellValue := TStringGrid(DBGridAlarm).Cells[1,1];
går galt under runtime med Acces Violation, hvorfor er det ikke muligt at læse den enkelte værdi i et DBGrid ?

Eller endnu bedre hvem har en løsning på problemet ?

Avatar billede morten_s Nybegynder
11. juni 2001 - 12:53 #1
Når værdien af cellen er læst skal hele rækken i DBGridet skifte farve til rød hvis det er et negativt tal.

Er der slet ingen som har en god ide ?
Avatar billede silden Nybegynder
11. juni 2001 - 14:49 #2
Properties  [DBGrid3.DefaultDrawing:=False]

Du skal teste på dit felt i DB!(BookTbBetalt.value=true)


procedure TForm1.DBGrid3DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
Var Bfarve: Tcolor;
    Str : String;
    OldFont : TFont;
begin
  with (Sender as TDBGrid).Canvas do begin
      OldFont:=Font;
      if gdFocused in State then begin
        Bfarve:=clNavy;
        Font.Color:=clWhite;
      end else begin
      if BookTbBetalt.value=true then  Bfarve:=$00C5FD79 else
        Bfarve:=$00C7EEF3;
        Font.Color:=clBlack;
      end;
      DBGrid3.Canvas.Brush.Color:=Bfarve;
      DBGrid3.Canvas.Fillrect(Rect);
      DBGrid3.Canvas.Textout(Rect.Left+5,Rect.Top+2,Str);
      Font:=OldFont;
      DBGrid3.DefaultDrawDataCell(Rect,Column.Field,State);
  end;
end;

/Søren
Avatar billede morten_s Nybegynder
11. juni 2001 - 18:18 #3
Hvordan skal BookTbBetalt erklæres ?
Avatar billede morten_s Nybegynder
11. juni 2001 - 20:19 #4
BookTBetalt skal i mit tilfælde erklæres på følgende vis

if DataSource.DataSet.FieldByName(\'Id\').AsInteger > 0 then....

Mange tak for hjælpen
Avatar billede silden Nybegynder
11. juni 2001 - 20:42 #5
Det gik lidt hurtigt!

Jeg håber det er DBGrid du bruger til at vise dine data.

Hvis det er StringGrid er det lidt anderledes

Hvis du har problemer med ovenstående så kommenter

/Søren
Avatar billede morten_s Nybegynder
11. juni 2001 - 20:48 #6
Hej Søren jeg har faktisk lidt problemer med det

Jeg har nu følgende kode

begin
  with (Sender as TDBGrid).Canvas do begin
      OldFont:=Font;
      if gdFocused in State then begin
        Bfarve:=clNavy;
        Font.Color:=clWhite;
      end else begin
      if DataSourceAl.DataSet.FieldByName(\'AlType\').AsInteger = 12 then
      begin
        BFarve := clWhite;
        Font.Color:=clRed;
      end
      else
        Bfarve:=clWhite;
        Font.Color:=clBlack;
      end;
      DBGridAlarm.Canvas.Brush.Color:=Bfarve;
      DBGridAlarm.Canvas.Fillrect(Rect);
      DBGridAlarm.Canvas.Textout(Rect.Left+5,Rect.Top+2,Str);
      Font:=OldFont;
      DBGridAlarm.DefaultDrawDataCell(Rect,Column.Field,State);
  end;


Og som du kan se er det tekst farven jeg vil skifte istedet for baggrundsfarven, det virker imidlertid ikke ???

Mit problem nr 2:
Når jeg holder kontrol tasten nede vil jeg gerne kunne mærke nogle felter op med musen, det har jeg kunnet tidligere med en blå række hele vejen igennem på dem jeg trykker på, nu er det kun den sidste række som jeg trykker på der bliver blå, og kun det første felt i rækken ???

Håber du har svar på disse 2 ting også

mvh
Morten
Avatar billede morten_s Nybegynder
11. juni 2001 - 20:52 #7
Mit spørgsmål 1. kan du se bort fra der mangler et begin efter else (flovt)

men spg. 2 er stadig aktuelt
Avatar billede silden Nybegynder
11. juni 2001 - 21:21 #8
Det er lidt svært når jeg ikke kan se din DBGridAlarm  Properties [Options]
jeg mener det er der problemet er

/Søren
Avatar billede morten_s Nybegynder
11. juni 2001 - 21:27 #9
alt er sat til true bortset fra dgEditing og dgAlwaysShowEditor.

Men jeg har brøvet og sætte et breakpoint i
if gdFocused in State then
    begin
      Bfarve:=clNavy;
      Font.Color:=clWhite;
    end
Og jeg kan se at den aldrig kommer ind i dette kode ?
Avatar billede morten_s Nybegynder
11. juni 2001 - 21:31 #10
Er du sikker på at nedenstående kode er O.K. ?

if gdFocused in State then
Avatar billede morten_s Nybegynder
11. juni 2001 - 21:36 #11
Koden:
if gdSelected in State then

Giver den sidst mørkede række = blå,
når Ctrl tasten  holdes nede samtidigt med at der klikkes med musen ?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester