AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Größe von Checkbox/RadioButton bei großen Schriftarten
Thema durchsuchen
Ansicht
Themen-Optionen

Größe von Checkbox/RadioButton bei großen Schriftarten

Ein Thema von Bernhard Geyer · begonnen am 3. Jan 2007 · letzter Beitrag vom 7. Jan 2007
 
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.222 Beiträge
 
Delphi 10.4 Sydney
 
#1

Größe von Checkbox/RadioButton bei großen Schriftarten

  Alt 3. Jan 2007, 16:28
Ich brauche für meine Anwendung die größe der CheckBox bzw. des RadioButtons bisher versuche ich mit folgenden Code auch große Schriftarten korrekt bezüglich der veränderten größe der Checkboxen abzubilden:


Delphi-Quellcode:
const
  CheckBoxSize = 13;

procedure DrawMyGridCheckBox(Grid: TMyGrid; Checked: Boolean; Surface: TCanvas; R: TRect);

  function MulDivPixelsPerInch(Value: Integer): Integer;
  begin
    if Assigned(Screen) then
      result := MulDiv(CheckBoxSize, Screen.PixelsPerInch, 96)
    else
      result := 1;
  end;

var
  pid, sid: Integer;
  Bitmap: TBitmap;
  CheckRect: TRect;
  RealRect: TRect;
  i: Integer;
  CheckTheme: HTheme;
begin
  Bitmap := TBitmap.Create;
  try
    // Berücksichtige lineare vergößerung aufgrund des Schriftgrades
    Bitmap.Width := MulDivPixelsPerInch(CheckBoxSize);
    Bitmap.Height := MulDivPixelsPerInch(CheckBoxSize);

    if Grid.IsThemeApplied then
    begin
      pid := BP_CHECKBOX;

      if Checked then
        sid := CBS_CHECKEDNORMAL
      else
        sid := CBS_UNCHECKEDNORMAL;

      CheckRect := Rect(0, 0, Bitmap.Width, Bitmap.Height);

      CheckTheme := OpenThemeData(Grid.Handle, 'BUTTON');
      try
// GetThemeBackgroundContentRect(CheckTheme, Bitmap.Canvas.Handle, pid, sid, CheckRect, RealRect);
// GetThemeBackgroundExtent(CheckTheme, Bitmap.Canvas.Handle, pid, sid, @CheckRect, RealRect);
        DrawThemeBackground(CheckTheme, Bitmap.Canvas.Handle, pid, sid, CheckRect, nil);
      finally
        CloseThemeData(CheckTheme);
      end;
    end
    else
    begin
      if Checked then
        i := DFCS_BUTTONCHECK or DFCS_CHECKED
      else
        i := DFCS_BUTTONCHECK;

      DrawFrameControl(Bitmap.Canvas.Handle, Rect(0, 0, Bitmap.Width, Bitmap.Height), DFC_BUTTON, i);
    end;

    // Grenzen setzen damit nicht auserhalb zugewiesener Zeichenfläche ....
    CheckRect.Left := Max(R.Left, R.Left + (R.Right - R.Left - Bitmap.Width) div 2);
    CheckRect.Top := Max(R.Top, R.Top + (R.Bottom - R.Top - Bitmap.Height) div 2);
    CheckRect.Right := Min(R.Right, CheckRect.Left + Bitmap.Width);
    CheckRect.Bottom := Min(R.Bottom, CheckRect.Top + Bitmap.Height);

    // Kopieren auf Grid-Canvas
    bitblt(Surface.Handle, CheckRect.Left, CheckRect.Top, CheckRect.Right - CheckRect.Left,
           CheckRect.Bottom - CheckRect.Top, Bitmap.Canvas.Handle, 0, 0, SRCCOPY);
  finally
    Bitmap.Free;
  end;
end;
Aber irgendwie werden meine Checkboxen z.B. bei Schriftgröße 150% zu große. Ich bekomme eine CheckBox von 20*20, jedoch verwendet Windows die Größe 16 was nur eine vergrößerung des Controls um 25% ausmacht.

Irgendeiner eine Idee wie ich diese größe herausbekomme? Die auskommentierten GetThemeBackground...-Funktionen bringen auch nichts. Ich brauche aber die korrekte größe damit ich keinen Trauerrand bekomme wenn z.B. die Zeile fokusiert ist und damit der Focusrahmen nicht mehr komplett anliegt.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
 


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 10:20 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