2

ユーザーに3つのオプション、yes、no、cancelを提供するダイアログボックスがあります
。yes、noを新しいキャプションweapon1とweapon2に変更します。ボタンの幅も新しいキャプションの幅に一致するように変更します。 。ただし、新しいキャプションが長すぎる場合は、ボタンが重なっています。どうすればこれを解決できますか?

  Weapon1 := FMyPlayers.player[FGamePlay.chartoattackwith].Values['Attack1'];
  Range1 :=  FMyPlayers.player[FGamePlay.chartoattackwith].Values['Range1'];
  Weapon2 := FMyPlayers.player[FGamePlay.chartoattackwith].Values['Attack2'];
  Range2 :=  FMyPlayers.player[FGamePlay.chartoattackwith].Values['Range2'];
    with CreateMessageDialog('Please pick a weapon:', mtConfirmation, mbYesNoCancel) do
        try
          TButton(findcomponent('Yes')).Width := self.Canvas.TextWidth('    '+Weapon1+':'+range1+'    ');
          TButton(findcomponent('No')).Width :=  self.Canvas.TextWidth('    '+Weapon2+':'+range2+'    ');
          TButton(FindComponent('Yes')).Caption := Weapon1+':'+range1;
          TButton(FindComponent('No')).Caption := Weapon2+':'+range2;
         case ShowModal of
           mrYes: AttackValue := '1';
           mrNo:  AttackValue := '2';
           mrCancel: exit;
         end;
        finally
       Free;
     end;
4

1 に答える 1

3

コードのこの部分を挿入します

  TButton(findcomponent('No')).Left := TButton(findcomponent('Yes')).Width + TButton(findcomponent('Yes')).Left;
  TButton(findcomponent('Cancel')).Left := TButton(findcomponent('No')).Width + TButton(findcomponent('No')).Left;
  Width := 2*TButton(findcomponent('Yes')).Left + TButton(findcomponent('Cancel')).Left + TButton(findcomponent('Cancel')).Width;

DavidHeffernanによると

var
No,Yes,Cancel:TButton;

.....
No := TButton(findcomponent('No'));
Yes := TButton(findcomponent('Yes'));
Cancel := TButton(findcomponent('Cancel'));

No.Left := Yes.Width + Yes.Left;
Cancel.Left := No.Width + No.Left;
Width := 2 * Yes.Left + Cancel.Left + Cancel.Width;
于 2012-11-19T07:24:18.180 に答える