Mehrere Textboxen in Schleife erzeugen

  • Hallo,

    nachdem das grundsätzliche Problem, eine Textbox zu erzeugen, gelöst ist, scheitere ich am Erzeugen mehrere in einer Schleife...

    Ich habe von TWPRichText eine eigene Komponente abgeleitet und erweitert.

    In einer Schleife, die beim Laden einer Dokumentvorlage gestartet wird, wird folgende procedure mehrfach aufgerufen:

    dabei haben z.B. drei erzeugte Textboxen mehr oder weniger zufällig den gleichen oder aber teilweise den gewünschten Inhalt, mal kann man sie anklicken, mal wird dabei der Focus auf eine andere Textbox gesetzt, irgendwo fehlt eine Aktualisierung, nur wo setzt man da an?

    Wenn ich obige Procedure "von außen" mehrfach einzeln aufrufe (über eine Methode meiner Komponenten-Ableitung), bekomme ich die Textboxen ordentlich erzeugt und angezeigt!

    Bitte um einen Denkanstoß !

    Ciao

    Stefan

    • Offizieller Beitrag

    So geht das mit "high-level" code:

    In Ihrem Code sind die vielen ReformatAll nicht erforderlich.

    Sie können den Text erst zuweisen, nachdem das mit Insert.. eingefügt wurde.

    Wie andernorts bereits geschrieben: TWPORTFTextBox enthält eigentlich den Text nicht sondern verweist nur über den Namen auf eine entsprechende Textebene. AsString lokalisiert diese Ebene und und weist den Text dort zu. Das lohnt sich nur für RTF text, ansonsten ist InputString schneller.

    Das Ableiten einer Komponente macht m.M.n. nur Sinn, wenn Sie virtuelle Methoden überschreiben wollen. Anderenfalls würde ich immer ein neues Control erstellen welches ein TWPRichText oder TWPCustomRTFEdit erzeugt, evtl. auch die nützlichen Lineale und auch anderen code enthält, welchen Sie von aussen aufrufen wollen.

    Ansonsten gewinnen Sie nichts an zusätzlicher Abstraktion und Kapselung, da es immer noch möglich ist, beliebige Unter- und Unter-Unter Funktionen von TWPRichText von aussen aus aufzurufen.

    Anmerkung zur Kapselung: Lizenzrechtlich ist es so, dass alle Entwickler die direkt oder indirekt mit dem Control arbeiten, eine volle Lizenz brauchen. (Ich weiss, Ihre Firma hat mehrere Lizenzen)

    Grüsse,

    Julian

  • Vielen Dank für die schnelle Hilfe!

    Der Beispielcode funktioniert...

    Ja richtig, meine Variante

    Code
    type
      TCSKWPRichText = class(TWPRichText)

    ist vielleicht wirklich der falsche Ansatz!

    Über eine eigene Komponente die ein "unverändertes" WPRichText enthält (und vielleicht anderes zusätzliches) beinhaltet und bei der ich nach außen wirklich nur das zugänglich machen kann, was gewünscht ist, ist der bessere Ansatz!

    Da habe ich ja erst mal wieder einiges zu tun...

    Ciao

    Stefan

  • Erster Versuch Panel mit einem Ruler bringt beim Erzeugen des Packages eine Meldung

    Bestätige ich das kann das Panel zwar in die Komponentenpalette installiert werden, auch ausgewählt und auf ein Form gelegt werden, aber es ist dort nicht anklickbar und veränderbar.

    Bestätige ich die obige Meldung nicht bekomme ich beim Kompilieren der Komponente eine Meldung

    Zitat

    Package TestPanel kann nicht geladen werden, es enthält die Unit "Data.Bind.Observerlinks" die auch im Package "bindcomp240" enthalten ist.

    Eine Idee dazu?

    Ciao

    Stefan

    • Offizieller Beitrag

    Ihr package muss die bindengine und bindcomp package referenzieren.

    Delphi baut diesen Verweis normalerweise automatisch ein.

    Hier noch mein Beispiel für eine Delphi-Editor Komponente in einem Panel:

  • Ich bekomme es nicht compiliert :-(

    Wo finde ich BuildAll im deutschen RadStudio?

    Rechte Maustaste auf die bpl-Datei ab hier alle erzeugen ist grau (deaktiviert) und in den Projektoptionen (ich bin über neue Komponente erzeugen, Vorfahr TPanel an das Projekt gekommen...

    Ciao

    Stefan

    Habe es gefunden:

    In den Projektoptionen des Packages war als Suchpfad C:\WPTools\DX10.1 und nicht C:\WPTools\Source eingetragen!

    Einmal editiert, zuletzt von skoschke (26. Januar 2018 um 12:18)