Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - Text fett/bold in Hint
CodexX - Mi 06.02.08 23:37
Titel: Text fett/bold in Hint
Ich würde gerne Text in einem Hint fett hervorheben können. Von Haus aus geht das wohl nicht und große Komponenten möchte ich deswegen nicht unbedingt einbingen müssen.
Was ist die einfachste Methode? Vielleicht wurde das schon irgendwo beantwortet, ich habe leider nichts Passendes gefunden...
Calculon - Do 07.02.08 00:07
Hi,
Delphi-Quelltext
1: 2: 3: 4:
| procedure TForm1.FormCreate(Sender: TObject); begin screen.HintFont.Style := [fsbold]; end; |
Gruß
Calculon
--
CodexX - Do 07.02.08 00:43
Mir geht es tatsächlich darum, nur bestimmte Testteile fett darzustellen.
Also etwas wie:
Zitat: |
Titel1
Ein bisschen Text
Titel2
Noch mehr Text
|
Aber in dem Beispiel bei SDC sehe ich auch nur die Möglichkeit, diese Eigenschaften für das ganze Hint-"Fenster" festzulegen.
Ich bräuchte die Stilfestlegung eben gezielt...
Bernhard Geyer - Do 07.02.08 08:22
CodexX hat folgendes geschrieben: |
Aber in dem Beispiel bei SDC sehe ich auch nur die Möglichkeit, diese Eigenschaften für das ganze Hint-"Fenster" festzulegen.
Ich bräuchte die Stilfestlegung eben gezielt... |
Entweder viel selbst implementieren oder fertige Komponenten wie vom ElPack verwenden die hier HTML-Code unterstützen.
CodexX - Do 07.02.08 17:46
Bernhard Geyer hat folgendes geschrieben: |
Entweder viel selbst implementieren ... |
Ja, daran scheiter's ja leider gerade.
Bernhard Geyer hat folgendes geschrieben: |
... oder fertige Komponenten wie vom ElPack verwenden die hier HTML-Code unterstützen. |
149$ für eine Fett-Markierung ...
Also ich sehe ja in dem SDC Beispiel, wie man die Klasse ableiten kann, aber ich habe leider keine Idee, wie man die Markierungen Zeilenweise oder Wortweise festlegen könnte. Deswegen ja meine Bitte um Hilfe...
Yogu - Do 07.02.08 18:01
In
Paint kannst du den Text komplett selber schreiben. Also auch unterschiedlich formatieren:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25:
| var i, X, Y: Integer; const BoldChar = '$' Canvas.Font.Style := Canvas.Font.Style - [fsBold]; X := 0; for i := 1 to Length(Caption) do if Caption[i] = BoldChar then begin if not ([fsBold] in Canvas.Font.Style) then Canvas.Font.Style = Canvas.Font.Style + [bsBold] else Canva.sFont.Style = Canvas.Font.Style - [bsBold]; end else if Caption[i] = #13 then begin inc(Y, Canvas.Font.Height); X := 0; end else begin Canvas.TextOut(X, Y, Caption[i]; inc(X, Canvas.TextWidth(Caption[i]); end; |
CodexX - Do 07.02.08 19:35
OK, wir kommen der Sache näher. :)
Die gewünschten Bereiche werden nun richtig markiert.
Leider geht die Möglichkeit des Zeilenumbruchs in einem Textstring verloren:
Delphi-Quelltext
1:
| Caption := 'Erste Zeile'+#13#10+'Zweite Zeile' |
ignoriert den Zeilenumbruch einfach. Wie kriegt man das wieder hin?
Ja, man könnte das TextOut für jede gewünschte Zeile neu aufrufen, aber der gesamte Text soll ja nur in einem Textstring drinstehen und damit sollte Caption auch nur ein Mal von TextOut ausgegeben werden.
Yogu - Do 07.02.08 19:40
Ok, das hab ich vergessen. Habs hinzugefügt, siehe mein erster Post.
CodexX - Do 07.02.08 21:54
edit: Okay, passt. Danke sehr!
CodexX - Do 07.02.08 22:52
Gut, das funktioniert jetzt auf der MainForm und auf den UnterForms, aber leider nicht beim Tooltipp des TrayIcons (TCoolTrayIcon). Wie weise ich das dem explizit zu?
Yogu - Do 07.02.08 22:56
Ich glaube, die Hints kannst du da nicht verändern. So wie das aussieht, regelt Windows das komplett Du kannst aber auf das MouseMove-Ereignis reagieren und deinen Toolip manuell anzeigen lassen.
CodexX - Do 07.02.08 23:05
Hm, das ist ja doof. Na dann versuche ich mal herauszufinden, wie man einen Tooltipp gezielt an einer Stelle anzeigen kann...
Zorro - So 10.02.08 16:07
Yogu hat folgendes geschrieben: |
Delphi-Quelltext 1: 2: 3: 4: 5:
| ... if Canvas.Font.Style = [] then Canvas.Font.Style = [bsBold] else Canva.sFont.Style = []; | |
Würde ich noch verfeinern, damit eventuelle vorhandene (andere) Styles (zB kursiv) nicht verlorengehen:
Delphi-Quelltext
1: 2: 3: 4:
| if not (Canvas.Font.Style >= [fsBold] then Canvas.Font.Style := Canvas.Font.Style + [fsBold] else Canvas.Font.Style := Canvas.Font.Style - [fsBold] |
Greetz
Zorro
Yogu - So 10.02.08 20:16
Gut,
Zorro, das ist eine gute Idee. :zustimm: Ich habs mal ergänzt. So langsam wird die Funktion noch richtig professionell ;)
Allerdings hab ich noch was verbessern müssen: Du darfst nicht einfach mit
Delphi-Quelltext
1:
| if Canvas.Font.Style = [] then |
kontrollieren, ob noch nicht fett geschrieben wird, sondern auf das
nichtvorkommen von
fsBold prüfen:
Delphi-Quelltext
1:
| if not ([fsBold] in Canvas.Font.Style) then |
CodexX - Fr 15.02.08 00:42
Hm, ich komme nicht weiter. Gibts da jetzt eine Möglichkeit das Hint beim Erscheinen im Tray abzufangen und statt dessen sein eigenes anzuzeigen? Sowas wie onHintPopup habe ich leider nicht gefunden und dann müsste es ja noch an die richtige Stelle... Eieiei...
Yogu - Fr 15.02.08 16:46
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26:
| type TForm1 = class(TForm) private procedure WndProc(var Message: TMessage); override; end;
procedure TForm1.WndProc(var Message: TMessage); var Point: TPoint; begin case Message.Msg of WM_TRAYMSG: case Message.lParam of WM_MOUSEMOVE: begin GetCursorPos(Point); end; end; else inherited WndProc(Message); end; end; |
Eigentlich müsste es klappen.
Grüße,
Yogu
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!