Popup vergrössern und anpassen.

Willkommen!

Wenn du im Nexave-Forum mitmachen möchtest, schreib an community@nexave.de. Wir haben die Registrierungsfunktion in unserem Diskussionsforum nämlich deaktiviert, weil sich praktisch nur noch Spammer und Werbebots registriert haben. Per E-Mail sind wir dir gern behilflich, einen Account anzulegen.
  • Hallo


    ich habe mittels POPUPTRIGGER, LIST und POPUPLIST ein Pulldown erstellt - eine Art Kategorie Pulldown rechts oben.
    Funktionieren tut es gut, also wenn ich etwas auswähle kann ich das Event handeln und etwas dementsprechendes tun.


    Danach wird dann immer der ausgewählte Eintrag im POPUPTRIGGER angezeigt. Die Position des POPTRIGGERs ist RIGHT@160 und die Breite AUTO. Das Problem ist jetzt aber, dass diese Werte nicht angepasst werden, wenn sich der Inhalt ändert und somit etwas längerer Text rechts abgeschnitten wird.


    Mein zweites Problem ist, das die Anzahl der Einträge in der LIST varieren können. Wie kann ich je nachdem wieviele Einträge ich verwende die LIST automatisch verlängern, also den VISIBLE-Wert in Abhängigkeit der Einträge setzen. Die Liste soll immer genau so lang sein, wie es Einträge hat und erst ab einer maximal Anzahl dann scrollen.


    Ich programmiere in C, verwende ein aktuelles PalmSDK und die prc-tools.


    Gruss farion

    • Offizieller Beitrag

    POPUPTRIGGER: FrmSetObjectBounds
    LIST: LstSetListHeight


    beides jetzt nur aus dem Gedächtnis, der wirkliche Name kann variieren. Die API ist ja nicht so groß, Du wirst es finden. Bedenke, das Deine Angaben (AUTO, RIGHT@) in der .rcp Datei nur für die Berechnung innerhalb von pilrc sind.


    Gruß
    Henk

  • LstSetListHeight gab es nicht, dafür aber LstSetHeight - damit hat es dann auch funktioniert die Länge des Pulldowns dynamisch anzupassen.


    Ich habe mich dann mal mit FrmSetObjectBounds beschäftigt:

    Code
    FrmGetObjectBounds(frm, triggerobj, &triggerBounds);
    triggerBounds.topLeft.x=160-triggerBounds.extent.x;
    FrmSetObjectBounds(frm,triggerobj,&triggerBounds);


    Das ist soweit schonmal ein Fortschritt. Leider kann man nur topLeft.x und nicht topRight.x setzen. Somit müsste ich noch die Breite von 160 abziehen, aber extent.x gibt mir nur die ursprüngliche Breite zurück und nicht die Breite die durch das ändern des Textes entstanden ist. Vielleicht hat sich die Breite auch nicht verändert und man sieht nur den Text herausragen.


    Meine Frage wäre also noch: wird die richtige Breite automatisch nach Ändern des Textes gesetzt und wenn ja, wie kann ich sie auslesen und wenn nein, wie komme ich an die korrekte Breite?


    Gruss und Danke farion

    • Offizieller Beitrag

    Nichts ist dynamisch. Wenn sich die Breite des Textes geändert hat, mußt Du die schon selber berechnen FntGetLineWidth() etc., das ist dann der Wert für extent.x, topLeft.x ist dann entsprechend 160 - extent.x


    Es ist aber sicherlich keine gute idee, die Breite des Popups ständig zu ändern. Nimm einfach eine max-Breite und halte die dann fest. Du kannst den String mit einer Fnt-Funktion auch auf die passende Länge kürzen und eine Ellipse (...) ranhängen.

  • Ich habe FntLineWidth() gefunden, FntGetLineWidth() gabs nicht - ich musste auch nochmal 18 für den Pfeil abziehen.


    Wieso ist das keine gute Idee. Wie macht es dann der Standard Launcher, da passiert mit den Kategorien doch genau das. Das Pulldown ändert ständig seine Grösse in Abhänigkeit des Textes - oder?


    farion

    • Offizieller Beitrag

    Stimmt, das kann sein.


    PS: Auf die Namen darfst Du mich nicht festnageln. Ich sag Dir nur, wo Du suchen musst, die korrekte Funktion darfst Du dann selber herausfinden. Ist ja nicht so, das die API übermäßig komplex wäre...