Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   [FMX] UI wird nicht sauber gezeichnet (https://www.delphipraxis.net/190545-%5Bfmx%5D-ui-wird-nicht-sauber-gezeichnet.html)

Darlo 14. Okt 2016 14:16

[FMX] UI wird nicht sauber gezeichnet
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo zusammen,

leider passiert es in meiner Anwendung vermehr, dass die Oberfläche nicht sauber gezeichnet wird und unsichtbare Ränder von TLayouts oder TLabels als schwarzer Strich angezeigt werden.
Bis jetzt ist dieses Verhalten nur unter Windows zu sehen. IOS und OS X werden richtig dargestellt. Kennt jemand das Problem bzw. hat eine Lösung hierfür?

Gruß

Mavarik 14. Okt 2016 16:58

AW: [FMX] UI wird nicht sauber gezeichnet
 
Zitat:

Zitat von Darlo (Beitrag 1350887)
leider passiert es in meiner Anwendung vermehr, dass die Oberfläche nicht sauber gezeichnet wird und unsichtbare Ränder von TLayouts oder TLabels als schwarzer Strich angezeigt werden.

hmm übel...

Hab ich noch nie gesehen,,,

Auf "allen" Rechnern?
Altes Windows oder alter Grafiktreiber?
Dynamisch erzeugt oder per OI?

In TestApp nach zu vollziehen?

Mavarik

Darlo 14. Okt 2016 18:40

AW: [FMX] UI wird nicht sauber gezeichnet
 
Ist ein Windows 10 System, alle Grafiktreiber aktuell. Das Problem tritt auf diversen Rechnern auf, von Windows Xp - Server 2012. Auch als Webanwendung mit Virtual UI das selbe Problem.
Vermute dass es an dem Style liegt, den ich aus XE 7 übernommen habe. Allerdings verschwinden die Fehler wenn ich zum Beispiel den Fokus auf ein Edit setze, zumindest meistens. Da manchmal das UI fehlerfrei ist kann es aber eigentlich nicht am Style liegen, oder?

Die Controls werden zur Laufzeit auf das Main-Form geholt, jedoch nicht dynamisch erzeugt.

himitsu 14. Okt 2016 19:27

AW: [FMX] UI wird nicht sauber gezeichnet
 
Hast du mal versucht Top/Left ein bissl zu verschieben?
z.B. um 0,5

Ändert sich da der Rand der Labels?
Aber wenn es die selbe Farbe ist, dann hätte ich gedacht, dass sich die gesamtfarbe nicht ändert, selbst wenn da das Blau des Labels mit dem des Hintergrundes verrechnet wird.

Ich hatte schon "unscharfe" Linien und Schrift und konnte den Effekt durch minimales Verschieben mindern.

Darlo 17. Okt 2016 18:45

AW: [FMX] UI wird nicht sauber gezeichnet
 
Liste der Anhänge anzeigen (Anzahl: 1)
Bis jetzt hab ich leider noch keine Lösung gefunden, dafür aber ein neues Problem. Sobald ich das UI Skaliere (Controls vergrößere) tauchen u.a. bei Tedit unschöne Linien auf.
http://www.delphipraxis.net/attachme...1&d=1476726298
Ich bin mir sicher dass das selbe Problem hier im Forum bereits besprochen wurde, finde nur leider den Thread nicht mehr.

bra 18. Okt 2016 08:53

AW: [FMX] UI wird nicht sauber gezeichnet
 
Ich hatte gestern bei einem Kunden ein seltsames Phänomen, da wurden Teile der GUI unserer Windows-App plötzlich schwarz. Ich vermute das ist ein Treiber-Problem. Ich habe dann bei der Verknüpfung unter Kompatiblität mal die Designs und visuellen Stile deaktiviert, seitdem tritt das nicht mehr auf. Vielleicht hilft das bei dir auch?

Darlo 18. Okt 2016 10:32

AW: [FMX] UI wird nicht sauber gezeichnet
 
Liste der Anhänge anzeigen (Anzahl: 2)
Die Fehler treten nur auf wenn form.scale.x und y ungleich 1 ist.
Ich skaliere wie folgt:

Delphi-Quellcode:
procedure TfrmMain.FormResize(Sender: TObject);
var
  scaleX, scaleY, scaleFaktor: double;
begin

  if (frmMain.Height > 712) and (frmMain.Width > 1024) then
    begin
      //Für eine gleichmäßige Skallierung den kleineren Wert ermitteln
      scaleX := frmMain.ClientWidth/1024;
      scaleY := frmMain.ClientHeight/712;
      scaleFaktor := max(min(scaleX, scaleY),1);

      frmMain.laMain.Scale.X := scaleFaktor;
      frmMain.laMain.Scale.Y := scaleFaktor;
    end
  else
    begin
      scaleX := frmMain.ClientWidth/1024;
      scaleY := frmMain.ClientHeight/712;
      scaleFaktor := max(min(scaleX, scaleY),0.6);

      frmMain.laMain.Scale.X := scaleFaktor;
      frmMain.laMain.Scale.Y := scaleFaktor;
    end;

end;
Anbei eine Testanwendung. Wäre nett wenn jemand kurz testen könnte ob der Fehler bei ihm auch auftritt.

http://www.delphipraxis.net/attachme...1&d=1476783277

Mavarik 18. Okt 2016 10:46

AW: [FMX] UI wird nicht sauber gezeichnet
 
Schick bitte mal den Source zum testen...

Darlo 18. Okt 2016 11:53

AW: [FMX] UI wird nicht sauber gezeichnet
 
Code wollte ich anhängen, leider ist mir Delphi nach dem compilieren abgestürzt. Und jetzt... bekomme ich es in einer Testanwendung nicht mehr reproduziert.

Der schöne Günther 18. Okt 2016 11:57

AW: [FMX] UI wird nicht sauber gezeichnet
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hier wenigstens ein Screenshot von mir

Darlo 18. Okt 2016 12:24

AW: [FMX] UI wird nicht sauber gezeichnet
 
Danke, dann liegt es wohl nicht an meinem Rechner.
Versuche noch den Source bereitzustellen.

Mavarik 18. Okt 2016 13:10

AW: [FMX] UI wird nicht sauber gezeichnet
 
Zitat:

Zitat von Darlo (Beitrag 1351199)
Danke, dann liegt es wohl nicht an meinem Rechner.
Versuche noch den Source bereitzustellen.

Ein Resize fixed das Problem..
Versuch mal ein beginupdate endupdate

Darlo 18. Okt 2016 15:51

AW: [FMX] UI wird nicht sauber gezeichnet
 
Leider nicht. Ich aktiviere jetzt nach jedem View-Wechsel einen Timer der ein
Delphi-Quellcode:
myform.repaint
ausführt. Leider sieht man trotzdem für einen Bruchteil einer Sekunde die schwarzen Linien.

Mavarik 18. Okt 2016 22:19

AW: [FMX] UI wird nicht sauber gezeichnet
 
Zitat:

Zitat von Darlo (Beitrag 1351241)
Leider nicht. Ich aktiviere jetzt nach jedem View-Wechsel einen Timer der ein
Delphi-Quellcode:
myform.repaint
ausführt. Leider sieht man trotzdem für einen Bruchteil einer Sekunde die schwarzen Linien.

Also bei mir schon, wenn ich Deine Exe nehmen und nicht Vollbild habe, brauche ich "nur" nach dem Button Click 1x dir Größe des
Fensters ändern, schon sieht alles prima aus...

Daher mein Vorschlag..

Darlo 19. Okt 2016 19:19

AW: [FMX] UI wird nicht sauber gezeichnet
 
Sobald ich ein Resize manuell ausführen stimme ich Dir zu. Ein
Delphi-Quellcode:
myForm.OnResize(sender);
bringt jedoch nix.

himitsu 19. Okt 2016 21:04

AW: [FMX] UI wird nicht sauber gezeichnet
 
Zitat:

Zitat von Darlo (Beitrag 1351398)
Sobald ich ein Resize manuell ausführen stimme ich Dir zu. Ein
Delphi-Quellcode:
myForm.OnResize(sender);
bringt jedoch nix.

Natürlich nicht, denn das führt nur deine Eventmethode und keinen Code der Komponente aus.
Und wenn du kein Event angehängt hast, dann knallt das auch wunderschön.

Darlo 19. Okt 2016 21:05

AW: [FMX] UI wird nicht sauber gezeichnet
 
Macht Sinn. Wie dann?

hoika 20. Okt 2016 05:49

AW: [FMX] UI wird nicht sauber gezeichnet
 
Hallo,
Form.Invalidate?

Darlo 20. Okt 2016 06:41

AW: [FMX] UI wird nicht sauber gezeichnet
 
Ich mache ja einen Repaint. Das ist doch ein invalidate und ein update, oder?

Der schöne Günther 8. Nov 2016 12:02

AW: [FMX] UI wird nicht sauber gezeichnet
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich wüsste aber langsam auch gerne wie man aus der Nummer wieder herauskommt. Es ist ja anscheinend dass er die einzelnen Teile des "Bitmap-Stil-Designers" nicht so ganz richtig aufeinanderlegt. Im Anhang einmal ein Beispiel mit einem TButton. Ich denke mal das ist einfach so und man kann nichts dagegen tun, oder?

Darlo 8. Nov 2016 12:46

AW: [FMX] UI wird nicht sauber gezeichnet
 
Zitat:

Zitat von Der schöne Günther (Beitrag 1352979)
Ich wüsste aber langsam auch gerne wie man aus der Nummer wieder herauskommt. Es ist ja anscheinend dass er die einzelnen Teile des "Bitmap-Stil-Designers" nicht so ganz richtig aufeinanderlegt. Im Anhang einmal ein Beispiel mit einem TButton. Ich denke mal das ist einfach so und man kann nichts dagegen tun, oder?

Das ist die Sache, die für mich nicht nachvollziehbar ist, dass genau dieser Fehler nicht immer auftaucht. Mal wird es in einer View richtig angezeigt mal wieder nicht...

Der schöne Günther 8. Nov 2016 14:18

AW: [FMX] UI wird nicht sauber gezeichnet
 
Ich denke es tritt per se auf, nur manchmal deutlich sichtbar, manchmal weniger deutlich. Hast du nochmal ein Quellcodebeispiel? Bei mir reicht es ein TScaledLayout zu nehmen und einen Button reinzustecken.

Harry Stahl 8. Nov 2016 16:29

AW: [FMX] UI wird nicht sauber gezeichnet
 
Zitat:

Zitat von Der schöne Günther (Beitrag 1352979)
Ich wüsste aber langsam auch gerne wie man aus der Nummer wieder herauskommt. Es ist ja anscheinend dass er die einzelnen Teile des "Bitmap-Stil-Designers" nicht so ganz richtig aufeinanderlegt. Im Anhang einmal ein Beispiel mit einem TButton. Ich denke mal das ist einfach so und man kann nichts dagegen tun, oder?

Hier hatte ich mal einen WorkAround dazu gepostet:

http://www.delphipraxis.net/179890-u...itfeldern.html

Der schöne Günther 8. Nov 2016 16:47

AW: [FMX] UI wird nicht sauber gezeichnet
 
Nein, ich meinte nicht die Edit-Geschichte.

Ich habe (zumindest bislang) keine komischen Linien in Edit-Feldern. Ich habe dass, wenn man genau hinschaut, bei starker Vergrößerung sieht wie die Komponenten aus einzelnen Bitmaps zusammengesetzt werden. Das sollte die Abbildung des Buttons weiter oben zeigen.

Harry Stahl 8. Nov 2016 16:57

AW: [FMX] UI wird nicht sauber gezeichnet
 
Liste der Anhänge anzeigen (Anzahl: 1)
Wäre hilfreich, wenn Du mal einen Beispiel-Code posten würdest, bislang habe ich nur Bilder und Exe-Dateien gefunden (so kann ich nicht nachvollziehen, welche Komponenten-Zusammenstellung Du da letztlich genau verwendest), oder habe ich was übersehen?

Davon abgesehen, halte ich es aber nicht für ausgeschlossen, dass es die gleiche Problematik wie bei den Edit, ComboBox, Buttons, Listbox usw. -Controls sein könnte. Zumindest der Button in Deiner Beispiel-Exe hat bei mir blaue Linien (siehe anliegenden Screenshot).

himitsu 8. Nov 2016 16:59

AW: [FMX] UI wird nicht sauber gezeichnet
 
Im Prinzip nutzt FMX auch in der HD-Variante eine 3D-Grafikengine und die arbeitet halt nicht mit ganzen Pixeln ... da kann schonmal bissl was 'nen Hauch verrutschen und schon hat man unscharfe Kanten, unscharfe Schrift, komische Linien und wer weiß was sonst noch. :stupid:

Du bauchst einfach nur 'en UltraHD-Display mit megavielen DPI ... da fallen dann diese kleinen Fehler nicht mehr auf, wenn sie nur 'nen Pixel breit sind. :lol:

PS: Sowas bitte nicht als JPEG ... nehmt doch bitte PNG oder ein anderes verlustfreies Format.
Sonst sieht man mehr Fehler/Unschärfen, als es gibt. :zwinker:

Harry Stahl 8. Nov 2016 17:16

AW: [FMX] UI wird nicht sauber gezeichnet
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von himitsu (Beitrag 1353020)
Im Prinzip nutzt FMX auch in der HD-Variante eine 3D-Grafikengine und die arbeitet halt nicht mit ganzen Pixeln ... da kann schonmal bissl was 'nen Hauch verrutschen und schon hat man unscharfe Kanten, unscharfe Schrift, komische Linien und wer weiß was sonst noch. :stupid:

Du bauchst einfach nur 'en UltraHD-Display mit megavielen DPI ... da fallen dann diese kleinen Fehler nicht mehr auf, wenn sie nur 'nen Pixel breit sind. :lol:

PS: Sowas bitte nicht als JPEG ... nehmt doch bitte PNG oder ein anderes verlustfreies Format.
Sonst sieht man mehr Fehler/Unschärfen, als es gibt. :zwinker:

OK, stimmt, anliegend noch mal als verlustfreies PNG.

Der schöne Günther 8. Nov 2016 17:41

AW: [FMX] UI wird nicht sauber gezeichnet
 
Liste der Anhänge anzeigen (Anzahl: 2)
Anbei einmal ein komplettes Sample. Einfach neue Anwendung und diesen Code einfügen:
Delphi-Quellcode:
implementation uses FMX.Layouts, FMX.StdCtrls, FMX.Styles;

{$R *.fmx}

procedure TForm1.FormCreate(Sender: TObject);
var
   newLayout:      TScaledLayout;
   paddingRect:   TRectF;
   newButton:      TTextControl;
begin
   ClientWidth := 80; ClientHeight := 60;

   newLayout := TScaledLayout.Create(self);
   newLayout.Parent := self;
   newLayout.Size.Size := TSizeF.Create(ClientWidth, ClientHeight);
   newLayout.OriginalWidth := ClientWidth;
   newLayout.OriginalHeight := ClientHeight;
   newLayout.Align := TAlignLayout.Fit;

   paddingRect := newLayout.Margins.Rect;
   paddingRect.Offset(6, 6);
   newLayout.Margins.Rect := paddingRect;

   newButton := TButton.Create(self);
   newButton.Parent := newLayout;
   newButton.Align := TAlignLayout.Client;
   newButton.Text := 'FMX';
   newButton.OnClick := handleButtonClick;
end;

procedure TForm1.handleButtonClick(Sender: TObject);
var
   openDialog: TOpenDialog;
begin
   openDialog := TOpenDialog.Create(nil);
   try
      if openDialog.Execute() then
         TStyleManager.SetStyleFromFile(openDialog.FileName);
   finally
      openDialog.Destroy();
   end;
end;
Wenn man auf den Button drückt kann man eine FMX-Style-Datei einladen und anwenden. Das zeigt wohl: FMX an sich macht alles richtig, es sind wohl die Styles selber. Oder irgendetwas darin.

Anbei zwei Bilder: Sie zeigen einfach nur zwei unterschiedliche Styles. Der erste sieht in jeder Lebenslage traumhaft aus (!), beim zweiten sieht man leider überdeutlich diese komischen Linien.

Harry Stahl 8. Nov 2016 18:37

AW: [FMX] UI wird nicht sauber gezeichnet
 
Schon mal eins dazu: Wenn der Button im Gradient-Style gemalt wird, ist alles OK.

Probleme gibt es wohl nur bei dem normalen Zeichenstil. Ich fürchte, man müsste sich mal genau ansehen, wie FMX hier die Zeichenausgabe macht, da wird es ein Rundungsproblem geben oder ein Clipping-Problem (falsche Grenzen).


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:30 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