AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Untereigenschaften leider grün

Ein Thema von stahli · begonnen am 27. Okt 2006 · letzter Beitrag vom 20. Jan 2007
Antwort Antwort
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.337 Beiträge
 
Delphi 11 Alexandria
 
#1

Untereigenschaften leider grün

  Alt 27. Okt 2006, 01:17
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:
  TDBEditSql = class(TCustomEdit)
  private
    FOldText:String;
    FDBSql:TDBSql;
  ...
  published
    property DBSQL:TDBSQL read FDBSQL write FDBSQL;
  end;
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.
Delphi-Quellcode:
  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;
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!).
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]
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Untereigenschaften leider grün

  Alt 27. Okt 2006, 06:48
Wie sieht der Konstruktor aus? Wird FDBSql instantiiert?
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.337 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: Untereigenschaften leider grün

  Alt 27. Okt 2006, 10:35
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:
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;
Gruß Stahli
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.337 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Untereigenschaften leider grün

  Alt 20. Jan 2007, 20:24
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:
            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
Meine Komponente wird im Formular so gespeichert:
Delphi-Quellcode:
  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
Wenn aber meine Komponente einer Unterkomponente einer anderen ist, sieht es nur so aus:
Delphi-Quellcode:
            object DBEditSql1: TDBEditSql
              Left = 11
              Top = 24
              Width = 305
              Height = 21
              MaxLength = 60
              TabOrder = 0
              DBSqlId = DBEditSql1.DBEditSql1_DBSqlId
            end
Das möchte ich gern:
Delphi-Quellcode:
            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
Hat jemand einen Tipp? Im Objektinspektor ist alles bereits wunderbar, nur das Speichern funktioniert noch nicht.

Ich denke, ich müsste die Speicher- und Load-Procedure erweitern, aber wie?

Danke von Stahli
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#5

Re: Untereigenschaften leider grün

  Alt 20. Jan 2007, 21:10
Hallo Stahli,

vielleicht fehlt nur eine Zeile in deinem Quelltext:

Delphi-Quellcode:
constructor TDBEditSql.Create(AOwner: TComponent);
begin
  inherited;
  FDBSql:=TDBSql.Create(Self);
  FDBSql.SetSubComponent (True); // neu
end;
Gruß Hawkeye
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.337 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Untereigenschaften leider grün

  Alt 20. Jan 2007, 21:49
@Hawkey219

DANKE!!! Das habe ich gesucht und nicht gefunden, obwohl es in der Hilfe steht...

Stahli
  Mit Zitat antworten Zitat
Antwort Antwort


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 12:37 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