AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

HintPause in FireMonkey?

Ein Thema von schorsch666 · begonnen am 30. Okt 2023 · letzter Beitrag vom 6. Nov 2023
Antwort Antwort
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.355 Beiträge
 
Delphi 12 Athens
 
#1

AW: HintPause in FireMonkey?

  Alt 1. Nov 2023, 05:55
Einfach mal VCL.Forms einbinden und in dessen Application die HintPause setzen?

Mit etwas Glück wird, auch an dieser Stelle, etwas der VCL benutzt.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.560 Beiträge
 
Delphi 12 Athens
 
#2

AW: HintPause in FireMonkey?

  Alt 1. Nov 2023, 10:24
Einfach mal VCL.Forms einbinden und in dessen Application die HintPause setzen?

Mit etwas Glück wird, auch an dieser Stelle, etwas der VCL benutzt.
Meinst Du diesen Rat ernst? FMX und VCL zu mischen ist nie eine gute Idee. Im Zweifel wird sich das schon gar nicht kompilieren lassen auf Ebene von MacOS oder Linux sowieso schon nicht.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.355 Beiträge
 
Delphi 12 Athens
 
#3

AW: HintPause in FireMonkey?

  Alt 1. Nov 2023, 11:15
Nein, nicht direkt. (auch wenn es mehrere Leute gibt, welche VCL und FMX mischen, also beide Fenstertypen in einer Anwendungen verwenden)

Unter Windows greift das FMX ja auf Funktionen des Windows zu.
Der Einfachheit halber kann Emba dort dann auch Funktionen der VCL benutzt haben ... wenn dem so ist, würde man über den Zugriff auf die VCL dann eventuell die selbe Funktion steuern, welche über FMX nicht direkt zugreifbar ist.

Ähnlich wie bei den Windows-Services, wo es "Application" (TServiceApplication aus Vcl.SvcMg) gibt, welches in der DPR benutzt wird.
Intern verwendet Dieses aber das "Application" der VCL (TApplication aus Vcl.Forms).
Will man z.B. an die Fehlerbehandlung des Services ran, dann kann es über die VCL lösen.
(siehe TServiceApplication.Create, .Run und .Destroy)

Einfach nur ein Versuch:
* Unit Vcl.Forms ins Uses
* über dessen Application diese Eigenschaft ändern und schauen ob es im FMX eine Wirkung hat
Vcl.Forms.Application.HintHidePause := 666;
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu ( 1. Nov 2023 um 11:19 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.560 Beiträge
 
Delphi 12 Athens
 
#4

AW: HintPause in FireMonkey?

  Alt 1. Nov 2023, 11:58
Nein, nicht direkt. (auch wenn es mehrere Leute gibt, welche VCL und FMX mischen, also beide Fenstertypen in einer Anwendungen verwenden)

Unter Windows greift das FMX ja auf Funktionen des Windows zu.
Der Einfachheit halber kann Emba dort dann auch Funktionen der VCL benutzt haben ... wenn dem so ist, würde man über den Zugriff auf die VCL dann eventuell die selbe Funktion steuern, welche über FMX nicht direkt zugreifbar ist.

Ähnlich wie bei den Windows-Services, wo es "Application" (TServiceApplication aus Vcl.SvcMg) gibt, welches in der DPR benutzt wird.
Intern verwendet Dieses aber das "Application" der VCL (TApplication aus Vcl.Forms).
Will man z.B. an die Fehlerbehandlung des Services ran, dann kann es über die VCL lösen.
(siehe TServiceApplication.Create, .Run und .Destroy)

Einfach nur ein Versuch:
* Unit Vcl.Forms ins Uses
* über dessen Application diese Eigenschaft ändern und schauen ob es im FMX eine Wirkung hat
Vcl.Forms.Application.HintHidePause := 666;
Wie gesagt, Dein Vorschlag lässt sich nicht kompilieren. Und ansonsten ist es so, dass unter Windows-FMX die Zugriffe auf die Windows-Api nur sehr gezielt stattfinden. Dafür gibt es aber spezielle units und die findest Du nicht in der VCL (sondern vor allem in RTL_units). Ein mischen ist zwar unter bestimmten Fällen möglich wird aber u.U. mit unstabilen Programmverhalten erkauft und einer erheblich größerer Exe-Datei (denn dann wird auch sehr viel Windows-VCL-Code eingebaut, den man nicht nutzt oder nicht nutzen kann).
  Mit Zitat antworten Zitat
schorsch666

Registriert seit: 21. Apr 2011
81 Beiträge
 
#5

AW: HintPause in FireMonkey?

  Alt 1. Nov 2023, 13:16
tks, habe es mir mal angeschaut, doch dazu die frage:
du sagtest im video, dass texte umgebrochen werden - ich habe die aber alle muehsam in ner unit mittels slinebreak entspr. formatiert. koennte man das als option "abschalten", oder ist das vllt. schon drin?

...de Schorsch

Geändert von schorsch666 ( 1. Nov 2023 um 13:28 Uhr)
  Mit Zitat antworten Zitat
schorsch666

Registriert seit: 21. Apr 2011
81 Beiträge
 
#6

AW: HintPause in FireMonkey?

  Alt 1. Nov 2023, 13:35
...hab mir das schon gedenkt. macht probs

(siehe anhang)
Angehängte Grafiken
Dateityp: png delphi_praxis.png (4,3 KB, 22x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.560 Beiträge
 
Delphi 12 Athens
 
#7

AW: HintPause in FireMonkey?

  Alt 1. Nov 2023, 14:00
Du könntest insofern eine Anpassung vornehmen, als dass Du bei der Zuweisung des Hints an den Label-Text die sLinebreaks entfernst und die Aufteilung der Zeilen ansonsten der Routine überlässt.

Ändere einfach die Zeile
Delphi-Quellcode:
Lab.text := Application.hint; // alt

// in
Lab.text := ReplaceStr (Application.hint, sLineBreak, ' '); // neu
Dafür musst Du auch die Unit "System.StrUtils" noch einbinden.
  Mit Zitat antworten Zitat
Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.560 Beiträge
 
Delphi 12 Athens
 
#8

AW: HintPause in FireMonkey?

  Alt 1. Nov 2023, 15:30
...hab mir das schon gedenkt. macht probs

(siehe anhang)
Weiterhin könntest Du auch, falls Dir bei der Aufteilung in Zeilen wichtig ist, wann der Zeilenumbruch stattfindet auch noch folgenden Code nach der Berechnung der Höhe des Callouts einfügen (= vor der Zeile "AcallHint.width := aw"):

Delphi-Quellcode:
if pos (slinebreak, lab.Text) <> 0 then begin
  ACallhint.Height := ACallHint.Height + (CountLineBreaks (lab.Text) * lab.canvas.textheight ('T'));
end;
Die Function "CountLinebreaks" sieht so aus (da gibt es wohl gar nichts fertiges in Delphi?):

Delphi-Quellcode:
function CountLinebreaks (S: string): Integer;
  var start: Integer;
  begin
    Result := 0;
    start := 1;

    while pos (sLineBreak, s, start) <> 0 do begin
      Inc (Result);
      start := pos (sLineBreak, s, start) + 2;
    end;
  end;

Wenn Dein Button hint, also so erstellt wurde:
button1.Hint := 'Zeile 1 ' + sLineBreak + 'Zeile 2 ' + slinebreak + 'Zeile 3'; sieht das Ergebnis dann wie im anliegenden Screenshot gezeigt aus.

Um diesen Fall der evtl. Gestaltung der Hints zu berücksichtigen baue ich das auch noch in meine Unit ein und lade die aktualisierte Fassung noch mal hoch.

Ich glaube ich habe noch nicht erwähnt, dass die Unit sowohl unter Windows, als auch unter Linux und MacOS funktioniert.
Angehängte Grafiken
Dateityp: png Hints.png (6,7 KB, 12x aufgerufen)

Geändert von Harry Stahl ( 1. Nov 2023 um 15:51 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:08 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz