一个工资系统,给定数据90元或其他的。现有三个人a,b,c分得此数据。
用户的操作可以是象调节音量大小那样,可用鼠标拖拽的。
如图:
         *          *
---------|----------|------------
         *          *
当有一方数据增大,就有一方减少.总和不变.
若有其他想法可解决的,同样有分!!!

解决方案 »

  1.   

    Draw最容易实现,但底层要用的算法也比较麻烦,总结:Draw最好。
      

  2.   

    问题已经解决..
    代码奉献:
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, ExtCtrls, jpeg;type
      TForm1 = class(TForm)
        Button1: TButton;
        Image2: TImage;
        Button2: TButton;
        Label5: TLabel;
        Label6: TLabel;
        Label7: TLabel;
        Edit5: TEdit;
        Edit6: TEdit;
        Edit7: TEdit;
        procedure Button1MouseDown(Sender: TObject; Button: TMouseButton;
          Shift: TShiftState; X, Y: Integer);
        procedure Button1MouseMove(Sender: TObject; Shift: TShiftState; X,
          Y: Integer);
        procedure Button1MouseUp(Sender: TObject; Button: TMouseButton;
          Shift: TShiftState; X, Y: Integer);
        procedure Button2MouseDown(Sender: TObject; Button: TMouseButton;
          Shift: TShiftState; X, Y: Integer);
        procedure Button2MouseMove(Sender: TObject; Shift: TShiftState; X,
          Y: Integer);
        procedure Button2MouseUp(Sender: TObject; Button: TMouseButton;
          Shift: TShiftState; X, Y: Integer);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;
    started : Boolean;
    ox : Integer;
    implementation{$R *.dfm}procedure TForm1.Button1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
    if Button<>mbLeft then exit;
     started := True;
     ox := X;
    end;procedure TForm1.Button1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    var
      t : Integer;
    begin
      if not started then exit;
      t := Button1.Left + X -ox;
      if t>Button2.Left-10 then
          t:=Button2.Left-10;
          edit5.Text:=FloatToStr((Button1.Left-Image2.Left)/100*30);
          edit6.Text:= FloatToStr((Button2.Left-Button1.Left-10)/100*30);
         
      if t<Image2.Left then t:=Image2.Left;
      Button1.Left := t;
    end;
    procedure TForm1.Button1MouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    var
      s : Single;
    begin
      started := False;
      s := (Button1.Left - Image2.Left)/Image2.Width ;     end;
    procedure TForm1.Button2MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
      if Button<>mbLeft then exit;
     started := True;
     ox := X;
    end;procedure TForm1.Button2MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    var
      t : Integer;
    begin
      if not started then exit;
      t := Button2.Left + X -ox;
      if t>Image2.Left+Image2.Width-Button2.Width then
          t:=Image2.Left+Image2.Width-Button2.Width;
          edit6.Text:= FloatToStr((Button2.Left-Button1.Left-10)/100*30);
          edit7.Text:= FloatToStr((Image2.Width+Image2.Left-Button2.Left-10)/100*30);
      if t<Button1.Left+10 then t:=Button1.Left+10;
      Button2.Left := t;
    end;procedure TForm1.Button2MouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
       started := False;
    end;end.