Einzelnen Beitrag anzeigen

Benutzerbild von cruiser
cruiser

Registriert seit: 23. Dez 2003
Ort: Königsbrück/Sachsen
455 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: TUpDown: wie lange gedrückt?

  Alt 16. Jan 2007, 15:28
Und noch ne Runde... merkt man, dass ich grad nix zu tun hab?

Ne Unit zum immer wieder verwenden:

Delphi-Quellcode:
unit cruSpeedup;

interface

uses Windows;

function _cruSpeedupGetInc: Integer;
function _cruSpeedupRelease: Integer;

implementation

var
  fPressed: Cardinal;
  fInited: Boolean;

const
  mxCrd = High(Cardinal);
  // time since pressed in msec
  itm10 = 2000; // increases 10
  itm100 = 5000; // increases 100
  itm1k = 9000; // increases 1000
  itm10k = 14000; // increases 10000
  itm100k = 20000; // increases 100000

function _cruSpeedupGetInc: Integer;
begin
  if not fInited then
  begin
    fPressed := GetTickCount;
    fInited := True;
  end;

  case (GetTickCount - fPressed) of
    0..itm10-1 : Result := 1;
    itm10..itm100-1 : Result := 10;
    itm100..itm1k-1 : Result := 100;
    itm1k..itm10k-1 : Result := 1000;
    itm10k..itm100k-1 : Result := 10000;
    itm100k..mxCrd : Result := 100000;
  end;
end;

function _cruSpeedupRelease: Integer;
begin
  fInited := False;
  Result := 1;
end;

initialization
  _cruSpeedupRelease;

end.
Verwendung:
Delphi-Quellcode:
uses
  cruSpeedup;

procedure TForm1.udChange(Sender: TObject;
  var AllowChange: Boolean);
begin
  (Sender as TUpDown).Increment := _cruSpeedupGetInc;
end;

procedure TForm1.udRelease(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  (Sender as TUpDown).Increment := _cruSpeedupRelease;
end;
Kein Resetten auf 1, Kein Init und überall verwendbar

Have fun

Edit: kleines Update (1 Zuweisung weniger )
Edit2: Verallgemeinert und auch für andere Controls mit Integer unterstützung ausgelegt (Increase bis 100.000 ab 20 Sekunden)
Edit3: So müsst es laufen.. ganz ohne Reset gehts dann wohl doch nich
  Mit Zitat antworten Zitat