08 Komponenten modifizieren
00 Button modifizieren
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;