Fragensteller
Darstellung Sonderzeichen

Frage
-
Hallo zusammen,
ich möchte gerne beim Klicken auf den Header eines Grids die Sortierreihenfolge ändern (aufsteiegend - absteigend). Dabei möchte ich gerne in der Bezeichnung des Headers das jeweilige Symbol (z. B. Pfeil_nach_oben bzw. Pfeil_nach_unten) an den bestehenden Headertext anhängen. Meine Idee ist es, ein jeweils geeignetes Zeichen aus dem Font Symbol oder Windings o. ä. hinzuzufügen. Kann mir jemand einen Tip geben, wie ich an diese Symbole in Verbindung mit einer Header-Caption komme?
Vorab vielen Dank.
Gruß
Christoph
Donnerstag, 4. August 2016 10:17
Alle Antworten
-
Hi Christoph,
das wird so leider nicht funktionieren, denn der Header kann nur eine einzige Schriftart nutzen. D.h. entweder bspw. Arial (=Textfont) ODER Wingdings (=Symbolfont).
Aber als Alternative kannst Du jederzeit eine kleine Bitmap einblenden die Du dann je nach Sortierung austauschst (=Dreieck nach unten oder oben gerichtet). Zu diesem Zweck verfügt jedes Headerobjekt über die Eigenschaft 'Picture' der Du im Falle eines Headerclicks die entsprechende Grafik zuweist.
HTH
Gruss / Best regards
-Tom
Debugging is twice as hard as writing the code in the first place.
Therefore, if you write the code as cleverly as possible,
you are, by definition, not smart enough to debug it. 010101100100011001010000011110000101001001101111011000110110101101110011- Bearbeitet Tom Borgmann Donnerstag, 4. August 2016 14:30
Donnerstag, 4. August 2016 14:29 -
Naja, das Picture ist doch sogar die perfektere Lösung.
Und wie sollte das Umschalten der Fontart in einer Caption funnktionieren? Das HEader Objekt hat nur eine caption Eigenschaft, dessen Text angezeigt wird in dem Font, den man in der Fontname Eigenschaft angibt. Die Caption kann nicht HTML oder sonst eine markup language enthalten, in der man Bereiche mit CSS formatieren könnte. Sowas gibt es in Form von OCXen, aber dann viel Spaß die Datenbindung wiederum komplett anders aufzubauen.
Du kannst Dir ansonsten alles basteln, was Du willst, indem Du die Header ausblendest, was auch immer Du als Objekt über ein Headerloses Grid setzt muß dann aber auch irgendwie mit Scrolling synchron gehalten werden.
Also, in Deinem Fall sehe ich die Lösung mit der Picture Eigenschaft mehr als nur gut, Du kannst das Symbol für die Sortierrichtung sogar farblich gestalten. Was willst Du mehr? Wenn Du schon alles darauf ausgelegt hast, dass das erste Zeichen in einem Caption Text die Sortierrichtung angibt, dann schreib halt Code, der LEFT(Caption,1) nimmt und je nachdem das Picture setzt und zeig nur SUBSTR(caption,2) als Caption an.
Sorry, falls Du das oder ähnliches schon längst tust, aber Dein Schlusskommentar hört sich so an, als hättest Du den Hinweis auf die Picture Eigenschaft überlesen oder nicht verstanden.
Tschüß, Olaf.
Olaf Doschke - TMN Systemberatung GmbH
- Bearbeitet Olaf Doschke Samstag, 6. August 2016 10:34
Samstag, 6. August 2016 10:31 -
Hallo Christoph,
ich habe hierfür eine Methode Header_Click
Gruss Uli
LPARAMETERS oHeader,oRef lcPicture = oHeader.PICTURE THIS.header_clear(oRef) DO CASE CASE EMPTY(lcPicture) oHeader.PICTURE = 'c:\corak_9\bitmaps\down.bmp' oHeader.BACKCOLOR = 255 CASE ATC('down.bmp',lcPicture)#0 oHeader.PICTURE = 'c:\corak_9\bitmaps\up.bmp' oHeader.BACKCOLOR = 255 CASE ATC('up.bmp',lcPicture)#0 oHeader.PICTURE = '' ENDCASE oRef.set_liste()
Montag, 8. August 2016 04:41 -
Hallo zusammen,
vielen Dank für euren Support.
Die Lösung passt schon und sieht auch zweifellos gut aus. Hatte mich nur mit dem Thema (gemischte Zeichensätze) etwas beschäftigt. Es wäre eben etwas weniger Aufwand gewesen, einfach einen passenden Charakter hinzuzufügen, anstelle eines Pictures.
Nochmals vielen Dank.
Gruß
C.
Montag, 8. August 2016 08:05 -
Hi Christoph,
wenn Du die Methode .SetAll vom Grid benutzt, dann funktioniert das Ganze auch recht schlicht und einfach.
Im u.a. Codemuster gibt es 2 identische Cursor, wobei der eine mit den tatsächlichen Daten gefüllt ist und der andere Cursor einfach nur ein leeres Konstrukt darstellt. Das muss Du natürlich ein wenig an Deine Organisation anpassen. Aber unabhängig davon hält sich der eigentliche Code wirkich in Grenzen. Die Referenzen auf die beiden Bitmaps musst Du dann ebenfalls anpassen.
LPARAMETERS vHeaderObj as Object LOCAL lcPic as String, lcSort as String * // aktuellen Header kennzeichenen IF JUSTSTEM( vHeaderObj.Picture ) = [sort_down] lcPic = [MeinIconPfad\sort_up.bmp] lcSort = [ order by ] + vHeaderObj.Parent.ControlSource + [ asc] ELSE lcPic = [MeinIconPfad\sort_down.bmp] lcSort = [ order by ] + vHeaderObj.Parent.ControlSource + [ desc] ENDIF Thisform.grid1.SetAll( [picture] , [] , [Header] ) vHeaderObj.Picture = lcPic * // Sortierung durchführen Thisform.grid1.RecordSource = [crsTemp] SELECT * FROM crsTest INTO CURSOR crsTest &lcSort Thisform.grid1.RecordSource = [crsTest]
Der Code läßt sich definitiv noch verbessern, aber als Quick&Dirty Beispiel sollte es genügen :)
Wichtig war mir nur, dass Du mit SetAll pauschal ALLE Header.Picture initialisieren kannst und somit nur dem geklickten Header im Anschluss das Icon zuordnest.
JM2C :)
Gruss / Best regards
-Tom
Debugging is twice as hard as writing the code in the first place.
Therefore, if you write the code as cleverly as possible,
you are, by definition, not smart enough to debug it. 010101100100011001010000011110000101001001101111011000110110101101110011
- Bearbeitet Tom Borgmann Montag, 8. August 2016 09:03
Montag, 8. August 2016 09:02 -
Hatte mich nur mit dem Thema (gemischte Zeichensätze) etwas beschäftigt. Es wäre eben etwas weniger Aufwand gewesen, einfach einen passenden Charakter hinzuzufügen...
Ganz grundsätzlich kann ich das zwar schon verstehen, es muß erst mal ein Bild her, aber das ist extrem schnell gemacht von den zwei Zeichen aus WingDings, die Du wolltest, mittels Snipping Tool z.B.
Und vom Code her setzt Du Header.Picture statt Header.Caption, es ist lediglich eine Zeile Code.
Das Thema gemischte Zeichensätze wäre mir neu. Sicherlich könnte man einen Fonteditor nehmen, einen Font wie Arial kopieren und ein paar Zeichen aus WingDings zufügen. Aber dann ist die Schwierigkeit im Setup noch den Font zu ergänzen.
Vielleicht weißt Du ja mehr als ich über das Thema gemischte Fonts, wäre mal interessant, aber mir ist da nichts bekannt, was in VFP oder auch in .NET zwei Fonts mixt. Du hast noch die Möglichkeit FontCharSet zu setzen, das bezieht sich aber vor allem auf Abschnitte eines Fonts, der damit verfügbar gemacht werden. VFP ist ja sehr beschränkt in Sachen Unicode, FontCharSet ist noch das einzige, was einem ermöglicht arabisch, hebräisch und allerlei mehr sprachliche Abschnitte von solchen Fonts mitzunutzen. Soweit ich das überblicke nur in manchen Fonts, die letztlich auch in Unicodeform in Windows vorliegen, z.B. Arial, Calibri. Ein Bereich für Symbole wie Pfeile oder Dreiecke wäre mir aber da auch neu, sowas existiert in Unicode, aber nichtmal mit irgendeinem Fontcharset in den ANSI Bereichen von Fonts, die VFP darstellen könnte.
Um Dich selbst davon zu überzeugen, was alles geht und was nicht: Nimm die Zeichentabelle aus dem Windows Zubehör und aktiviere die erweiterte Ansicht. Da kann man dann einen Zeichensatz wählen, der so einem Skript entspricht, nämlich z.B. Windows:Westlich oder diverse Sprachen mit abweichendem Alphabet. Du wirst dann immer auf 256 Zeichen beschränkt sein und nur Zeichen, die dort irgendwo enthalten sind, können von VFP dargestellt werden, auch STRCONV kann Unicodezeichen nur in diese Fontbereiche abbilden, nicht mehr und nicht weniger.
Im Unicodebereich wäre das überhaupt kein Problem, da gibt es diverse Symbole. Was Dir übrig bleibt ist da das kleine v und das Zirkumflex Akzentzeichen ^, aber da würde ich in jedem Fall ein Picture vorziehen.
Du willst unbedingt zwei verschiedene Dinge in einem machen. Selbst wenn Du etwas fändest, was auch noch das westliche (lateinische) Alphabet enthält, wäre das bei Internationalisierung wieder passe, wenn es da um mehr als nur Italiensich, Spanisch, Französisch oder sonstige auf dem latienischen Alphabet basierende Sprachen ginge. Also warum sich dagegen so sperren, es ist doch nun wirklich die allerbeste Möglichkeit eine Grafik in den Header zu kriegen.
Tschüß, Olaf.
Olaf Doschke - TMN Systemberatung GmbH
- Bearbeitet Olaf Doschke Montag, 8. August 2016 14:03
Montag, 8. August 2016 14:00 -
Moin, moin
da gibt es auch recht schicke fertige Klassen die das so ähnlich (und mehr) können (auch für fertige Grids), z.B.
http://www.sweetpotatosoftware.com/spsblog/2008/11/25/VisualFoxProGridEnhancements.aspx
Grüße aus dem Norden
tom
- Bearbeitet tom knauf Freitag, 19. August 2016 12:43
Freitag, 19. August 2016 12:42