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