AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi VCL Ersatz für GetSystemMetrics(SM_CYSIZE) bitte
Thema durchsuchen
Ansicht
Themen-Optionen

VCL Ersatz für GetSystemMetrics(SM_CYSIZE) bitte

Ein Thema von KodeZwerg · begonnen am 7. Apr 2018 · letzter Beitrag vom 7. Apr 2018
Antwort Antwort
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.291 Beiträge
 
Delphi 12 Athens
 
#1

AW: VCL Ersatz für GetSystemMetrics(SM_CYSIZE) bitte

  Alt 7. Apr 2018, 13:36
Mich irritiert vor allem die gedankliche Trennung zwischen VCL und Win32. Die VCL ist aber keine Alternative dazu sondern ein Aufsatz. Daher sehe ich nicht dass man in der VCL etwas fände das einem GetSystemMetrics überlegen wäre. Ich vermute hinter der Ausgangsfrage steckt ein komplexeres Problem mit HighDPI-Anwendungen. Leider bin ich da mangels entsprechender Hardware raus. Allerdings wäre es sicher für die anderen gut zu wissen, um was es eigentlich wirklich geht.
Ich mache grundsätzlich keine Screenshots. Schießen auf Bildschirme gibt nämlich hässliche Pixelfehler und schadet der Gesundheit vom Kollegen gegenüber. I und E zu vertauschen hätte den selben negativen Effekt, würde aber eher dem Betriebsklima schaden
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: VCL Ersatz für GetSystemMetrics(SM_CYSIZE) bitte

  Alt 7. Apr 2018, 13:53
Mich irritiert vor allem die gedankliche Trennung zwischen VCL und Win32. Die VCL ist aber keine Alternative dazu sondern ein Aufsatz. Daher sehe ich nicht dass man in der VCL etwas fände das einem GetSystemMetrics überlegen wäre. Ich vermute hinter der Ausgangsfrage steckt ein komplexeres Problem mit HighDPI-Anwendungen.
Die Intention bei der Verwendung der VCL gegenüber des direkten WinApi-Zugriffs ist, daß man sich nicht mehr um solche DPI-Probleme kümmern muss. Natürlich basiert die VCL auf der WinApi und nutzt intern auch deren Funktionen, allerdings kapselt sie auch einen Großteil der Komplexität und verbirgt diese vor dem Programmierer. Es kann natürlich sein, daß die VCL das nicht immer richtig handhabt, aber das muss man dann eben beheben.

Meine Erwartung in dieser Hinsicht ist ganz klar, daß eine VCL-Anwendung (zumindest mit Standard-Controls) ohne irgendwelche manuellen Eingriffe High-DPI fähig ist. Arbeite ich mit Icons muss ich diese natürlich in den verschiedenen Auflösungen bereitstellen oder mich mit einem Auto-Scaling zufrieden geben. Da steht eben Aufwand gegen Aussehen und das muss man halt gegeneinander abwägen.

Wer nun partout direkt mit der WinApi hantieren muss, steht bei High-DPI mit GetSystemMetrics schnell auf verlorenem Posten. In dem Fall wäre dann vielleicht GetSystemMetricsForDpi die bessere Alternative. Ob das allein dann wirklich ausreicht ist allerdings fraglich.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#3

AW: VCL Ersatz für GetSystemMetrics(SM_CYSIZE) bitte

  Alt 7. Apr 2018, 16:15
Zitat:
Wer nun partout direkt mit der WinApi hantieren muss, steht bei High-DPI mit GetSystemMetrics schnell auf verlorenem Posten.
Ist das eine Annahme(Wissen) oder nur eine Vermutung.. Ich denke das letztere.

Wenn man seine Anwendung DPI fähig machen will kommt man nun mal nicht Drumherum dann auch jedes erstellte Fenster bzw. Control dementsprechend zu behandeln was die Weite und Höhe angeht.
Wie du schon sagst die VCL macht es automatisch wenn (dementsprechend angepasst).

Aber mir ist es egal ob ich DPI mit übergebe oder nur Clientweite, Clienthöhe.
Letztendlich sind das bei jedem wert nur 3 Buchstaben die ich vorhängen muss.

Und nein man steht mit GetSystemMetrics nicht auf verlorenen Posten warum auch?
Erkläre das bitte näher.

bsp: Aus meinem Player.. C++64
Man beachte das vorgehängte dpi zum Beispiel beim erstellen des Rect.
Code:
            DWORD dwStyle = WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX;
            RECT rc;
            SetRect(&rc, 0, 0, dpi(CLIENT_WIDTH), dpi(CLIENT_HEIGHT));
            AdjustWindowRectEx(&rc, dwStyle, FALSE, 0);
            long w = Width(rc); long x = (GetSystemMetrics(SM_CXSCREEN) - w) / 2;
            long h = Height(rc); long y = (GetSystemMetrics(SM_CYSCREEN) - h) / 2;
            gP.hMainMenu = BuildMenu();
            gP.hMain = CreateWindowEx(WS_EX_ACCEPTFILES, STR_CLASS, STR_TITLE, dwStyle, x, y, w, h, nullptr, gP.hMainMenu, hInstance, nullptr);
            if (gP.hMain) {
                if (InitKVPlayer(hInstance)) {
                    GetClientRect(gP.hMain, &rc);
                    y = Height(rc) - 80;

                    // Create movie slider
                    dwStyle = WS_VISIBLE | WS_CHILD | TBS_NOTICKS | TBS_FIXEDLENGTH;
                    CreateWindowEx(0, L"msctls_trackbar32", NULL, dwStyle, 0, y - 17, dpi(Width(rc)), dpi(18), gP.hMain, (HMENU)ID_SLIDER, hInstance, NULL);
Nun wo soll also hier nun ein Problem sein ?
Bin auch schon wieder weg da es hier um VCL geht .. wollte nur deine Behauptung (verlorener posten) widerlegen.

gruss

Geändert von EWeiss ( 7. Apr 2018 um 22:11 Uhr)
  Mit Zitat antworten Zitat
Daniel
(Co-Admin)

Registriert seit: 30. Mai 2002
Ort: Hamburg
13.920 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: VCL Ersatz für GetSystemMetrics(SM_CYSIZE) bitte

  Alt 7. Apr 2018, 16:20
Was hast Du denn bei diesem schönen Wetter für schlechte Laune? Und warum musst Du die gerade hier rauslassen? Zwingt Dich doch keiner ...
Daniel R. Wolf
mit Grüßen aus Hamburg
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#5

AW: VCL Ersatz für GetSystemMetrics(SM_CYSIZE) bitte

  Alt 7. Apr 2018, 16:29
Was hast Du denn bei diesem schönen Wetter für schlechte Laune? Und warum musst Du die gerade hier rauslassen? Zwingt Dich doch keiner ...
Ich habe nur gesagt das seine Annahme falsch ist.

gruss
  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 12:47 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