Frames in ScrollBox



  • Hallo,

    ich habe mir mittels TFrame eine "komponente" erzeugt, von dem ich nun verschiedene instanzen benötige.

    ich würde diese gerne untereinander im abstand von 25 pixel in einer scrollbox anzeigen lassen. leider habe ich absolut keine idee wie ich dies machen kann.

    wer weiß da weiter?

    hennes



  • Hallo

    Standard-C++ kennt keine grafischen Objekte.
    Ich vermute du arbeitest mit dem Builder. Wenn das richtig ist, las dich ins Builder-Forum verschieben.
    Zum Thema : Du erstellst die Frames dynamsich, mit der Scollbox als Parent. Dann brauchst du nur noch durchzurechnen, welche Instanz welchen Wert in der Eigenschaft Top zuweisen must.
    Allgemein läßt sich dafür folgende Formel bestimmen :

    int ObererRand = ...; // Rand über dem ersten Frame
    int FrameNu = ...; // Nummer des Frames, desen Top-Wert berechnet werden soll, beginnend bei 0)
    int ZwischenRand = ...; // Rand zwsichen einzelnen Frames;
    int FrameHoehe = ...; // Höhe eines Frames (wenn alle Frames immer diesselbe Höhe haben)
    Frame->Top = ObererRand + ((FrameHoehe + Zwischenrand )* FrameNu)
    

    bis bald
    akari



  • Viele Dank,

    so habe ich es hin bekommen 🙂

    Hennes

    p.s. wir ins im builder forum



  • Hallo

    Ich dacht ich wär im C++ Forum, als ich auf diesen Thread beantwortet habe... 😕

    bis bald
    akari



  • So, ich meinte ja das es läuft, also statisch läuft es, nur dynamisch will es nicht:

    /*
    // dies hier läuft
    TFrame1 *m_frame[2];
    
    for (int i = 0; i < 2; ++i)
    {
    	m_frame[i] = new TFrame1(this, mInput, slComponents, i);
    	m_frame[i]->Name = "Frame" + AnsiString(i);
    	m_frame[i]->Top = 25 + ((m_frame[i]->Height + 25) * i);
    	m_frame[i]->Left = 25;
    	m_frame[i]->Parent = ScrollBox;
    }
    */
    
    // dies hier läuft nicht
    DynamicArray<TFrame1*>framelist;
    framelist.Length = components;
    
    for (int i = 0; i < framelist.Length; i++)
    {
    	framelist[i] = new TFrame1(this, mInput, slComponents, i);
    	framelist[i]->Name = "Frame" + AnsiString(i);
    	framelist[i]->Top = 25 + ((framelist[i]->Height + 25) * i);
    	framelist[i]->Left = 25;
    	framelist[i]->Parent = ScrollBox;
    }
    

    Das obere läuft Einwandfrei. Allerdings will ich eine dynamische Anzahl von Frames anlegen und da ist mein Ansatz im unteren Teil.

    Der Bilder gibt mir folgende Fehlermeldung während der Ausführung der Anwendung:

    Im Projekt .... Exception der Klasse EComponentError mit der Meldung 'Komponente mit der Bezeichnung Frame1 existiert bereits' gefunden.

    Wo ist das Problem?

    Hennes



  • Ich Depp,

    name hat ja den gleichen namen die Klasse, habe in ->Name = "XFrame" + AnsiString(i) geändert und nun gehts

    Hennes



  • Die Name Eigenschaft kannst du auch mit Leerstring angeben, denn du hast ja über dein Array Zugriff auf die einzelnen Frames. 😉


Anmelden zum Antworten