![]() |
Re: Entfernung zwischen zwei Pixelkoordinaten
du solltest erst einmal suchen was genau am längsten in deiner procedure dauert.
-das berechnen der entfernung? -das verändern der lautstärke (SetMasterVolume)? wie sieht bis jetzt deine Timerprozedur aus (also hast du was verändert)? |
Re: Entfernung zwischen zwei Pixelkoordinaten
nicht viel aber ich kann sie dir ja mal vollständig mit Funktionen kopieren:
[code=delphi]function _VolumeControl(Mixer: hMixerObj; var Control: TMixerControl): MMResult; var Line : TMixerLine; Controls : TMixerLineControls; begin ZeroMemory(@Line, SizeOf(Line)); Line.cbStruct := SizeOf(Line); Line.dwComponentType := MIXERLINE_COMPONENTTYPE_DST_SPEAKERS; Result := mixerGetLineInfo(Mixer, @Line, MIXER_GETLINEINFOF_COMPONENTTYPE); if Result = MMSYSERR_NOERROR then begin ZeroMemory(@Controls, SizeOf(Controls)); Controls.cbStruct := SizeOf(Controls); Controls.dwLineID := Line.dwLineID; Controls.cControls := 1; Controls.dwControlType := MIXERCONTROL_CONTROLTYPE_VOLUME; Controls.cbmxctrl := SizeOf(Control); Controls.pamxctrl := @Control; Result := mixerGetLineControls(Mixer, @Controls, MIXER_GETLINECONTROLSF_ONEBYTYPE); end; end; procedure SetMasterVolume(Mixer: hMixerObj; Value: Word); var MasterVolume : TMixerControl; Details : TMixerControlDetails; UnsignedDetails : TMixerControlDetailsUnsigned; Code : MMResult; begin Code := _VolumeControl(Mixer, MasterVolume); if Code = MMSYSERR_NOERROR then begin with Details do begin cbStruct := SizeOf(Details); dwControlID := MasterVolume.dwControlID; cChannels := 1; // set all channels cMultipleItems := 0; cbDetails := SizeOf(UnsignedDetails); paDetails := @UnsignedDetails; end; UnsignedDetails.dwValue := Value; Code := mixerSetControlDetails(Mixer, @Details, MIXER_SETCONTROLDETAILSF_VALUE); end; if Code <> MMSYSERR_NOERROR then raise Exception.CreateFmt('SetMasterVolume failure, '+ 'multimedia system error #%d',
Code:
vll geht die Lösung des Problems so leichter ;)
);
end; /////////////////////////////////////////////////function end//////////////////////// procedure TForm1.Panel1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin Shape1.Left:= X-4 {1}; Shape1.Top := Y-4 {2}; end; procedure TForm1.Timer1Timer(Sender: TObject); var leftx,topx: real; shape1top, shape1left,entfernung: integer; begin shape1Top:=shape1.Top;shape1left:=shape1.Left; if Edit1.Text='' then Edit1.Text:='500'; try Timer1.Interval:=strtoint(edit1.Text) except end; //PC001 topx:=abs(PC001.Top-shape1Top); leftx:=abs(PC001.left-shape1left); entfernung:=trunc(250*sqrt(leftx*leftx+topx*topx)); if entfernung>65000 then entfernung:=65000; SetMasterVolume(MasterVolumeControl,65000-entfernung); lbPC001.Caption:=floattostr(65000-entfernung); lg cRayZo |
Re: Entfernung zwischen zwei Pixelkoordinaten
das hier:
Delphi-Quellcode:
solltest du anders lösen... zB im OnChange des Edits oder du spendierst noch nen Button bei dem du das änderst.
if Edit1.Text='' then Edit1.Text:='500'; try Timer1.Interval:=strtoint(edit1.Text) except end;
Versuchs mal so:
Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
var X, Y, entfernung: Integer; begin Y := abs(PC001.Top - shape1.Top); X := abs(PC001.left - shape1.left); entfernung := min(round(250 * sqrt(X * X + Y * Y)), 65000); SetMasterVolume(MasterVolumeControl, 65000 - entfernung); lbPC001.Caption := IntToStr(65000 - entfernung); end; |
Re: Entfernung zwischen zwei Pixelkoordinaten
Die Zeit wird eher beim lautstärke setzen und nicht bei der entfernungsberechnung verbraten.
Du könntest zum einen das Mouse-move Event nehmen und nur was machen, wenn sich die Maus bewegt hat, (vgl. Klaus), oder du merkst dir die aktuelle lautstärke undveränderst sie nur, wenn der neue Wert mehr als 5% davon abweicht. Stoppe doch einfach mal die Zeit um 10000 mal die Entfernung zu berechnen und um 10.000 Mal eine neue Lautstärke zu setzen und schreibe hier mal die Zeiten hin. Wenn du etwas optimieren willst, solltest du schon wissen, wo die Zeit bleibt. |
Re: Entfernung zwischen zwei Pixelkoordinaten
ja es ist auf jeden Fall die Lautstärke, (ich meine das sieht man ja eig schon)
aber das Problem ist (was ich eig sonst nicht mache, aber ich war halt faul) der code is ned von mir, und ich versteh ihn nicht^^ Es gibt auch keine einfachere Lösung für die Änderung der Soundlautstärke oder? //edit: ich habe für die Frage im Soundbereich die Frage gestellt, das Problem mit der Entfernung ist ja jetzt gut gelöst, thx nochmal ;) |
Re: Entfernung zwischen zwei Pixelkoordinaten
Zitat:
Da kann ich doch gleich zum ServicePoint der DB direkt neben dem Station Store gehen und mir ein Ticket kaufen, um nach England auszuwandern. Was hat dir die deutsche Sprache getan, dass du sie so behandeln musst? :shock: Nu mal sinnvoll: Die Frage ist doch, warum du diesen Code sooft ausführst. Greif dir doch einmal mal ein memo und trage bei jedem Aufruf deiner Funktion dort den neuen Wert ein. Ich wette, dass du ziemlich scrollen musst, um unterschiedliche Werte zu finden. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:37 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz