![]() |
Datenbank: ALLE • Version: ALLE • Zugriff über: ALLE
TDBMEMO mit eigener Textanzeige
ich benötige ein TDBmemo welche nicht den in der Datenbank gespeicherten String direkt anzeigt sondern mit anhand von Benutzerinformationen verändert und erst dann anzeigt. (zb. den Text erst entschlüsseln)
Welche Funktion in der KLass TDB Memo müsste ich hier überschreiben, reicht hier eine FUnktion zum Überschreiben oder wird dies ein größeres Projekt ?
Delphi-Quellcode:
TDBMemo = class(TCustomMemo)
private FDataLink: TFieldDataLink; FAutoDisplay: Boolean; FFocused: Boolean; FMemoLoaded: Boolean; FPaintControl: TPaintControl; class constructor Create; class destructor Destroy; procedure DataChange(Sender: TObject); procedure EditingChange(Sender: TObject); function GetDataField: string; function GetDataSource: TDataSource; function GetField: TField; function GetReadOnly: Boolean; procedure SetDataField(const Value: string); procedure SetDataSource(Value: TDataSource); procedure SetReadOnly(Value: Boolean); procedure SetAutoDisplay(Value: Boolean); procedure SetFocused(Value: Boolean); procedure UpdateData(Sender: TObject); procedure WMCut(var Message: TMessage); message WM_CUT; procedure WMPaste(var Message: TMessage); message WM_PASTE; procedure WMUndo(var Message: TMessage); message WM_UNDO; procedure WMClear(var Message: TMessage); message WM_CLEAR; procedure CMEnter(var Message: TCMEnter); message CM_ENTER; procedure CMExit(var Message: TCMExit); message CM_EXIT; procedure WMLButtonDblClk(var Message: TWMLButtonDblClk); message WM_LBUTTONDBLCLK; procedure WMPaint(var Message: TWMPaint); message WM_PAINT; procedure CMGetDataLink(var Message: TMessage); message CM_GETDATALINK; procedure SetLines; protected procedure Change; override; procedure KeyDown(var Key: Word; Shift: TShiftState); override; procedure KeyPress(var Key: Char); override; procedure Loaded; override; procedure Notification(AComponent: TComponent; Operation: TOperation); override; procedure WndProc(var Message: TMessage); override; public constructor Create(AOwner: TComponent); override; destructor Destroy; override; function ExecuteAction(Action: TBasicAction): Boolean; override; procedure LoadMemo; virtual; function UpdateAction(Action: TBasicAction): Boolean; override; function UseRightToLeftAlignment: Boolean; override; property Field: TField read GetField; published property Align; property Alignment; property Anchors; [Default(True)] property AutoDisplay: Boolean read FAutoDisplay write SetAutoDisplay default True; property BevelEdges; property BevelInner; ..... end; |
AW: TDBMEMO mit eigener Textanzeige
Hallo,
einfach TMemo verwenden, oder eigene Komponente und LoadMemo und UpdateAction überschreiben. |
AW: TDBMEMO mit eigener Textanzeige
Vielleicht helfen dir auch berechnete Felder des DataSets.
|
AW: TDBMEMO mit eigener Textanzeige
wenn ich von Tmemo ableite , wie bekommme ich mit, daß sich Z.B. der Datensatzzeiger geändert hat ?
welche Events muss ich hier implementieren ? |
AW: TDBMEMO mit eigener Textanzeige
Dann würde ich dies beim Lesen aus dem Datenbankfeldes machen (Event OnGetText von TField).
|
AW: TDBMEMO mit eigener Textanzeige
kann ich Unterstützung bekommen damit meine Komponente auf Änderunegn in der Datenmenge richtig reagiert ?
unit Unit_DBmemoS; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, DB;
Delphi-Quellcode:
type
TDBmemoS = class(TMemo) private { Private-Deklarationen } Fdatasource : Tdatasource ; FdataField : String; procedure Setdatasource(const Value: Tdatasource); procedure SetdataField(const Value: String); protected { Protected-Deklarationen } public { Public-Deklarationen } published { Published-Deklarationen } property datasoure : Tdatasource read Fdatasource write Setdatasource ; property dataField : String read FdataField write SetdataField ; end; procedure Register; implementation procedure Register; begin RegisterComponents('TOOLS', [ TDBmemoS]); end; procedure TDBmemoS.SetdataField(const Value: String); begin FdataField := Value; end; procedure TDBmemoS.Setdatasource(const Value: Tdatasource); begin Fdatasource := Value; end; end. |
AW: TDBMEMO mit eigener Textanzeige
Du brauchst eigentlich kein neues TDBMemo, sondern musst nur auf den Leseevent reagieren und dort die Entschlüsselung durchführen.
|
AW: TDBMEMO mit eigener Textanzeige
wie müsste dies aussehen ? ich benötige ein paar Infos über die mögliche Implementierung
|
AW: TDBMEMO mit eigener Textanzeige
Im dataSet hast du ja Felder angelegt, diese haben jeweils einen den genannten Event OnGetText. Wenn du die Property mit einen Eventhandler belegst, dann wird dieser bei jedem Lesevorgang auf das DataSet (TDBMemo, TDBEDit, DataSet.FiledByName(), ...) aufgerufen und Du kannst dort das Ergebnis manipulieren ( z.B. entschlüsseln).
Delphi-Quellcode:
Du kannst die Methode an alle Felder hängen.
procedure <TDataModule>.FieldGetText(Sender: TField; var Text: string;
DisplayText: Boolean); begin Text := Entschluesseln( Sender.Value); end;
Delphi-Quellcode:
for i:=0 to <DataSet>.Field.Count-1 do
begin <DataSet>.Field[i].onGetText := FieldGetText; end; |
AW: TDBMEMO mit eigener Textanzeige
wäre dies dann ein class helper für TDataset ?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:07 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