AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Entfernung zwischen zwei Pixelkoordinaten
Thema durchsuchen
Ansicht
Themen-Optionen

Entfernung zwischen zwei Pixelkoordinaten

Ein Thema von cRayZo · begonnen am 2. Nov 2007 · letzter Beitrag vom 2. Nov 2007
Antwort Antwort
Seite 2 von 2     12   
dominikkv

Registriert seit: 30. Sep 2006
Ort: Gundelfingen
1.109 Beiträge
 
Delphi 2007 Professional
 
#11

Re: Entfernung zwischen zwei Pixelkoordinaten

  Alt 2. Nov 2007, 15:46
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)?
Dominik
Wer anderen eine Grube gräbt, hat ein Gruben-Grab-Gerät!
  Mit Zitat antworten Zitat
cRayZo

Registriert seit: 30. Jul 2007
156 Beiträge
 
Delphi 6 Personal
 
#12

Re: Entfernung zwischen zwei Pixelkoordinaten

  Alt 2. Nov 2007, 16:06
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:
);
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);
vll geht die Lösung des Problems so leichter
lg cRayZo
  Mit Zitat antworten Zitat
dominikkv

Registriert seit: 30. Sep 2006
Ort: Gundelfingen
1.109 Beiträge
 
Delphi 2007 Professional
 
#13

Re: Entfernung zwischen zwei Pixelkoordinaten

  Alt 2. Nov 2007, 16:18
das hier:
if Edit1.Text='then Edit1.Text:='500'; try Timer1.Interval:=strtoint(edit1.Text) except end; solltest du anders lösen... zB im OnChange des Edits oder du spendierst noch nen Button bei dem du das änderst.
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;
Dominik
Wer anderen eine Grube gräbt, hat ein Gruben-Grab-Gerät!
  Mit Zitat antworten Zitat
Benutzerbild von Nikolas
Nikolas

Registriert seit: 28. Jul 2003
1.528 Beiträge
 
Delphi 2005 Personal
 
#14

Re: Entfernung zwischen zwei Pixelkoordinaten

  Alt 2. Nov 2007, 16:54
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.
Erwarte das Beste und bereite dich auf das Schlimmste vor.
  Mit Zitat antworten Zitat
cRayZo

Registriert seit: 30. Jul 2007
156 Beiträge
 
Delphi 6 Personal
 
#15

Re: Entfernung zwischen zwei Pixelkoordinaten

  Alt 2. Nov 2007, 20:31
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
  Mit Zitat antworten Zitat
Benutzerbild von Nikolas
Nikolas

Registriert seit: 28. Jul 2003
1.528 Beiträge
 
Delphi 2005 Personal
 
#16

Re: Entfernung zwischen zwei Pixelkoordinaten

  Alt 2. Nov 2007, 22:17
Zitat:
Soundlautstärke
Wie viele Lautstärken kennst du eigentlich? TonLautstärke ist echt ein schönes Wort
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?

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.
Erwarte das Beste und bereite dich auf das Schlimmste vor.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:44 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz