AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Einfärben von DBCtrlGrid-Zeilen aufgrund von Inhalten
Thema durchsuchen
Ansicht
Themen-Optionen

Einfärben von DBCtrlGrid-Zeilen aufgrund von Inhalten

Ein Thema von Schiller · begonnen am 17. Jun 2005 · letzter Beitrag vom 22. Jun 2005
Antwort Antwort
Seite 1 von 2  1 2      
Schiller

Registriert seit: 16. Jun 2005
Ort: Weimar
15 Beiträge
 
Delphi 7 Professional
 
#1

Einfärben von DBCtrlGrid-Zeilen aufgrund von Inhalten

  Alt 17. Jun 2005, 10:11
Datenbank: Paradox • Version: 7 • Zugriff über: BDE
Hallo,
mein Erfolg mit meiner letzten Frage macht mir Mut, eine weitere, mir schon lange auf der Seele liegende Frage mit Eurer Hilfe zu klären:
DBGrid-Komponente lässt viele Wünsche offen; insbesondere kann man Controls nicht gut unterbringen.
Daher will ich alternativ DBCtrlGrid einsetzen, was aber auch leider nicht alles unterstützt (ganz normale Schalter z.B. oder DBLookUpCombos...
Jetzt möchte ich Zeilen einfärben, wenn ein Datensatz einen bestimmten Wert enthält. Es gibt aber nur die Möglichkeit, mit der Eigenschaft "SelectedColor" die Farbe des aktuellen Datensatzes zu setzen. Irre ich mich? Wie kann ich vorgehen? Gibt es eine handhabbare Alternative (eine Gridkomponente, die mehr kann, aber bei der nicht gleich 10000e von Programmzeilen eingebunden werden müssen, die auch gepflegt werden wollen, ich habe mit einigen Gridherstellern schon einschlägige Erfahrung)?
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: Einfärben von DBCtrlGrid-Zeilen aufgrund von Inhalten

  Alt 17. Jun 2005, 10:22
Zitat von Schiller:
Jetzt möchte ich Zeilen einfärben, wenn ein Datensatz einen bestimmten Wert enthält.
Delphi-Quellcode:
procedure TMainForm.DBGridDrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
  if Table.FieldByName('KONTOSTAND').AsInteger < 0
    then DBGrid.Canvas.Brush.Color := clRed
    else DBGrid.Canvas.Brush.Color := clWhite;
  DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;
marabu
  Mit Zitat antworten Zitat
Schiller

Registriert seit: 16. Jun 2005
Ort: Weimar
15 Beiträge
 
Delphi 7 Professional
 
#3

Re: Einfärben von DBCtrlGrid-Zeilen aufgrund von Inhalten

  Alt 17. Jun 2005, 11:40
So ungefähr könnte das gehen. Ich arbeite ja aus den genannten Gründen jetzt mit DBCtrlGrid statt mit DBGrid. Dort gibt es die Routine PaintPanel, die die Funktion von deiner DefaultDrawColumnCell übernehmen könnte. Die hat jedoch zum Aufruf keine ausreichende Sichtbarkeit. Ich muss also erst eine neue, von DBCtrlGrid geerbte Komponente schaffen, in der ich die Sichtbarkeit von PaintPanel von Protected auf Public setze. Dann müsste es gehen. Leider stürzt mir derzeit bei der Zuweisung einer Datenquelle zur neuen Komponente Delphi 7 ab. Da muss ich jetzt weiter forschen. Einen einfacheren Weg gibt es wohl nicht?
  Mit Zitat antworten Zitat
Schiller

Registriert seit: 16. Jun 2005
Ort: Weimar
15 Beiträge
 
Delphi 7 Professional
 
#4

Re: Einfärben von DBCtrlGrid-Zeilen aufgrund von Inhalten

  Alt 21. Jun 2005, 10:26
über die paintPanel-Methode von TDBCtrlGrid habe ich keinen Erfolg. Zunächst klappt das ja auch mit allen Datensätzen: diese werden entsprechend dem Inhalt eingefärbt. Leider wird dann aber der selektierte Datensatz mit der Farbe des letzten Datensatzes gefärbt, ohne dass ich darauf Einfluss nehmen könnte. Die Routine wird zu verschiedenen Zeitpunkten aufgerufen, zum Schluss aber zeichnet "irgendjemand" nochmal mit der offenbar zuletzt verwendeten Farbe. Ich komme da einfach nicht ran!
  Mit Zitat antworten Zitat
uschi
(Gast)

n/a Beiträge
 
#5

Re: Einfärben von DBCtrlGrid-Zeilen aufgrund von Inhalten

  Alt 21. Jun 2005, 10:27
wenns was kosten darf
würde ich dir devexpress ans herz legen. alles andere ist unwirtschaftlich.
  Mit Zitat antworten Zitat
Schiller

Registriert seit: 16. Jun 2005
Ort: Weimar
15 Beiträge
 
Delphi 7 Professional
 
#6

Re: Einfärben von DBCtrlGrid-Zeilen aufgrund von Inhalten

  Alt 21. Jun 2005, 12:50
natürlich sollte das möglichst nichts kosten...
zudem habe ich keine guten Erfahrungen mit derartigen Komponenten, weil die Einarbeitung in keinem Verhältnis zum Erfolg steht.
Was kostets' denn und wo gibts das?
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#7

Re: Einfärben von DBCtrlGrid-Zeilen aufgrund von Inhalten

  Alt 21. Jun 2005, 13:05
Zitat von Schiller:
...habe ich keine guten Erfahrungen mit derartigen Komponenten, weil die Einarbeitung in keinem Verhältnis zum Erfolg steht...
So ist es. Siehe momentanes Problem. Verwende ein normales Stringgrid und fertig. Dir bleiben dann sämtliche Möglichkeiten erhalten ohne irgendwelche Kompromisse eingehen zu müssen, oder bei einer exotischen Komponente rauszufinden, wie was geht. 8)
Gruß
Hansa
  Mit Zitat antworten Zitat
uschi
(Gast)

n/a Beiträge
 
#8

Re: Einfärben von DBCtrlGrid-Zeilen aufgrund von Inhalten

  Alt 21. Jun 2005, 17:12
kosten sind natürlich unterschiedlich.

und erzähl mir nix vom pferd. die komponenten kauft man ja nicht nur um bissl bunt rumzumalen.

er hat oben auch controls im grid gesprochen.

http://devexpress.com/Downloads/VCL/...GridSuite5.zip

hier ist ne demo ~7MB

kannst du mal reinschauen obs sich nicht doch lohnt.



trotzdem vielen dank hansa für dein unqualifiziertes kommentar.
  Mit Zitat antworten Zitat
WoGe

Registriert seit: 16. Jun 2005
Ort: Kelkheim
178 Beiträge
 
Delphi 10.3 Rio
 
#9

Re: Einfärben von DBCtrlGrid-Zeilen aufgrund von Inhalten

  Alt 21. Jun 2005, 17:47
Ich weiss nicht warum Ihr Euch alle so aufregt

so gehts doch wunderbar

Delphi-Quellcode:
procedure TRechnung.DBCtrlGrid1PaintPanel(DBCtrlGrid: TDBCtrlGrid;
  Index: Integer);
begin
  if DBCtrlGrid.DataSource.DataSet.FieldByName('zeilenNo').AsInteger = 3 then
         DBCtrlGrid.Color := clred else DBCtrlGrid.Color := clBtnFace;
end;

end.
das färbt das 4te !! Panel zuverlässig rot

mfg
wo
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#10

Re: Einfärben von DBCtrlGrid-Zeilen aufgrund von Inhalten

  Alt 21. Jun 2005, 18:11
Zitat von uschi:
...trotzdem vielen dank hansa für dein unqualifiziertes kommentar.
Nun gut, aber so kann ich das nicht stehen lassen. Du bist ja anscheinend qualifizierter. 8) Dann dürfte es ein leichtes sein, mir folgendes zu erklären :

Anforderungen :

1.

Bei Eingabe von Daten 1-3 Zeilen der Bezeichnung, Adresse usw. anzeigen. Also in Abhängigkeit von den bestückten DB-Feldern. Ist nur eines da, dann Anzeige : 1 Zeile. Sind 3 da und das 1. und 3. haben einen Wert, dann muß die 2. Zeile angezeigt werden, obwohl sie leer ist. Es geht jeweils um einen DS (Datensatz) und zwar gemischt 1-3 Zeilen !!

2.

Zahlen-Formatierung : rechtsbündig anzeigen / eingeben mit definierten Nachkommastellen bei reals.

3. Kennzeichnung im Grid pro Zelle. D.h. in Spalte 4 könnte "Storno" stehen aber nur kleiner Kasten innerhalb der Zelle und farblich mit weiß auf rot. In Spalte 1 könnte stehen : "Scan" Das soll dann weiß auf schwarz klein unten links in der Zelle stehen.

Habe das mit dem vorhandenen StringGrid gemacht. Einfach das OndrawCell umgebaut. Ansonsten sieht die Realität so aus : 2 Wochen suchen nach geigneten Komonenten/Installation, keine Testversion usw. 2 Wochen testen. Bei Fragen keine Antwort, bzw. langsam.

Umstieg auf Stringgrid, Programm umgebaut usw. : 1 Woche. Die DB-Komponenten sind IMHO einfach zu schwach und unflexibel, egal ob von Borland oder sonst einem.
Gruß
Hansa
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:40 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz