AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte mal wieder 'ne Uhr
Thema durchsuchen
Ansicht
Themen-Optionen

mal wieder 'ne Uhr

Ein Thema von markus5766h · begonnen am 20. Mär 2016 · letzter Beitrag vom 22. Mär 2016
Antwort Antwort
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

AW: mal wieder 'ne Uhr

  Alt 21. Mär 2016, 16:18
Hab' mir eben noch mal die *.dfm angesehen :
die Images sind da, wo sie hin gehören, lässt sich leicht nachrechnen.
Ok img1 ist die erste Ziffer:
Zitat:
img1.Left = 20
img1.Width = 98
img1.Picture.Bitmap.Width = 80
img1.Stretch = false
img1.Autosize = false
rechts daneben ist "Image1", eine Trennspalte zwischen der ersten und 2. Ziffer.
Zitat:
Image1.Left = 118
und rein rechnerisch (!) ist da eine 18 Pixel große Lücke zwischen der ersten Ziffer und der Trennspalte zwischen erster und zweiter Ziffer.
Und diese Lücke ist auch sowohl im Form-Designer als auch zur Laufzeit deutlich zu sehen wie du auf den Screenshots hier sehen kannst.

Es KANN so also gar nicht stimmen.
Benutze zum Testen Windows 7 und Delphi 7. Windows-Skalierung: 100%


EDIT: Okay ich muss das ein oder andere zurücknehmen.
Wenn ich deinen Code runterlade hat img1 eine Breite von 80 Pixeln (statt 98) und img1.Left ist 18 und nicht 20.
Sobald ich das Projekt aber in Delphi 7 öffne steht Left = 20 und Width = 98 drin.
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."

Geändert von Neutral General (21. Mär 2016 um 16:25 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von markus5766h
markus5766h

Registriert seit: 5. Mär 2009
Ort: Hamburg
569 Beiträge
 
Delphi XE8 Professional
 
#2

AW: mal wieder 'ne Uhr

  Alt 21. Mär 2016, 16:31
. . .
Wenn ich deinen Code runterlade hat img1 eine Breite von 80 Pixeln (statt 98) und img1.Left ist 18 und nicht 20.
Sobald ich das Projekt aber in Delphi 7 öffne steht Left = 20 und Width = 98 drin.
img1.Left muss aber 16 sein, alle Größen und Positionen sind durch 16 teilbar, da die Ursprungsgrafik eine LED
in den Abmessungen 16*16 Pixel war.
Markus H.
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#3

AW: mal wieder 'ne Uhr

  Alt 21. Mär 2016, 16:39
. . .
Wenn ich deinen Code runterlade hat img1 eine Breite von 80 Pixeln (statt 98) und img1.Left ist 18 und nicht 20.
Sobald ich das Projekt aber in Delphi 7 öffne steht Left = 20 und Width = 98 drin.
img1.Left muss aber 16 sein, alle Größen und Positionen sind durch 16 teilbar, da die Ursprungsgrafik eine LED
in den Abmessungen 16*16 Pixel war.
Eh ja sie ist 16, hatte mich verschrieben.
Also der Code ist scheinbar tatsächlich so in Ordnung, aber Delphi machts aus irgendeinem Grund kaputt.
Sowas hatte ich noch nie. Wie kommt mein Delphi darauf, aus Left=16 und Width=80, Left=20 und Width=98 zu machen?
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#4

AW: mal wieder 'ne Uhr

  Alt 21. Mär 2016, 16:42
Habe das Programm mit Delphi 7 geöffnet, kompiliert: passt.

Aber trotzdem hab' ich mal am Quelltext was geändert, damit zur Laufzeit die Bilder positioniert werden können.

Damit könnten dann eventuelle Bildgrößenänderungen (die von wem auch immer da reingewuselt werden) zu einer neuen Positionierung führen, so das hoffentlich) am Ende doch alles passt.
Delphi-Quellcode:
procedure TfrmMain.FormShow(Sender: TObject);
var
  hwndOwner: HWnd;
begin
  hwndOwner := GetWindow(Handle, GW_OWNER);
  ShowWindow(hwndOwner, SW_HIDE);
  Application.Icon := frmMain.Icon;
  if sLeft <> -99999 then frmMain.Left := sLeft;
  if sTop <> -99999 then frmmain.Top := sTop;
  Image8.Left := 0;
  img1.Left := Image8.Left + Image8.Width;
  Image1.Left := img1.left + img1.Width;
  img2.Left := Image1.Left + Image1.Width;
  Image2.Left := img2.Left + img2.Width;
  dp1.Left := Image2.Left + Image2.Width;
  Image3.Left := dp1.Left + dp1.Width;
  img3.Left := Image3.Left + Image3.Width;
  Image4.Left := img3.Left + img3.Width;
  img4.Left := Image4.Left + Image4.Width;
  Image5.Left := img4.Left + img4.Width;
  dp2.Left := Image5.Left + Image5.Width;
  Image6.Left := dp2.Left + dp2.Width;
  img5.Left := Image6.Left + Image6.Width;
  Image7.Left := img5.Left + img5.Width;
  img6.Left := Image7.Left + Image7.Width;
  Image9.Left := img6.Left + img6.Width;

  Image10.Top := 0;
  Image8.Top := Image10.Top + Image10.Height;
  img1.Top := Image8.Top;
  Image1.Top := Image8.Top;
  img2.Top := Image8.Top;
  Image2.Top := Image8.Top;
  dp1.Top := Image8.Top;
  Image3.Top := Image8.Top;
  img3.Top := Image8.Top;
  Image4.Top := Image8.Top;
  img4.Top := Image8.Top;
  Image5.Top := Image8.Top;
  dp2.Top := Image8.Top;
  Image6.Top := Image8.Top;
  img5.Top := Image8.Top;
  Image7.Top := Image8.Top;
  img6.Top := Image8.Top;
  Image9.Top := Image8.Top;

  Image11.Top := Image8.Top + Image8.Height;

  frmMain.ClientWidth := Image11.Width;
  frmMain.ClientHeight := Image11.Height + Image11.Top;

  ChangeDP(DColor);
  Timer1Timer(Self);
end;
  Mit Zitat antworten Zitat
Benutzerbild von markus5766h
markus5766h

Registriert seit: 5. Mär 2009
Ort: Hamburg
569 Beiträge
 
Delphi XE8 Professional
 
#5

AW: mal wieder 'ne Uhr

  Alt 21. Mär 2016, 16:56
. . . kann man so machen, aber ist IMHO nicht das, was ich mit Delphi erreichen will.
Wenn ich zur Entwurfszeit TImages mit einer festen Breite und Höhe - und einer Bitmap drin - erstelle,
dann möchte ich das auch so zur Laufzeit sehen - keinesfalls aber an anderer Position oder / und mit anderer Größe.
Mal weiter gedacht : wenn ich das mit allen visuellen Komponenten machen soll - tipp ich mir 'nen Wolf.
Das Formular hat eine feste Größe, also sollte sich da auch nichts ändern!
Markus H.
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#6

AW: mal wieder 'ne Uhr

  Alt 21. Mär 2016, 17:14
Zitat von markus5766h:
... kann man so machen, aber ist IMHO nicht das, was ich mit Delphi erreichen will.
Wenn ich zur Entwurfszeit TImages mit einer festen Breite und Höhe - und einer Bitmap drin - erstelle,
dann möchte ich das auch so zur Laufzeit sehen - keinesfalls aber an anderer Position oder / und mit anderer Größe.
Mal weiter gedacht : wenn ich das mit allen visuellen Komponenten machen soll - tipp ich mir 'nen Wolf.
Das Formular hat eine feste Größe, also sollte sich da auch nichts ändern!
Nein, so ganz stimmt das nicht.

Wenn ich möchte, dass alles passend oben, rechts, links, unten ist, dann arbeite ich mit Align. Dann ist es auch egal, ob der Anwender die gleiche Auflösung, die gleiche Schriftgröße, Skalierung... hat, wie ich, zur Zeit der Entwicklung, oder eben nicht.

Eigentlich gehört das obere Bild auf ein Panel, ebenso das untere auf ein anderes. Die "Ziffernreihe" gehört ebenfalls auf ein Panel. Alle Bilder bekommen dann Align := alLeft und schon befinden sie sich schön nebeneinander und eine veränderte Breite ist wurscht.

Das Grundsätzliche Problem liegt hier (vermutlich) auch nicht bei Delphi.

Habe die Sourcen auf Platte gespeichert, ausgepackt, mit Delphi geöffnet und F9 gedrückt.

Anschließend habe ich die Uhr korrekt angezeigt bekommen. Bei meiner Delphiversion und der Windowskonfiguration scheint es also zu klappen.

Wenn jemand anderes aber die Exe aus dem Forum geholt hat, und die dann startet und anschließend die Optik zerschossen ist, so liegt das nicht an Delphi.
Bei mir hat auch die Exe aus dem Forum einwandfrei ausgesehen.

Geändert von nahpets (21. Mär 2016 um 19:10 Uhr) Grund: Schreibfehler behoben
  Mit Zitat antworten Zitat
HolgerX

Registriert seit: 10. Apr 2006
Ort: Leverkusen
982 Beiträge
 
Delphi 6 Professional
 
#7

AW: mal wieder 'ne Uhr

  Alt 21. Mär 2016, 18:53
Hmm..

Also war meine Vermutung mit dem Scaling nicht ganz verkehrt..

Das die Bitmaps in den Images geblieben sind wie sie sollen, ist schon mal beruhigend.
Das durch das Scaling die Position und Größe der Controls beim Öffnen der Form verändert wird ist da schon ärgerlich.

Deshalb alles mit 100% entwickeln.

Es war in Vergangenheit auch aufgefallen, wenn eine Form auf WinXP designt wurde und diese dann auf Win7 geöffnet wurde, dann haben sich auch diverse Positionen leicht verändert.

Fazit:
Nutze nur ein Image für deine Uhr und male darauf den Hintergrund und die Zahlen absolut, dann kann Windows vergrößern was will, wenn das Image AutoSize hat, passt es sich am TBitmap an
  Mit Zitat antworten Zitat
Benutzerbild von markus5766h
markus5766h

Registriert seit: 5. Mär 2009
Ort: Hamburg
569 Beiträge
 
Delphi XE8 Professional
 
#8

AW: mal wieder 'ne Uhr

  Alt 22. Mär 2016, 09:25
... ja, das mit dem Scaling ist mir vorher nie aufgefallen,
nutze immer eine Scalierung von 100 %

Rar-Archiv im ersten Post aktualisiert, scaled = False
Markus H.

Geändert von markus5766h (22. Mär 2016 um 09:27 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#9

AW: mal wieder 'ne Uhr

  Alt 22. Mär 2016, 10:01
... ja, das mit dem Scaling ist mir vorher nie aufgefallen,
nutze immer eine Scalierung von 100 %

Rar-Archiv im ersten Post aktualisiert, scaled = False
Hat für mich nichts geändert. Der Abstand ist in der exe drin.
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
bcvs

Registriert seit: 16. Jun 2011
733 Beiträge
 
Delphi 12 Athens
 
#10

AW: mal wieder 'ne Uhr

  Alt 21. Mär 2016, 17:01
Da schlägt die Skalierung von Windows zu.

Ich konnte hier folgendes nachvollzieren:

Win7:
Bildschirmskalierung 125% : Bitmaps verschoben
Bildschirmskalierung 100% : Bitmaps OK

Win10:
DClock.exe original
alle Bildschirmauflösungen OK, Bitmaps verden skaliert

Dann habe ich unter Win 10 mein DPI-Aware-Maifest hinzugefügt (mit D2007) und dann waren die Bitmaps bei 125% wieder verschoben. Seltsamerweise bei 100% dann auch, wobei da auch das Popup-Menü vergrößert war. Windowes merkt sich hier anscheinend irgendeine Skalierungs-Einstellung.

Vielleicht haben neuere Delphi-Versionen von Haus aus dieses DPI-Aware-Mainfest drin, so dass es zu diesen unterschiedlichen Beobachtungen kommt.

Setzt mal einfach Scaled:=false ; dann müsste es besser aussehen.
  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 21:17 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