Hilfe bei Komponentenentwicklung - "n" Komponenten zusammenführen



  • Hallo

    Hm.... OK das ist soweit auch klar.... Aber die ganzen eigenschaften, die muss ich doch von Hand setzen, oder? bzw. eine *DFM-Ähnliche Datei gibt es bei Komponenten ja nicht, richtig?

    Alle Eigenschaften die du von dem Button übernehmen willst, must du in der Tat neu anlegen und an den Button weitergeben.

    Zwischenfrage: Wie kann ich meine Veränderungen an der Komponente eigentlich testen, ohne ständig zwischen "Neuer Application" und "Package laden + compilieren" hin- und herzuspringen?

    Indem du die Komponente direkt in einem Projekt testest, und dort nicht zur Entwurfszeit, sondern dynamisch zur Laufzeit eine Instanz davon erstellst.

    bis bald
    akari



  • Hallo

    Indem du die Komponente direkt in einem Projekt testest, und dort nicht zur Entwurfszeit, sondern dynamisch zur Laufzeit eine Instanz davon erstellst.

    Aarrgh... jetzt Zeigt er die Komponenten nicht mal mehr an... *verzweifel*

    Ich muss doch so vorgehen, oder?

    Unit1.h

    private:	// User declarations
        TEdit *Edit2;
    

    Unit1.cpp

    __fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
    {
        Edit2 = new TEdit(this);
    }
    
    void __fastcall TForm1::FormShow(TObject *Sender)
    {
        Edit2->Show();
    }
    

    Ich befürchte ich hab jetzt echt ein Brett vorm Kopf....

    Frank

    Edit:
    ....manchmal sollte man doch in die FAQ schauen.... *schäm*



  • Hallo

    heißt das, du hasts bereits herausgefunden das du noch einige Eigenschaften von der erstellten Instanz setzen must, und das der Show-Aufruf überflüssig ist?

    bis bald
    akari



  • Hallo,

    mindestens

    ->Parent
    

    setzen. Und

    ->Show()
    

    ist tatsächlich überflüssig... 😉

    Welche Werte sollte ich denn noch setzen, so quasie "Mindestvorgaben" ?

    mfg

    Frank



  • Hallo

    Die Dimensionen sind noch wichtig (Left, Right, Height, Width).
    Bzw. die Relativen Positionszuordnungen (Align, Constraints, Anchor).

    bis bald
    akari



  • Hallo,

    Dimensioniereung.. genau das richtige Stichwort... Wieso stimmen die Werte für Left, Top, usw. nicht, wenn ich im Konstruktor der Abgeleiteten Klasse drauf zurückgreife?

    __fastcall TAresAdvDBEdit::TAresAdvDBEdit(TComponent* Owner)
        : TAresAdvEdit(Owner)
    {
        SearchBtn = new TAresBitBtn(this);
    
        SearchBtn->Parent = this;
        SearchBtn->Left = this->Left;
        this->Left = this->Left + this->Height;
        SearchBtn->Top = this->Top;
        SearchBtn->Width = this->Height;
        SearchBtn->Height = this->Height;
        SearchBtn->Caption = "+";
    }
    

    -> Werte: Left = 0, Top = 0, Height = 19

    Diese Werte sehen mir nach default-Werten aus. An welcher Stelle "lädt" denn der BCB die per Positionierung auf der Form festgelegten Koordinaten für eine Komponente?

    😕

    Frank



  • Hallo Forum,

    keiner eine Idee? Ich hab's jetzt ein paar mal hin und her probiert, aber ich bekomme nie die "realen" Koordinaten der Komponente...

    Left/Top sind immer Null. Direktes Zuweisen von Werten geht aber (also z.B. Left = 100, Top = 100). Dann erscheint die Komponente auch da.

    Gibts keine Möglichkeit die "Form"-Koordinaten einer Komponente innerhalb dieser Komponente zu ermitteln? Müßte doch möglich sein.... 😕

    (zur Erklärung: möchte links neben einem Edit-Feld einen kleinen Button anzeigen, und das Edit-Feld um die Breite des Buttons nach rechts verschieben)

    Frank



  • Hallo

    SearchBtn->Parent = this;
    SearchBtn->Left = this->Left;

    Schon mal falsch. Da SearchBtn nun unter this geordnet ist, Basiert die Zuordnung der Position relativ zu this, nicht mehr zu dem Form.
    Das bedeutet der Ursprung [0,0] ist für SearchBtn nicht mehr die obere linke Ecke des Forms, sondern die obere linke Ecke des Parent-Controls.

    bis bald
    akari



  • Hallo akari,

    hm, ok, soweit verstanden, aber.... warum ist dann

    this->left = 0 // warum null?
    

    Dort müßte doch dann die Links-Position der Parent-Komponente relativ zu dessen Parent (= Form) stehen, oder? Und damit müßte ich doch per

    this->left = this->left + SearchBtn->width
    

    die Komponente um die Breite des Buttons nach rechts verschieben??

    mfg
    Frank



  • Hallo

    Genau jetzt kommst du mit deiner Vererbung an den toten Punkt.
    Der Searchbutton ist dem Edit untergeordnet, das heißt er muß sich visuell innerhalb des Edits befinden. Du kannst so nicht mehr das Edit neben den Button schieben!
    Genau deswegen brauchst du eine Ableitung von TControl o.ä., wo Button und Edit auf dem gleichen Parent-Level stehen und deshalb auch visuell nebeneinander stehen können.

    bis bald
    akari



  • Hallo akari,

    😮 Aaaarrrgh....

    Na super... Und nu? Hilfeee..... 😕

    Meine Anwendung baut quasie darauf auf, "direkt" in Edit-felder zu schreiben, bzw aus ihnen zu lesen. Wenn ich dich also richtig verstehe, müßte ich mir ein Konstrukt aufbauen, der sich "nach außen" so verhält wie ein Edit-feld, aber "nach innen" irgendwas anderes ist, innerhalb dem Edit und Btn auf "gleicher ebene" existieren....

    OMG

    Und meine Anwendung hat ja nur "ein paar" zeilen quähltext....

    Hast du vieleicht einen Tipp für mich, wie ich das mit wenig "um-die-ecke-programmieren" lösen kann?

    Frank



  • Hallo

    Als Alternative bietet sich noch an, nur von TAresBitBtn abzuleiten. Dann brauchst du der neuen Klasse nur eine Eigenschaft names Edit vom Typ TAresAdvDBEdit und eine Setter-Methode zu geben. In der Setter-Methode setzt du neben der interen Variable noch die Position passend zu dem bereits existierenden und positioniertem Edit.
    Als Beispiel kannst du dir TUpDown und desen Eigenschaft Associate anschauen.
    Das hat aber nachteil, das jede nachträgliche Positionsveränderung des Edits nicht automatisch eine Veränderung bei dem Button auslöst.

    bis bald
    akari


Anmelden zum Antworten