InplaceList im ListView (MFC -> VCL)



  • hi,

    ich brauche dringend mal eure hilfe bei der realisierung eine InplaceComboBox im ListView. ich hab im Netz nen Source für die MFC gefunden, bekomme es aber nicht hin, dass ganze für die VCL zu portieren. ich hoffe jemand kann mir dabei helfen?

    beim Klick auf ein Item der ListView soll eine ComboBox kommen mit der man einen neuen Eintrag wählen kann. Irgendwie kommen allerdings einige der Messages nicht richtig an, so dass es nicht richtig funktioniert.

    VCL-Source (die Übersetzung von mir): http://www.oder-so.de/sunday/download/ListView_ComboBox.zip

    MFC-Source (der Originalsource): http://www.codeguru.com/listview/drop_down_list.shtml



  • Hi Sunday,

    ich hab reges interesse. Zumal ich eine InplaceComboBox sowieso noch schreiben muss. 🙄
    Ich werde mich dir also anschließen 😉

    Hab die Files runtergeladen und schau mir diese heute abend mal etwas genauer an. Wie wollen wir kontakt halten ? Per Mail, hier, in VCL oder ein Projekt unter Projekte ?

    Zur Zeit sind deine Beiträge zu diesem Thema ja recht versteut *G*
    Schwer da den Überblick zu behalten.

    Ich schlag vor, das wir nach Projekte umziehen. 🙂

    Wäre jemand bitte so freundlich, sofern Sunday nichts dagegen hat ?



  • okay. bin dabei. auf nach projekte...



  • supi 🙂

    erst mal ne Frage vorweg.

    Möchtest du an der MFC-Version festhalten ? Oder kommt auch ein anderer Lösungsansatz in Frage ?



  • naja, bräuchte ne lösung für VCL, ganz egal wie die aussieht, hauptsache die funktionalität einer combobox im listview ist gewährleistet.



  • hm,
    die MFC-Variante ist ja nicht unbedingt mein Ding. 🙄

    InPlaceEdit ist von CustomEdit abgeleitet. Soviele Erweiterungen sind da nicht hinzugekommen.

    Theoretisch könnten wir TInPlaceComboBox von TCustomComboBox ableiten und ähnliche Methoden erstellen.

    Hat den Vorteil, das sich das Ding dann in allen Objekten verwenden lässt, das von TDrawGrid abgeleitet ist oder solch eines enthält.

    Das macht die die Sache schön flexibel. Zum Beispiel könnte man dann dieses auch in einem Grid oder DBGrid verwenden 😉 ohne die Kompo komplett neu schreiben zu müssen.

    Die MFC-Version scheint mir etwas starr in der VCL-Welt.
    Man müsste alle Kompos zum großen Teil umschreiben, die diese Combobox benutzen soll. Oder versehe ich mich da ?



  • hm,

    hab mir die Angelegenheit mal etwas genauer unter die Lupe genommen.

    Mein Vorschlag:

    1. Eine Schnittestellenklasse, die die Zuordnung der InplaceGeschichten übernimmt. Abgeleitet von TControl.
    Diese sollte die selben Schnittstellen- Eigenschaften wie TInPlaceEdit besitzten.

    Aufgabe der Klasse:

    Checken, ob im Feld der OwnerKomponente ein Editfeld erwartet wird oder eine Combobox als Inplace erwünscht ist.

    Hierzu ist jeweils eine Klasse von dem gewünschten Owner abzuleiten und Eigenschaften wie z.B. FeldInplaceStyles der Felder .

    Diese Klasse ruft dann je nach wunsch des Owners TInplaceEdit oder TInPlaceComboBox auf und gibt nach Beendigung der Eingaben oder Auswahlaktivitäten den Wert an das Grid zurück.

    Vorteil: Die Ownerklassen müssen nicht überschrieben werden. Lediglich die Medthode "CreateEditor" muss ersetzt werden und ein paar Eigenschaften hinzugefügt werden.
    Das macht die Sache handlicher und flexibel. Man kann so auch andere InplaceGeschichten hinzuschreiben. Theoretisch kann man so praktisch alles als Inplace in den Owner schmeissen.

    2. Die Klasse InplaceComboBox muss erstellt werden.

    Ähnlich der Vorgehensweise, die die Programmierer des TInplaceEdit gewählt haben.
    Das sind lediglich ein paar Metoden und Eigenschaften.

    Der Knackpunkt liegt dann wohl in der Schnittstellenklasse.

    Gib mal ne Meinung dazu ab 🙄



  • klingt ganz gut. nur ist ein TListView nicht von TDrawGrid abgeleitet, auch müssen sämtliche ereignisse die ein beenden eine editieraktion zur folge haben, berücksichtigt werden (VK_ESCAPE, VK_RETURN, Tab?, Focuswechsel, Auswahl einer neuen Zelle). ebenso das verändern der zellengrösse, beim scrollen im owner. und wenn wir ganz gut sein wollen, noch nen optischer hinweis, dass sich unter zelle xyz eine combobox oder ähnliches verbirgt. 😉

    eine InplaceCheckBox für StringGrid hätte ich schon, allerdings nicht als eigene Klasse. mir ist noch keine schlaue Idee gekommen, wie ich von vorherein sagen kann, das dort und dort eine checkbox sein soll und dort und dort nicht, aber das nur am rande.



  • klingt ganz gut. nur ist ein TListView nicht von TDrawGrid abgeleitet

    hups, hatte ich übersehen 🙄

    hm,

    Die Klasse TListViewItem umschreiben wäre ne denkbar ideale Lösung. Aber hast du dir mal angeschaut ? 😮

    Sollten wir ?

    [ Dieser Beitrag wurde am 20.06.2002 um 19:37 Uhr von AndreasW editiert. ]



  • ähm, für TListView scheint doch die MFC- Variante gar nicht so übel zu sein.

    Ich mach mich mal an deine Projektinterpretation.



  • hm,

    funktionieren tuts ja bis zum anzeigen der ComboBox.

    Das Problem liegt wohl in der Initaliesierung der ComboBox und deren Messagehandling. Warum das alles mit API machen. Geht doch auch einfacher. 🙄
    Ich schlag vor, das wir die API- Geschichten umschreiben.

    Eine vernünftige Schnittstelle zwischen ListView und der Combo ist ohne Zweifel notwendig.
    Dieses sollte man direkt in einer Ableitung einer TListView- Komponente implementieren.

    Siehst du das auch so ?



  • jo, denk ich auch, dasses das beste ist, ne ListView abzuleiten und dort die Funktionalität zu implementieren. Wenns einfacher als mit API geht, dann lass es uns auf diesem Weg probieren.

    so aber jetzt erstmal schönes Wochenende.. 🙂



  • joh, das Wochenende war wohl zu kurz. 😞

    Ich hab die nächten 2 Tge keine Zeit. Melde mich Donnerstag wieder.
    Ich schau mal bis dahin nach 'nem Ansatz, wie man die Imlementierung umsetzen kann.


Anmelden zum Antworten