![]() |
Untereigenschaften leider grün
Hallo alle,
ich bastle gerade (mit D7 Prof) an DB-Komponenten { Das Konzept: Die Kompos sollen Daten aus einer IB-Datenbank anzeigen und bearbeiten, und zwar unabhängig vom aktuellen Datensatz der DataSets. Dazu werden ein paar Eigenschaften eingestellt und dann automatisch interne dynamische SQL-Statements zum Abrufen oder Ändern erzeugt ausgeführt. Bei Änderungen wird das angebundene Dataset geschlossen, neu geöffnet und der vorherige Datansatz wieder lokalisiert. Man kann in den Eigenschaften immer auch einen "ID-Wert" definieren (sofern die betreffende Tabelle über ein ID-Feld verfügt), woraufhin dann immer DER entsprechende Datensatz verwendet wird. Im Ergebnis hat man Komponenten, die sich aus einer Datenbank immer automatisch auf "Ihre Daten" beziehen, ohne dass dies Auswirkungen auf andere Komponenten hat, es wird durch sie keine Datensatzposition verändert, und wenn doch (z.B. durch ein externes DBGrid), zeigen die Kompos immer weiter "Ihre" Daten an (bis es mal Änderungen an "Ihrem" Datensatz gibt). Änderungen werden sofort gespeichert und aktualisiert, einen dsEdit-Modus gibt es hier praktisch nicht mehr. Es gibt auch eine Kompo, die mehrere Datensätze anzeigt (ähnlich einen BDGrid) und z.B. automatisch Verschiebungen der Positionen durch Drag&Drop ermöglicht. Grundsätzlich hat das schon funktioniert, ich bin aber nun am Aufräumen und Optimieren. Wer das verstanden und Interesse hat... gerne. } , so z.B.
Delphi-Quellcode:
Die gesamte (zumindest wesentliche) Datenbanklogik will ich nun möglichst in TDBSql kapseln, damit ich sie auch in anderen Komponenten weiterverwerten kann und die Kompos übersichtlich bleiben.
TDBEditSql = class(TCustomEdit)
private FOldText:String; FDBSql:TDBSql; ... published property DBSQL:TDBSQL read FDBSQL write FDBSQL; end;
Delphi-Quellcode:
TDBEditSql ist registriert, im Objektinspektor wird DBSql zum Aufklappen angeboten und die veröffentlichten (Unter-)Eigenschaften können auch eingegeben werden (ohne extra einen Editor geschrieben zu haben!).
TDBSql=class(TComponent)
private FFieldName:String; FField:TField; FValue:String; ... published property EnabledControl:Boolean read FEnabledControl write SetEnabledControl; property FieldName:string read FFieldName write SetFieldName; property DataSource:TDataSource read GetDataSource write SetDataSource; ... end; Das funktioniert soweit super, nur werden die Eigenschaften grün dargestellt und weder von der IDE gespeichert noch in die Exe übergeben. Testweise habe ich TDBSql registriert, ins Formular eingesetzt und ein paar Eigenschaften definiert. Dann ist alles "normal" (schwarze Schrift und werden gespeichert). Wie kann ich die Untereigenschaften "schwarz machen" ;-)) ? Danke schon mal von Stahli @MaBuSe: Ich bin beeindruckt, was Du hier leistest!!! Konnte aber trotzdem noch keine Lösung für mich finden... [edit=SirThornberry]Delphi-Tags gesetzt - Mfg, SirThornberry[/edit] |
Re: Untereigenschaften leider grün
Wie sieht der Konstruktor aus? Wird FDBSql instantiiert?
|
Re: Untereigenschaften leider grün
Hallo mkinzler,
hier die beiden Konstruktoren, wie gesagt, ich bin beim auffäumen ;-) Wenn ich DBSql in das Formular setze, ist alles wie immer, nur als Unterobjekt in DBEditSql werden die Eigenschaften nicht mit dem Projekt gespeichert...
Delphi-Quellcode:
Gruß Stahli
constructor TDBEditSql.Create(AOwner: TComponent);
begin inherited; FDBSql:=TDBSql.Create(Self); end; constructor TDBSql.Create(AOwner: TComponent); begin inherited; FFieldDataLink:=TFieldDataLink.Create; FieldDataLink.Control:=Self; FieldDataLink.OnDataChange:=DataChange; FFieldName:=''; FField:=nil; FValue:=''; FEnabledControl:=True; FDataChangingFlag:=False; FDataInactiveFlag:=False; FNewDataFlag:=False; FShowingFlag:=False; FChangingFlag:=False; FDefineFieldsFlag:=False; FBlockedFlag:=False; IdData:=True; FIdFieldName:=''; FIdValue:=''; FIdSQL:=''; FIdField:=nil; FIdIBQuery:=nil; end; |
Re: Untereigenschaften leider grün
Hallo nochmal,
ich konnte das Problem leider noch nicht klären... Im Grunde will ich meine "Unterkomponente" so ähnlich wie TFont im Datenformular speichern. In der DFM-Datei steht zu Font:
Delphi-Quellcode:
Meine Komponente wird im Formular so gespeichert:
object Edit1: TEdit
Left = 40 Top = 88 Width = 121 Height = 20 Font.Charset = OEM_CHARSET Font.Color = clWindowText Font.Height = -12 Font.Name = 'Terminal' Font.Style = [fsBold, fsItalic] ParentFont = False TabOrder = 0 Text = 'Edit1' end
Delphi-Quellcode:
Wenn aber meine Komponente einer Unterkomponente einer anderen ist, sieht es nur so aus:
object DBSqlId1: TDBSqlId
DataSource = DataModule1.DataSource1 FieldName = 'Titel' Text = 'hjghjhgjghjghj' DisplayText = 'hjghjhgjghjghj' EnabledControl = True IdMode = True SortValue = 0 SortIdValue = 0 Left = 216 Top = 16 end
Delphi-Quellcode:
Das möchte ich gern:
object DBEditSql1: TDBEditSql
Left = 11 Top = 24 Width = 305 Height = 21 MaxLength = 60 TabOrder = 0 DBSqlId = DBEditSql1.DBEditSql1_DBSqlId end
Delphi-Quellcode:
Hat jemand einen Tipp? Im Objektinspektor ist alles bereits wunderbar, nur das Speichern funktioniert noch nicht.
object DBEditSql1: TDBEditSql
Left = 11 Top = 24 Width = 305 Height = 21 MaxLength = 60 TabOrder = 0 ...!!! DBSqlId.DataSource = DataModule1.DataSource1 DBSqlId.FieldName = 'Titel' DBSqlId.Text = 'hjghjhgjghjghj' DBSqlId.DisplayText = 'hjghjhgjghjghj' DBSqlId.EnabledControl = True DBSqlId.IdMode = True DBSqlId.SortValue = 0 DBSqlId.SortIdValue = 0 ...!!! end Ich denke, ich müsste die Speicher- und Load-Procedure erweitern, aber wie? Danke von Stahli |
Re: Untereigenschaften leider grün
Hallo Stahli,
vielleicht fehlt nur eine Zeile in deinem Quelltext:
Delphi-Quellcode:
Gruß Hawkeye
constructor TDBEditSql.Create(AOwner: TComponent);
begin inherited; FDBSql:=TDBSql.Create(Self); FDBSql.SetSubComponent (True); // neu end; |
Re: Untereigenschaften leider grün
@Hawkey219
DANKE!!! Das habe ich gesucht und nicht gefunden, obwohl es in der Hilfe steht... :wall: Stahli |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:29 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 by Thomas Breitkreuz