Irgendwie peinlich so etwas nachfragen zu müssen. Aber ich habe das Gefühl, dass mit Komponenten wie ein
TFlowPanel
oder
TGridPanel
bereits eine fertige Lösung bieten und ich selbst keinen Code schreiben müsste.
Folgende Anforderungen: Es soll
entweder Komponente A den ganzen Platz ausfüllen,
oder Komponente B
oder beide sich beide nebeneinander den Platz 50:50 teilen. Siehe Bilder, A ist in dem Fall die RadioGroup, B das Memo.
Wie kann ich das elegant lösen? Auf die Schnelle habe ich es mit folgendem Codebrocken manuell zusammengebastelt. Erstens habe ich das Gefühl, dass Delphi-Komponenten mir die Arbeit abnehmen könnten und zweitens möchte ich im Quelltext nicht manuell die Komponenten spezifizieren. Sollte eines Tages eine Dritte hinzukommen bläht sich das ja noch weiter auf...
Delphi-Quellcode:
{ TFrame37 }
// RadioGroup ist alClient, Memo ist alRight
procedure TFrame37.adjustMemoWidth();
var
availableWidth: Integer;
begin
availableWidth := memo1.Parent.ClientWidth;
if RadioGroup1.Visible then
availableWidth := availableWidth div 2;
memo1.Width := availableWidth;
end;
procedure TFrame37.Button1Click(Sender: TObject);
begin
if RadioGroup1.Visible and Memo1.Visible then begin
memo1.Visible := False;
Exit;
end;
if RadioGroup1.Visible and (not Memo1.Visible) then begin
RadioGroup1.Visible := False;
memo1.Visible := True;
adjustMemoWidth();
Exit;
end;
if (not RadioGroup1.Visible) and memo1.Visible then begin
RadioGroup1.Visible := True;
adjustMemoWidth();
Exit;
end;
end;
procedure TFrame37.FrameResize(Sender: TObject);
begin
adjustMemoWidth();
end;