![]() |
im sql-query werte in rot darstellen
Liste der Anhänge anzeigen (Anzahl: 1)
ich hole aus meiner dbisam-tabelle "stockfabric" unter anderem Vorratszahlen und möchte alle Werte bis 100 (des field "stock") in rot in meiner applikation (dbisamgrid1 mit dbisamquery1) darstellen, wie binde ich dies ein?
Hier mein Code:
Delphi-Quellcode:
anbei noch ein bild der dbisam-tabelle
procedure TForm3.ToolButton3Click(Sender: TObject);
begin DBISAMQuery1.SQL.Clear; DBISAMQuery1.SQL.Add('select code as "Código",desc as "Descrição",maq as "Maquina destinada",stock as "Quant.Stock",date as "Último movimento" from stockfabric,fabric where nr = 1 and stockfabric.code=fabric.code order by code'); DBISAMQuery1.ExecSQL; DBISAMQuery1.Edit; dbnavigator1.Visible := false; form3.Caption := 'Stock Agulhas'; end; |
Re: im sql-query werte in rot darstellen
Implementiere .OnDrawColumnCell
|
Re: im sql-query werte in rot darstellen
habe es so jetzt ergänzt, funktioniert aber noch nicht:
Delphi-Quellcode:
field "stock" ist vom data-type float
procedure TForm3.DBISAMDBGrid1DrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); begin if ('stock' <= floattostr(100)) then begin canvas.Font.Style := canvas.Font.Style + [fsBold]; canvas.Font.Color := clred; end; end; |
Re: im sql-query werte in rot darstellen
ich habe den Code jetzt so geändert, geht aber noch nicht...
Delphi-Quellcode:
procedure TForm3.DBISAMDBGrid1DrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); begin DBISAMQuery1.SQL.Clear; DBISAMQuery1.SQL.Add('select * from stockfabric'); DBISAMQuery1.ExecSQL; if dbisamquery1.FieldByName('stock').Asfloat <= 100 then begin dbisamdbgrid1.canvas.Font.Style := canvas.Font.Style + [fsBold]; dbisamdbgrid1.canvas.Font.Color := clred; end; dbisamdbgrid1.Canvas.FillRect(Rect); dbisamdbgrid1.DrawTextBiDiModeFlags(dbisamdbgrid1.Canvas.Handle); end; |
Re: im sql-query werte in rot darstellen
Noch ein Denkanstaß
Delphi-Quellcode:
var
can: TCanvas; begin can := (sender as TDBGrid).Canvas; if column.Field.FieldName = 'stock' then begin ... end; end; |
Re: im sql-query werte in rot darstellen
mein code sieht momentan so aus, geht aber noch nicht, angezeigte Zahlen im String "laufen durch".
Delphi-Quellcode:
mkinzler, wo soll ich deinen Denkanstoss einbauen?
procedure TForm3.DBISAMDBGrid1DrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); begin DBISAMQuery1.SQL.text := 'select * from stockfabric'; DBISAMQuery1.Open; if dbisamquery1.FieldByName('stock').Asfloat = 100 then begin dbisamdbgrid1.Font.Style := canvas.Font.Style + [fsBold]; dbisamdbgrid1.Font.Color := clred; end else dbisamDBGrid1.Font.Color := clBlack; dbisamdbgrid1.Canvas.FillRect(Rect); dbisamdbgrid1.DrawTextBiDiModeFlags(dbisamdbgrid1.Canvas.Handle); end; |
Re: im sql-query werte in rot darstellen
Das Event OnDrawColumnCell wird während des Zeichnen des Grids gefeuert. Da also nochmal eine Query zu machen, macht a) keinen Sinn und b) die Anwendung unendlich langsam.
Delphi-Quellcode:
Das hier kann gar nicht funtionieren da 'stock' immer ungleich '100' ist...
if ('stock' <= floattostr(100)) then
Den Denkanstoß musst du in das OnDrawColumnCell einbauen. Das Prinzip ist recht simpel. OnDrawColumnCell wird beim Zeichnen jeder Zelle aufgerufen. Du musst also erstmal prüfen ob die Spalte der Zelle, die gerade gezeichnet wird, deine 'Stock' Spalte ist. Wenn ja und der Wert des Feldes <= 100 dann setzt du die Farben des Canvas entsprechend deinen Wünschen also rot. Wenn nicht dann setzt du die Farbe wieder auf schwarz. |
Re: im sql-query werte in rot darstellen
die daten werden nun wieder korrekt im dbisamgrid angezeigt, die zahlen kleiner 100 sind jedoch nicht in rot...
Delphi-Quellcode:
procedure TForm3.DBISAMDBGrid1DrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); var can: TCanvas; begin can := (sender as TDBisamDBGrid).Canvas; if column.Field.FieldName = 'stock' then begin DBISAMQuery1.SQL.text := 'select * from stockfabric'; DBISAMQuery1.Open; if dbisamquery1.FieldByName('stock').Asfloat < 100 then begin dbisamdbgrid1.Font.Style := canvas.Font.Style + [fsBold]; dbisamdbgrid1.Font.Color := clred; end else dbisamDBGrid1.Font.Color := clBlack; dbisamdbgrid1.Canvas.FillRect(Rect); dbisamdbgrid1.DrawTextBiDiModeFlags(dbisamdbgrid1.Canvas.Handle); end; end; |
Re: im sql-query werte in rot darstellen
Bevor hier das ganz zum 10000 mal wieder erzählt wird guck mal in der DP Suche
![]() |
Re: im sql-query werte in rot darstellen
Ok, dann erklär ich erstmal wieso die nicht rot sind ;)
Der erste Datensatz den deine Query zurückgibt hat ein Stock > 100. So einfach ist das. Du fragst jedesmal neu die Datenbank an und schaust immer nur den ersten Datensatz an. Mit anderen Worten: Du prüfst jedesmal den gleichen Wert gegen 100. Und wie schon im letzten Beitrag geschrieben: Im OnDrawColumnCell KEINE Query. Das macht das Programm nur extrem langsam. Die Lösung findest du mit dem Link im letzten Beitrag ;) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:54 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz