Announcement

Collapse
No announcement yet.

ComboBox im Eigenbau

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • ComboBox im Eigenbau

    Hallo,

    ich möchte mir eine spezielle ComboBox basteln. Eingabezeile und Dropdown-Liste sollen aus 2 Spalten bestehen: Spalte 1 enthält z. B. eine Artikel-Nr., Spalte 2 die Artikelbezeichnung. Dabei dient die Artikelbezeichnung der bloßen Information (wer kann sich schon hunderte Nr. merken?) und wird auch nicht weiterverarbeitet. Deshalb ist die Artikelbezeichnung auch in der Eingabezeile farblich von der einzugebenden Artikel-Nr. abgehoben (z. B. vor grauem Hintergrund). Meine Probleme:

    1. Kann ich meine ComboBox von TCustomComboBox ableiten? Trotz längerem Studium habe ich hierfür keinen Weg gefunden, da CustomComboBox offenbar zu sehr mit der Windows-Standardkomponente COMBOBOX verwachsen ist (an die ich nicht rankomme)?
    2. Wenn nicht über einen Abkömmling von TCustomComboBox, wie kann ich dann mein Ziel erreichen? Ich denke da an eine ComboBox aus dem Baukastensatz: Ein Panel als Container (ich habe hierfür bisher mit einem Frame gearbeitet), ein Edit zur Eingabe der Artikel-Nr., ein weiteres Panel zur Anzeige der Artikelbezeichnung, ein Button zum Aufklappen der Dropdown-Liste (= ListView).
    3. Der Haken (einziger?) an meiner Lösung ist das Schließen der Dropdown-Liste. Eine ComboBox schließt sich ja – auch -, wenn ich z. B. bloß auf das Formular oder auf einen Menüpunkt klicke. Meine ComboBox aus dem Baukasten tut das nicht, da ich diese Fälle nicht mit dem OnExit- Ereignis abdecken kann.

    Für jegliche Anregung bin ich dankbar. Ich bin im Übrigen Hobby-Delphianer und arbeite mit Delphi 5 Professional.

    Viele Grüße Wolfgang.

  • #2
    Du solltest Dir mal auf http://www.tmssoftware.com/ die <b>TColumnComboBox</b> anschauen. Für nichtkommerzielle Nutzung frei, wenngleich dann ohne Source.<p>
    Schöne Grüße, Mario Noac
    Schöne Grüße, Mario

    Comment


    • #3
      Hallo Mario,

      besten Dank für die schnelle und zielsichere Antwort. TColumnComboBox von tmssoftware scheint meine Probleme vollauf zu lösen, wenngleich ich die Komponente noch gründlicher testen werde.

      Vielleicht werde ich auch 30 Euro investieren, um an den Source und damit hinter das Geheimnis der Komponente zu kommen. Unabhängig hiervon möchte ich – wenn dies nicht untunlich (oder was weiß ich sonst was) ist – nachfragen:

      Bin ich auf den richtigen Weg, wenn ich die Combobox wie unter Nr. 2 meines Beitrags vom 8.2.2004 zusammenbastele? Und wenn ja, wie kann ich die Dropdownliste dazu bringen, sich <B>immer</B> dann zu schließen, wenn ich außerhalb der Komponente klicke?

      Viele Grüße Wolfgang

      Comment


      • #4
        Also im großen und ganzen kann ich Dir sagen, wie es funktioniert.<p>
        Dein Weg mit dem Nachbau ist unpraktikabel. Du müsstest, das OnExit etc. nachempfinden und würdest doch immer nur der wahren Lösung hinterher programmieren können.<p>
        Hast Du bei der ComboBox schon die Property <b>Style</b> gesehen? Den kannst Du auf OwnerDraw stellen. Dann musst Du die Komponente selbst zeichen. Dafür ist das Event <B>OnDrawItem</b> zuständig. Hast Du das nur nicht gefunden, oder steht etwas gegen dessen Nutzung. Und wenn ich nicht irre, macht TMS es ganz genau so, schaue Dir mal deren Style an <p>
        Achso, ein Punkt spricht noch gegen Deine Implementation: der Ressourcenverbraucht: Edit, Panel und Listview sind drei vollwertige Windows-Elemente, die ComboBox ist nur eines. Das mag bei einem Element egal sein, aber Du möchtest ja universell bleiben und da ist es relevant.<p>
        Schöne Grüße, Mario NOac
        Schöne Grüße, Mario

        Comment


        • #5
          @ Mario
          besten Dank für Deinen Tipp. Style OwnerDraw und Ereignis OnDrawItem sind mir bekannt, aber irgendwie war (?!) ich in meine Lösung so verliebt (oho!), dass ich diese Möglichkeit nicht „gechecked“ habe. Ich werde das nachholen.

          @ an alle, die ’s interessiert und die Delphi, Version <= 5 haben
          Bei meinen neuesten Recherchen bin ich auf einen Beitrag von Jens Schumann am 23.3.2003 gestoßen (Ordner VCL, Thema: Benutzereingabe (Event) verhindern, worin beschrieben ist, wie man durch Nachrüstung des OnCloseUp-Ereignisses ganz allgemein vom Schließen einer Combobox Kenntnis erlangt und nicht nur wie beim OnExit-Ereignis nur dann, wenn ein anderes Control den Fokus erhält. – Ab Delphi 6 soll die ComboBox schon von Haus aus mit dem OnCloseUp-Ereignis ausgestattet sein.

          Viele Grüße, Wolfgang

          Comment

          Working...
          X