none
tooltips im grid?

    Frage

  • Hallo community :D
    Ich habe eine Anwendung entwickelt, in deren Hauptformular ich unter anderem ein grid habe.. dieses grid hat 4 columns, die ich über den designer erstellt habe. Zudem habe ich eine dynamische anzahl an collumns zwischen col3 und col4 programatisch erstellt.

    Nun zu meinem Problem, oder besser gesagt zu meinen zwei Problemen
    1: Ich arbeite sehr gerne mit Tooltips, um meine Anwendungen benutzerfreundlicher zu machen. Ich habe in der ersten column z. B. einen Button geladen, auf dem man nur ein symbol sieht... Als Tooltiptext habe ich in die Column sowie in den header als auch in den button "Detail" stehen. Die Formulareigenschaft "ShowTips" steht auf .t. und trozdem wir kein tooltip angezeigt. Ich habe mir sagen lasse, dass das grid in VFP etwas buggie is, was das anzeigen von tooltips angeht. Also kann mir da vielleicht jemand helfen, dass die tips trozdem angezeigt werden??

    2: Natürlich will ich auch in den dynamischen Collumns einen Tip anzeigen lassen. Und ich hab keinen Plan, wie ich auf die eigenschaften der programatisch erzeugten columns zugreife oder in events einen mehrzeiligen code reinschreibe. weil die ja erst zu laufzeiten erstellt werden. Der Text der dyn_cols soll aus einer Tabelle ausgelesen werden. Hat da jemand einen lösungsweg für mich?

    Gruß Schosch

    Mittwoch, 27. März 2013 07:18

Antworten

  • okay.. so klappt es nicht..

    Ich habe mit jetzt ne form methode gemacht, in der ich die paramether des mousenter ereignisses übergebe( copy, paste ;) ) und dann habe ich mit BINDEVENT() die mousenter methode vom programatisch erzeugtem Header an die formular methode die ich selbst erstellt habe gebunden und kann da jetzt so drinn rumm schreiben, als wäre es die mousenter methoden

    mega einfach, eigentlich :)

    • Als Antwort markiert Schosch93 Donnerstag, 18. April 2013 12:01
    Donnerstag, 18. April 2013 09:53

Alle Antworten

  • Ja, das Grid ist buggy in Bezug auf ToolTips, noch dazu pro Zelle. Grid.ToolTipText geht schon, auch Column Header.

    Für beide Fragen ist eine eigene Column-Klasse eine Basislösung, s. http://social.msdn.microsoft.com/Forums/en-US/visualfoxprogeneral/thread/618b6068-fec9-46dc-8908-bfb8d49837be/

    Tschüß, Olaf.


    Olaf Doschke (Setmics)

    Mittwoch, 27. März 2013 19:40
  • Gar nicht zu reagieren hilft überhaupt nicht. Bist Du wenigstens in irgendeinem der Details weitergekommen?

    Ich sehe da eigentlich Stoff für 3 Threads, und ich ergänze nochmal Antworten in Kurzform:

    1. Tooltips für Header und Zellen

    => AfterRowColChangeEvent() des Grid nutzen und Grid.ToolTipText für die aktive Zelle setzen.

    oder

    => MouseMove() Event und GridHitTest() nutzen, um die aktive Zelle zu finden und dessen Tooltiptext zu setzen.

    2. Code in zur Laufzeit erzeugten Columns

    => MemberClass, Klassen mit Code vorab definieren.

    3. Auf Columns zugreifen

    => Grid.Columns(N) durchlaufen von N=1 bis Grid.Columncount

    Du wirst ja auch die Controlsource in den jeweiligen neuen Columns setzen, wie machst Du das den? In dem Moment kannst Du auch jede andere Property setzen. Oder setzt Du nur Grid.Recordsource und überläßt die einzelnen Columns dem Automatismus von VFP, alle Tabellenfelder den Columns zuzuordnen?

    Tschüß, Olaf.


    Olaf Doschke (Setmics)

    Dienstag, 9. April 2013 05:59
  • hei.. sorry, dass ich solange abwensend war, aber ich hatte viel zu tun und noch keine zeit bis jetzt mich um dieses meiner probleme zu kümmern. Aber das werde ich nun nachholen.

    Also, wenn ich eine formular methode erstelle, in der steht, dass ein textfeld (welches ich als tooltip missbrauche) sichtbar wird und sich an der mausposition positioniert? diese rufe ich dann, nachdem die collumns erstell wurden mit

    thisform.Dyn_col.mouseenter = thisform.formmethode5 with dyn_col

    auf. Würde das so funktionieren?? oder zumindest so ähnlich?

    Donnerstag, 18. April 2013 08:12
  • okay.. so klappt es nicht..

    Ich habe mit jetzt ne form methode gemacht, in der ich die paramether des mousenter ereignisses übergebe( copy, paste ;) ) und dann habe ich mit BINDEVENT() die mousenter methode vom programatisch erzeugtem Header an die formular methode die ich selbst erstellt habe gebunden und kann da jetzt so drinn rumm schreiben, als wäre es die mousenter methoden

    mega einfach, eigentlich :)

    • Als Antwort markiert Schosch93 Donnerstag, 18. April 2013 12:01
    Donnerstag, 18. April 2013 09:53
  • Ja, ich finde memberklassen idealer, aber kann man machen, und dann wäre das einfachste, Du setzte in dem zentralen Event den Grid ToolTipText dynamisch.

    Tschüß, Olaf.


    Olaf Doschke (Setmics)

    Donnerstag, 18. April 2013 10:31
  • joar.. ich hab den auszugebenen text in der db drinn..

    Sinn des ganzen:
    ich habe "blöcke" die können erweitert werden, oder auch verringert.. die anzahl der blöcke entscheidet die anzahl der collumn, in denen ein butten gelasen ist um auf die blöcke zuzugreifen.
    in den headern steht jeweils das kürzel des blockes (weil ganze bezeichner einfach zu lang wären) also lasse ich verständnishalber "tooltips" mit den bezeichnern als text erscheinen, damit der anwender weiß um welchen block es sich bei welcher collumn handelt.

    wenn ich die collumns erstelle und die kürzel auslese, schreibe ich in die tooltiptext eigenschaft die ausgelesenen bezeichner. Dies mache ich troz des bugs aus dem grund, dass ich den inhalt dieser eigenschaft auslesen kann, wärend ich die methode mit dem BINDEVENT() übergebe. Dies geht mit  AEVENTS(). So brauch ich mir den inhalt nicht mit irgentwelchen selects zusammensuchen, weil er ja schon in der source steht ;)

    das halte ich für ein wenig performanter
    Donnerstag, 18. April 2013 12:09
  • Ich habe doch gar nichts dazu gesagt, wo und wie und wie schnell Du Text herholst.

    Das einzige, was ich empfahl ist, den Grid.ToolTipText im Mousover zu setzen, wenn Du den Grid Tooltip pro Datensatz, Feld oder Spalte haben willst, der Tooltiptext des Grids geht ja schon, ist nur eben einer.

    Wenn Du mit Deinem selbstgestrickten Textfeld besser zurecht kommst, auch gut.

    Wie hast Du mich denn verstanden?

    Tschüß, Olaf.


    Olaf Doschke (Setmics)

    Samstag, 20. April 2013 10:04
  • ich hab das so verstade, dass ich den auzugebenen text in den tooltiptext schreiben solle und mit moseover den tip anzeigen lasse..

    und dazu dachte ich mir, dass wenn ich den text direck reinschreibe (fest) dann ist mir das nicht dynamisch genug.. und die anzeige des tips würde ja trozdem nicht klappen. Also hab ich mein selbst gestricktes dingen vorgezogen..
    Dienstag, 30. April 2013 06:52
  • Du sagtest nur zuletzt "das halte ich für ein wenig performanter".

    MEin Lösungsansatz den ToolTipText des Grids zu beschreiben dauert doch keine Zeit, und woher Du den Text nimmst, ist doch auch egal.

    Wenn Du ein Original Tooltiptext Verhalten haben möchtest, setzt Du halt den Grid.Tooltiptext in dem Moment, wo Du jetzt in Deiner Lösung einen TextBox oder Editbox Value setzt. Ist dopch egal, was Du setzt, der Moment dauert doch nicht. Du kannst alles, was auch immer Du jetzt machst, genau so beibehalten, nur als letzten Schritt statt dem individuellen textfeld in den Grid.ToolTipText schreibst.

    Du hast ein Vorteil mit einer Eigenentwicklung, der User muß nicht 2-3 Sekunden stillhalten, bevor der Tip zu sehen ist.

    Und Ob Du Bindevent oder eine Memberklasse verwendest ist ein weitere aber völlig unabhängiger Punkt.

    Tschüß, Olaf.


    Olaf Doschke (Setmics)

    Dienstag, 30. April 2013 13:53