Dopisanie właściowści do klasy TEdit - wyrównanie tekstu w pionie

0

Witajcie.
Buduję program w delphi. Mam na formatce położone dwa pola Edit.
Chciałbym do wspomnianych pół dodać odstępy ze wszystkich stron tak żeby odsunąć tekst od brzegów, ale nie chcę tworzyć nowych komponentów.
Najlepiej gdyby dało się dodać do klasy TEdit właściwości (left, right, top, bottom) do ustawiania odstępu do krawędzi pola oraz właściwość pozycjonowania tekstu w pionie (do górnej krawędzi, pośrodku, do dolnej krawędzi).

Czy jest taka możliwość i jak to zrobić ?
Czy da się w Unicie głównym w jakiś sposób dopisać wspomniane właściwości do komponentu lub dopisać bezpośrednio do klasy ?

Pozdrawiam i dziękuję za pomoc.

1

Poniżej przykładowy fragment kodu użytego przeze mnie kiedyś w prostym generatorze krzyżówek rozwiązywanych z głownym hasłem do odgadnięcia w pionie. Chyba o takie coś mniej więcej chodzi? Tylko wiadomo, jeśłi zależy Tobie na innych properties to należy oprogramowac ich read oraz write. Tak jak się to robi pisząc komponenty od zera z polem property. W poniższym kodzie zastosowałem wyśrodkowanie tekstu we wszystkich standardowych komponentach TEdit kładzionych na forme. Ty w razie potrzeby możesz dziecidziczyć po TCustomEdit robią własny osobny komponent, ale tego jak rozumiem chcesz uniknąć, wzbogacając tylko to co oferuje standardowa kontrolka pola edycyjnego.

//...
type
  TEdit = class(StdCtrls.TEdit)
  protected
    procedure CreateParams(var Params : TCreateParams); override;
  end;
//...
procedure TEdit.CreateParams(var Params : TCreateParams);
begin
  inherited CreateParams(Params);
  Params.Style := Params.Style or ES_CENTER;
end;
//...
0

Rozwijając wypowiedź @olesio - subclassing spowoduje, że wszystkie pola edycyjne klasy TEdit istniejące na formularzu zostaną zmodyfikowane w ten sam sposób; Jeżeli potrzebna jest właściwość, dzięki której każdemu polu będzie można nadać inną (wybraną) wartość - trzeba będzie napisać swój komponent, dziedziczący z istniejącego.

0

TLabeledEdit jeśli chcesz mieć caption przy edicie oraz właściwość margins do marginesów.

0

Dzięki za pomoc ale jak zrobić żeby tekst w Edit był centrowany w pionie i poziomie bo rozumiem że parametr ES_CENTER centruje tylko w poziomie.
Na tej stronie http://mrxray.on.coocan.jp/Delphi/plSamples/168_TEdit_VerticalAligment.htm znalazłem komponent z centrowaniem w pionie ale czy można to przenieść do unitu głównego i zastosować do pola Edit ale rzecz jasna bez użycia właściwości "VertAlignment" bo takiej ten komponent nie ma.

Tutaj http://sbabzc.iteye.com/blog/1819966 znalazłem jak dodać metodę do klasy TEdit w głównym Unicie bez tworzenia komponentu.
Akurat ta metoda centruje w pionie tekst w komponencie czyli tak jak chciałem.
Pełnią szczęścia byłoby dodać właściwości z możliwością ustawiania wewnętrznych marginesów tak żeby np odsunąć tekst od lewej krawędzi.

0

Tutaj trzeba by się chyba pobawić w ręczne rysowanie tekstu żeby był pośrodku. Albo coś z tą zmienną Rct w kodzie z drugiego linka.

0
wilkolaski napisał(a):

Witajcie.
Czy da się w Unicie głównym w jakiś sposób dopisać wspomniane właściwości do komponentu lub dopisać bezpośrednio do klasy ?

Tak da się robiąc class helpera np tak:

type
  TEditHelper = class helper for TEdit
  public
    procedure MyLeftMargin(const: pLeft: Integer);
    procedure MyRightMargin(const: pLeft: Integer);
    procedure MyTopMargin(const: pLeft: Integer);
    procedure MyBotomMargin(const: pLeft: Integer);
  end;

Używając tych procedur możesz sobie określić marginesy, a następnie np w nadpisanej metodzie OnPaint na canvasie używając podpowiedzi kolegów wcześniej możesz sobie tekst odpowiednio "odsunąć" używając np TextOut canvasa twojego edita.

1 użytkowników online, w tym zalogowanych: 0, gości: 1