![]() |
Re: Kollison OnDrawColumnCell und Anzeige in DBText
ich kanns dir ja mal zuschicken :-D.
ich verwende delphi 7. aber was is pm? lg claudia |
Re: Kollison OnDrawColumnCell und Anzeige in DBText
hallo nochmal! :zwinker:
also dein programm-problem hat mir keine ruhe gelassen, deshalb hab ich deine version nachgebaut. und siehe da, die dbeditfelder werden ebenfalls beim datensatzwechsel aktualisiert. nur ist mir aufgefallen, dass die anzeie flackert. das rührt daher, da du im OnDrawEvent des grids die zelleninhalte änderst und nicht die farbe vorgibst, in welcher sie gezeichnet werden sollen. ich hängt dir meinen programmcode an - im OnShowEvent der form stehen die verknüpfungen zwischen der datasource und den dbeditfeldern im langtext - nur zur demonstration, da ich dort den fehler vermute.
Delphi-Quellcode:
pm = private message
unit Mainprog;
interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, DBCtrls, Grids, DBGrids, ExtCtrls, Db, DBTables, Menus, StdCtrls, Mask, Buttons; type TMainDlg = class(TForm) MainMenu1: TMainMenu; Programm1: TMenuItem; About1: TMenuItem; Beenden1: TMenuItem; Tabelle1: TMenuItem; oeffnen: TMenuItem; schliessen1: TMenuItem; N1: TMenuItem; anlegen1: TMenuItem; aTable: TTable; DataSource1: TDataSource; Panel1: TPanel; Panel3: TPanel; Panel4: TPanel; Panel2: TPanel; DBGrid1: TDBGrid; Label2: TLabel; DBEdit2: TDBEdit; DBNavigator1: TDBNavigator; Label3: TLabel; DBEdit3: TDBEdit; Label4: TLabel; OpenBtn: TSpeedButton; CloseBtn: TSpeedButton; BitBtn1: TBitBtn; procedure Beenden1Click(Sender: TObject); procedure anlegen1Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure FormShow(Sender: TObject); procedure OpenBtnClick(Sender: TObject); procedure oeffnenClick(Sender: TObject); procedure CloseBtnClick(Sender: TObject); procedure schliessen1Click(Sender: TObject); procedure DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); private { Private-Deklarationen } aDatenDir: String; public { Public-Deklarationen } end; var MainDlg: TMainDlg; implementation {$R *.DFM} procedure TMainDlg.Beenden1Click(Sender: TObject); begin close; end; procedure TMainDlg.anlegen1Click(Sender: TObject); var tmpTable: TTable; TextToShow: String; begin tmpTable:= TTable.Create(self); try with tmpTable do begin DatabaseName:= aDatenDir + 'Daten'; Tablename:= 'TestTable.DB' end; tmpTable.Close; if tmpTable.Exists then begin TextToShow:= Format('Die Tabelle %s ist bereits angelegt' + #13#10 + 'Soll sie überschrieben werden?',[tmpTable.Tablename]); if MessageDlg(TextToShow,mtConfirmation,[mbOk,mbCancel],0)= mrCancel then Exit; end; with tmpTable do begin with FieldDefs do begin Clear; Add('ID',ftAutoInc,0,true); Add('Codec',ftString,10,true); Add('Bemerkung',ftString,30,false) end; with IndexDefs do begin Clear; Add('','ID',[ixPrimary, ixUnique]) end; CreateTable; end; ShowMessage('die Tabelle wurde erfolgreich angelegt'); finally tmpTable.Close; tmpTable.Free; end; end; procedure TMainDlg.FormCreate(Sender: TObject); begin aDatenDir:= ExtractFilePath(ParamStr(0)); Label4.Caption:= aDatenDir; end; procedure TMainDlg.FormClose(Sender: TObject; var Action: TCloseAction); begin aTable.Close end; procedure TMainDlg.FormShow(Sender: TObject); begin DBEdit2.DataSource:= DataSource1; DBEdit2.DataField:= 'Codec'; DBEdit3.DataSource:= DataSource1; DBEdit3.DataField:= 'Bemerkung' end; procedure TMainDlg.OpenBtnClick(Sender: TObject); begin if not aTable.Active then aTable.Open end; procedure TMainDlg.oeffnenClick(Sender: TObject); begin if not aTable.Active then aTable.Open end; procedure TMainDlg.CloseBtnClick(Sender: TObject); begin aTable.Close end; procedure TMainDlg.schliessen1Click(Sender: TObject); begin aTable.Close end; procedure TMainDlg.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); var aValue: string; begin if (gdSelected in State) or (gdFocused in State) then exit; if Column.Index = 1 then begin {nummer der spalte im dbgrid} aValue:= Column.Field.asString; {suchbegriff auslesen} if aValue = 'DivX' then begin DBGrid1.Canvas.Font.Color := clYellow; DBGrid1.Canvas.Brush.Color := clRed end else if aValue = 'SVCD' then begin DBGrid1.Canvas.Font.Color := clYellow; DBGrid1.Canvas.Brush.Color := clNavy end else if aValue = 'VCD' then begin DBGrid1.Canvas.Font.Color := clWhite; DBGrid1.Canvas.Brush.Color := clPurple end else begin DBGrid1.Canvas.Font.Color := clBlack; DBGrid1.Canvas.Brush.Color := clwhite end; end; DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State); end; end. einfach auf meinen nick klicken, 'private nachricht' auswählen und dein projekt gezippt als attachment anhängen. (die exe & dcu bitte nicht mitschicken) ich hab zwar nur delphi 4, aber solange du keine exotischen befehle und/oder komponenten verwendest, sollte ich mit deiner version arbeiten können ;) lg, stefan |
Re: Kollison OnDrawColumnCell und Anzeige in DBText
:hello:
SUUUUUUUUUUUUUUUUUPER! es funktioniert... ich danke dir... spitze! ich zweifel zwar jetzt an meinem verstand, weil sooo schwer is das ja gar nicht :gruebel: aber ich bin froh, dass es endlich klappt. nochmal ganz vielen dank!!! |
Re: Kollison OnDrawColumnCell und Anzeige in DBText
hallo claudia!
freut mich echt, dass es dir doch noch gelungen ist, dein dbgrid so hinzukriegen, wie du es haben wolltest ;) jetzt brauchst nur noch zu sagen, dass meine vermutung mit der datasource bei den dbedit-feldern richtig war, dann freut es mich umso mehr :mrgreen: und falls doch nicht, wo lag dann das problem versteckt? lg, stefan |
Re: Kollison OnDrawColumnCell und Anzeige in DBText
hallo!
also der datasource in den dbtext-feldern war richtig... daran lag es nicht... ich hab mir deinen quellcode genommen, ihn ein wenig geändert und dann ging es ganz so wie es gewünscht war... also nochmal eine ganz großes DANKE :thuimb: |
Re: Kollison OnDrawColumnCell und Anzeige in DBText
(An dieser Stelle mal ein grosses Lob an die Betreiber dieses Forums und an dejenigen, die sich hier aktiv mit hilfreichen Antworten beteiligen.
Gerade wollte ich in einem DBGrid dafür sorgen, dass in bestimmten Zellen in Abhängigkeit von bestimmten Werten diese Zellen mit unterschiedlichen Farben unterlegt werden. Da hab' ich "OnDrawColumnCell" bei google eingegeben, bin gleich auf diesen Thread hier vom März diesen Jahres gestossen und hab' hinterher nicht mal mehr eine halbe Minute gebraucht, um mein Problem zu lösen. Also schneller kann einem wirklich nicht mehr geholfen werden ... :-D 8) :thumb: Ein tolles 'Nachschlage-Werk' ist das hier ... :zwinker: ) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:56 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