08 Komponenten modifizieren

00 Button modifizieren

Selfhtml

Man kann auch eine Komponente modifzieren, in diesem Beispiel ist es ein Button.
Dazu muss man einen Nachkommen von TButton erstellen.
Der abgeänderte Button passt sich automatisch an die Länge des Titels an, auch wird er automatisch 2 Zeilen hoch.


Anstelle des normalen Button nehme ich jetzt den PMyButton.
Man sieht auch, das man anstelle von Rect, nur X und Y angibt.
  procedure TMyApp.MyParameter;
  var
    Dia: PDialog;
    Rect: TRect;
  begin
    Rect.Assign(0, 0, 35, 15);                    // Grösse des Dialogs.
    Rect.Move(23, 3);                             // Position des Dialogs.
    Dia := New(PDialog, Init(Rect, 'Parameter')); // Dialog erzeugen.
    with Dia^ do begin
      // oben
      Insert(new(PMyButton, Init(7, 8, 'sehr langer ~T~ext', cmValid, bfDefault)));

      // mitte
      Insert(new(PMyButton, Init(7, 4, '~k~urz', cmValid, bfDefault)));

      // Ok-Button
      Insert(new(PMyButton, Init(7, 12, '~O~K', cmOK, bfDefault)));

      // Schliessen-Button
      Insert(new(PMyButton, Init(19, 12, '~A~bbruch', cmCancel, bfNormal)));
    end;
    Desktop^.ExecView(Dia);   // Dialog Modal öffnen.
    Dispose(Dia, Done);       // Dialog und Speicher frei geben.
  end;


Unit mit dem neuen Button.


Hier wird gezeigt, wie man einen Button abänder kann.
unit MyButton;
Deklaration des neuen Buttons.
Hier sieht man, das man den Konstruktor überschreiben muss.
type
  PMyButton = ^TMyButton;
  TMyButton = object(TButton)
    constructor Init(x, y: integer; ATitle: TTitleStr; ACommand: word; AFlags: word);
  end;
Im Konstruktor sieht man, das aus X und Y ein Rect generiert wird.
StringReplace werden noch die ~ gelöscht, da diese sonst die Länge des Stringes verfälschen.
constructor TMyButton.Init(x, y: integer; ATitle: TTitleStr; ACommand: word; AFlags: word);
var
  Rect: TRect;
begin
  Rect.Assign(x, y, x + Length(StringReplace(ATitle, '~', '', [])) + 2, y + 2);

  inherited Init(Rect, ATitle, ACommand, AFlags);
end;



zurück