Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   TDBMEMO mit eigener Textanzeige (https://www.delphipraxis.net/195762-tdbmemo-mit-eigener-textanzeige.html)

bernhard_LA 23. Mär 2018 06:18

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;

hoika 23. Mär 2018 06:41

AW: TDBMEMO mit eigener Textanzeige
 
Hallo,
einfach TMemo verwenden, oder eigene Komponente und LoadMemo und UpdateAction überschreiben.

TigerLilly 23. Mär 2018 06:54

AW: TDBMEMO mit eigener Textanzeige
 
Vielleicht helfen dir auch berechnete Felder des DataSets.

bernhard_LA 23. Mär 2018 06:57

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 ?

mkinzler 23. Mär 2018 07:19

AW: TDBMEMO mit eigener Textanzeige
 
Dann würde ich dies beim Lesen aus dem Datenbankfeldes machen (Event OnGetText von TField).

bernhard_LA 23. Mär 2018 08:08

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.

mkinzler 23. Mär 2018 08:12

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.

bernhard_LA 23. Mär 2018 08:18

AW: TDBMEMO mit eigener Textanzeige
 
wie müsste dies aussehen ? ich benötige ein paar Infos über die mögliche Implementierung

mkinzler 23. Mär 2018 08:24

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:
procedure <TDataModule>.FieldGetText(Sender: TField; var Text: string;
  DisplayText: Boolean);
begin
  Text := Entschluesseln( Sender.Value);
end;
Du kannst die Methode an alle Felder hängen.

Delphi-Quellcode:
for i:=0 to <DataSet>.Field.Count-1 do
begin
  <DataSet>.Field[i].onGetText := FieldGetText;
end;

bernhard_LA 23. Mär 2018 09:26

AW: TDBMEMO mit eigener Textanzeige
 
wäre dies dann ein class helper für TDataset ?


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:36 Uhr.
Seite 1 von 2  1 2      

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