AGB  ·  Datenschutz  ·  Impressum  







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

Editcontrol

Ein Thema von MatthiasW · begonnen am 11. Jul 2003 · letzter Beitrag vom 17. Jul 2003
Antwort Antwort
MatthiasW

Registriert seit: 29. Jan 2003
Ort: Reichenbach
253 Beiträge
 
Delphi 2009 Professional
 
#1

Editcontrol

  Alt 11. Jul 2003, 21:27
Hallo,

ich programmiere mir ein neue Edit - Control. Dieses habe ich von TCustomEdit abgeleitet und den Borderstyle auf none und die Ctl3D eigenschaft auf False gestellt um ein planes control zu bekommen. Leider wird jetzt der Text im Control an die obere linke Ecke geheftet.

Kann mir jemand sagen wie ich das Control davon überzeugen kann, das dieser Text wieder mehr mittig ausgerichtet wird? Gibts da ne möglichkeit, wo ich die genaue Position von dem Text ausgeben kann?

Mfg Matthias
  Mit Zitat antworten Zitat
Benutzerbild von Jens Schumann
Jens Schumann

Registriert seit: 27. Apr 2003
Ort: Bad Honnef
1.644 Beiträge
 
Delphi 2009 Professional
 
#2

Re: Editcontrol

  Alt 12. Jul 2003, 17:32
Hallo,
wenn Du in die VCL-Sourcen schaust liegt meines erachtens das Problem in UpdateHeight und AdjustHeight.
Das Problem liegt hier zu einem hier:
Code:
  if FAutoSize{ and (BorderStyle = bsSingle)} then
  begin
    ControlStyle := ControlStyle + [csFixedHeight];
    AdjustHeight;
  end
   else
    ControlStyle := ControlStyle - [csFixedHeight];
Es wird nur AdjustHeigth aufgerufen wenn BorderStyle=bsSingle ist.
Zum anderen liegt noch ein Problem in AdjustHeight:
Code:
  if NewStyleControls then
  begin
    if Ctl3D then I := 8 else I := 6;
     I := GetSystemMetrics(SM_CYBORDER) * I;
  end else
I:=6 wenn Ctl§d=False. 6 ist zuviel wenn BorderStyle auf bsNone steht besser wäre 2.
Die beiden Methoden sind leider private. So kannst Du Sie nicht überschreiben.
Wenn Du jedoch die die VCL-Sourcen Datei StdCtrls.pas mit in das Verzeichnis Deiner Komponente kopierst kannst Du die Änderungen direkt in der Datei machen. Das hat aber folgenden Haken -> Du kannstDeine Komponente nicht mit Sourcen weitergeben. Wg Lizenzbestimmungen und so. Du müsstest auch die geänderte StdCtrls.pas weitergeben. Das ist verboten.
Wenn Dir das aber egal ist, kannst Du die beiden Methoden wie folgt abändern
Delphi-Quellcode:
procedure TCustomEdit.UpdateHeight;
begin
  if FAutoSize{ and (BorderStyle = bsSingle)} then //einmal hier
  begin
    ControlStyle := ControlStyle + [csFixedHeight];
    AdjustHeight;
  end
   else
    ControlStyle := ControlStyle - [csFixedHeight];
end;

procedure TCustomEdit.AdjustHeight;
var
  DC: HDC;
  SaveFont: HFont;
  I: Integer;
  SysMetrics, Metrics: TTextMetric;
begin
  DC := GetDC(0);
  GetTextMetrics(DC, SysMetrics);
  SaveFont := SelectObject(DC, Font.Handle);
  GetTextMetrics(DC, Metrics);
  SelectObject(DC, SaveFont);
  ReleaseDC(0, DC);
  if NewStyleControls then
  begin
    if Ctl3D then I := 8 else I := 6;
    If BorderStyle=bsNone then // und einmal hier
      I:=2;
    I := GetSystemMetrics(SM_CYBORDER) * I;
  end else
  begin
    I := SysMetrics.tmHeight;
    if I > Metrics.tmHeight then I := Metrics.tmHeight;
    I := I div 4 + GetSystemMetrics(SM_CYBORDER) * 4;
  end;
  Height := Metrics.tmHeight + I;
end;
Du könnest auch die Höhe der Komponente verkleinern, dann ist der Text auch in der Mitte. Dann ist die Höhe aber Fix. D.h. bei einer Font Änderung wird die Höhe nicht angepasst.
  Mit Zitat antworten Zitat
MatthiasW

Registriert seit: 29. Jan 2003
Ort: Reichenbach
253 Beiträge
 
Delphi 2009 Professional
 
#3

Re: Editcontrol

  Alt 17. Jul 2003, 08:32
Tja, da gibts noch ne andere Möglichkeit: Ich programmiere meinen Eigenen CustomEdit

Mfg Matthias
  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 08:06 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