AGB  ·  Datenschutz  ·  Impressum  







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

FireMonkey Problem

Ein Thema von arnof · begonnen am 16. Jul 2018 · letzter Beitrag vom 23. Feb 2019
Antwort Antwort
Seite 1 von 2  1 2      
arnof

Registriert seit: 25. Apr 2013
1.254 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#1

FireMonkey Problem

  Alt 16. Jul 2018, 16:55
Hi,

ich mache gerade eine Anwendung die "überall" laufen soll, also in Firemonkey.

Nun erster Test mit Win = ok, Anroid Zugriffverletzung ......

Tokyo 10.2.x:

Warum: TMultiView, ich lasse es erscheinen und dann

Delphi-Quellcode:
procedure TCommonCustomForm.TriggerControlHint(const AControl: IControl);
var
  LHintString: string;
  LControl: IControl;
begin
  if AControl.HasHint then
    LControl := AControl
  else
    LControl := nil;
  if LControl <> FLastHinted then
  begin
    if Application.ShowHint and (LControl <> nil) then
    begin
      SetLastHinted(AControl);
      LHintString := AControl.GetHintString;
      if (AControl.GetHintObject = nil) or not (AControl.GetHintObject is THint) then
      begin
        SharedHint.SetHint(GetShortHint(LHintString));
SharedHint ist nil, dann knall es .....

Hint bei Button der auf dem Multiview ist entfernt nun gehts .....

Geändert von arnof (16. Jul 2018 um 17:02 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe
Online

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.462 Beiträge
 
Delphi 12 Athens
 
#2

AW: FireMonkey Problem

  Alt 16. Jul 2018, 17:07
Soweit ich weiß, gibt es Hints nur bei Windows und MacOS. Aber das sollte jedenfalls nicht zu einem Fehler führen.

Kannst du das in einem Minimalprojekt reproduzieren und dafür einen QP-Eintrag anlegen?
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

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

AW: FireMonkey Problem

  Alt 16. Jul 2018, 17:45
Soweit ich weiß, gibt es Hints nur bei Windows und MacOS.
Jupp, Handy/Tablet hat ja praktisch keine Maus, bei welcher es ein "sinnvolles" MouseOver-Ereignis geben könnte.



FMX selber hat noch nicht lange Hints, daher wird dort bisher kaum jemand etwas eingetragen haben. Bei den Meisten ist somit HasHint nicht True und der nachfolgende Code wird nirgendwo ausgeführt und niemand könnte Fehler in diesen Funktionen entdecken.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe
Online

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.462 Beiträge
 
Delphi 12 Athens
 
#4

AW: FireMonkey Problem

  Alt 16. Jul 2018, 17:55
Um das alles etwas einfacher zu machen, könnte man eine Dummy-THintClass verwenden, die immer dann erzeugt wird, wenn keine andere Klasse registriert ist. Dann spart man sich überall die Überprüfung, ob SharedHint eventuell nil liefert. Wenn du mir den QP-Eintrag nennst, kann ich das im Comment unterbringen.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
arnof

Registriert seit: 25. Apr 2013
1.254 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#5

AW: FireMonkey Problem

  Alt 16. Jul 2018, 18:04
Soweit ich weiß, gibt es Hints nur bei Windows und MacOS. Aber das sollte jedenfalls nicht zu einem Fehler führen.

Kannst du das in einem Minimalprojekt reproduzieren und dafür einen QP-Eintrag anlegen?
Das war ein Minimalprojet:

TMultiview

mit Toolbar und einem Button, der einen Hint hat

Auf einem Handy ist die Multiview ausgeblendet, sobald sie sichtbar wird gab es eine Schutzverletzung.

Wie ich oben geschrieben hatte, soll die Anwendung auf allen Plattformen laufen, also sind die Hints nicht sinnfrei, sondern bei Windows üblich.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe
Online

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.462 Beiträge
 
Delphi 12 Athens
 
#6

AW: FireMonkey Problem

  Alt 16. Jul 2018, 18:29
Probier mal folgenden Code in deinem Mainform:
Delphi-Quellcode:
type
  TDummyHint = class(THint)
  public
    procedure SetPosition(const X: Single; const Y: Single); override;
  end;

procedure TDummyHint.SetPosition(const X, Y: Single);
begin
end;

initialization
  THint.RegisterClass(TDummyHint);
end.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.538 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: FireMonkey Problem

  Alt 17. Jul 2018, 00:05

FMX selber hat noch nicht lange Hints, daher wird dort bisher kaum jemand etwas eingetragen haben. Bei den Meisten ist somit HasHint nicht True und der nachfolgende Code wird nirgendwo ausgeführt und niemand könnte Fehler in diesen Funktionen entdecken.
FMX hatte schon von Anfang an Hint- und Showhint-Property, nur waren die als protected Property deklariert und es gab keine Behandlungsroutinge dafür. Mit meiner HS_FMXHints.pas unit (http://www.devpage.de/blog/firemonkey.htm, vgl. dort Beitrag 8) konnte man aber bis FMX2 runter Hints verwenden. Seit Delphi 10.1 sind die Hints öffentlich und werden auch behandelt.

Allerdings hat man selbst bei Delphi 10.2 bei einigen Komponenten "vergessen" diese Eigenschaften zu veröffentlichen, z.B. bei der TComboColorBox. Aber hier kann man bei Bedarf die entsprechenden Properties zur Laufzeit setzen, dann werden die auch angezeigt.
  Mit Zitat antworten Zitat
Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.538 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: FireMonkey Problem

  Alt 17. Jul 2018, 00:10
Hi,

ich mache gerade eine Anwendung die "überall" laufen soll, also in Firemonkey.

Nun erster Test mit Win = ok, Anroid Zugriffverletzung ......

Tokyo 10.2.x:

Warum: TMultiView, ich lasse es erscheinen und dann

Delphi-Quellcode:
procedure TCommonCustomForm.TriggerControlHint(const AControl: IControl);
var
  LHintString: string;
  LControl: IControl;
begin
  if AControl.HasHint then
    LControl := AControl
  else
    LControl := nil;
  if LControl <> FLastHinted then
  begin
    if Application.ShowHint and (LControl <> nil) then
    begin
      SetLastHinted(AControl);
      LHintString := AControl.GetHintString;
      if (AControl.GetHintObject = nil) or not (AControl.GetHintObject is THint) then
      begin
        SharedHint.SetHint(GetShortHint(LHintString));
SharedHint ist nil, dann knall es .....

Hint bei Button der auf dem Multiview ist entfernt nun gehts .....
Generell ist es kein Problem die Hint-Properties gesetzt zu haben, die werden auf den mobilen Plattformen einfach nicht berücksichtigt.

Ich weiß zwar nicht, was Du da überhaupt machst, aber Du solltest es genau so machen: Wenn Dein Code auf einer mobilen Plattform läuft, dann braucht er doch gar nicht ausgeführt werden, da dort keine Hints angezeigt werden. Kannst Du ja dann den Code mit den entsprechenden IFDEFS außen vor lassen...
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe
Online

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.462 Beiträge
 
Delphi 12 Athens
 
#9

AW: FireMonkey Problem

  Alt 17. Jul 2018, 00:33
Generell ist es kein Problem die Hint-Properties gesetzt zu haben, die werden auf den mobilen Plattformen einfach nicht berücksichtigt.
In diesem Fall ist das aber ein Fehler in FMX. Der Zugriff auf SharedHint kann nil zurückliefern, da dort bei Bedarf THint.CreateNewInstance aufgerufen wird (eben um eine Instanz zu erzeugen). Allerdings sagt die Hilfe zu CreateNewInstance:
Zitat:
Returns an instance created by the first available registered class. This method can return nil if there are no classes registered or none of the registered classes can create a THint instance.
Es werden aber nur für Windows und MacOS solche Klassen registriert. Deswegen liefert SharedHint auf allen anderen Systemen nil und der Aufruf in TriggerControlHint verursacht eine Zugriffsverletzung.

Mein Code-Schnipsel weiter oben soll das beheben, in dem er eine Dummy-Klasse registriert, die in dem oben angesprochenen Fall einspringt.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.538 Beiträge
 
Delphi 11 Alexandria
 
#10

AW: FireMonkey Problem

  Alt 18. Feb 2019, 17:35
Das Problem ist anscheinend immer noch nicht gefixt (also auch nicht in 10.3.1).

Nach einer verzweifelten Suche von mehreren Stunden nach einem unerklärlichen Fehler habe ich hier endlich dieses Problem für IOS und Android ausfindig machen können.

Wurde das von jemanden gemeldet?
Wenn nein, würde ich einen Eintrag machen.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 17:56 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz