Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Kleines rechnen problem (https://www.delphipraxis.net/160258-kleines-rechnen-problem.html)

Aphton 5. Mai 2011 00:25

AW: Kleines rechnen problem
 
Ähm dann positiniere den Masterregler neu vor jedem Abort =\
Das dürftest du aber schon selber hinkriegen!

EWeiss 5. Mai 2011 00:31

AW: Kleines rechnen problem
 
Zitat:

Zitat von Aphton (Beitrag 1098936)
Ähm dann positiniere den Masterregler neu vor jedem Abort =\
Das dürftest du aber schon selber hinkriegen!

Jo denk ich auch :)
Muss ja nur den Slider mit dem höchsten wert ermitteln
minus der Maximalen value vom MasterRegler.

Und diesen dann einen neuen Max wert übergeben.

gruss

EWeiss 5. Mai 2011 00:50

AW: Kleines rechnen problem
 
Habe es jetzt mal umgesetzt.
Delphi-Quellcode:
        ID_TRACK_MASTERVOL:
        begin
          Difference := SKAERO_GetTrackValue(SKAERO_GetMainItem(MainHandle, wp)) - oldMasterVolume;
          oldMasterVolume := SKAERO_GetTrackValue(SKAERO_GetMainItem(MainHandle, wp));

          for IntI := 0 to 15 do
          begin
            if Sign(Difference) = 1 then
            begin
              if Volume[IntI] = 100 then
                Abort;
            end else
            if Volume[IntI] = 0 then
              Abort;
          end;

          for IntI := 0 to 15 do
          begin
            Volume[IntI] := Max(Min(Volume[IntI] + Difference, 100), 0);
            SKAERO_SetTrackValue(SKAERO_GetMainItem(MainHandle, ID_VOLUME_FIRST + IntI), Volume[IntI]);
          end;
        end;
bekomme aber bei Abort ein EAbort Exception..
Ansonsten funktioniert es Hervorragend ;)

gruss

Aphton 5. Mai 2011 00:59

AW: Kleines rechnen problem
 
Abort ist verknüpft mit dem Vcl-Message Handler.
Ich schätze mal, du arbeitest Non-Vcl.

Verwende statt ein Abort folgendes
Delphi-Quellcode:
begin
  SKAERO_SetTrackValue(SKAERO_GetMainItem(MainHandle, wp), SKAERO_GetTrackValue(SKAERO_GetMainItem(MainHandle, wp)-Difference);
  Exit;
end;

EWeiss 5. Mai 2011 01:05

AW: Kleines rechnen problem
 
Zitat:

Zitat von Aphton (Beitrag 1098939)
Abort ist verknüpft mit dem Vcl-Message Handler.
Ich schätze mal, du arbeitest Non-Vcl.

Verwende statt ein Abort folgendes
Delphi-Quellcode:
begin
  SKAERO_SetTrackValue(SKAERO_GetMainItem(MainHandle, wp), SKAERO_GetTrackValue(SKAERO_GetMainItem(MainHandle, wp)-Difference);
  Exit;
end;

Jo non-vcl'e ;)

So gehts mit ein paar einschränkungen aber das regel ich selbst.
Danke dir ;)

Delphi-Quellcode:
        ID_TRACK_MASTERVOL:
        begin
          Difference := SKAERO_GetTrackValue(SKAERO_GetMainItem(MainHandle, wp)) - oldMasterVolume;
          oldMasterVolume := SKAERO_GetTrackValue(SKAERO_GetMainItem(MainHandle, wp));

          for IntI := 0 to 15 do
          begin
            if Sign(Difference) = 1 then
            begin
              if Volume[IntI] = 100 then
              begin
                SKAERO_SetTrackValue(SKAERO_GetMainItem(MainHandle, wp), Volume[IntI]);
                Result := 0;
                Exit;
              end;
            end else
            if Volume[IntI] = 0 then
            begin
              SKAERO_SetTrackValue(SKAERO_GetMainItem(MainHandle, wp), Volume[IntI]);
              Result := 0;
              Exit;
            end;
          end;

          for IntI := 0 to 15 do
          begin
            Volume[IntI] := Max(Min(Volume[IntI] + Difference, 100), 0);
            SKAERO_SetTrackValue(SKAERO_GetMainItem(MainHandle, ID_VOLUME_FIRST + IntI), Volume[IntI]);
          end;
        end;
gruss

Aphton 5. Mai 2011 01:06

AW: Kleines rechnen problem
 
Nur so am Rande, die letzte Lösung, die ich gepostet habe ist so richtig XXX dirty.
So sollte man das nicht machen!

Ich würde dafür direkt eine Klasse ableiten und das Verhalten dort definieren. Ich würd dafür sorgen, dass die Werte gar nicht erst gesetzt werden können, wenn nicht gesetzt werden darf!

EWeiss 5. Mai 2011 01:13

AW: Kleines rechnen problem
 
Zitat:

Zitat von Aphton (Beitrag 1098941)
Nur so am Rande, die letzte Lösung, die ich gepostet habe ist so richtig XXX dirty.
So sollte man das nicht machen!

Ich würde dafür direkt eine Klasse ableiten und das Verhalten dort definieren. Ich würd dafür sorgen, dass die Werte gar nicht erst gesetzt werden können, wenn nicht gesetzt werden darf!

Jo das ist immer so eine sache mit Klassen grundsätzlich gebe ich dir da recht.
Das problem ist nur das ich auf eine DLL zugreife um das Controll Trackbar zu bedienen.

Wenn ich einem User nur die DLL ohne Quelltext mitsende
kann er da nicht rumpfuschen und muss in dem Fall alles aus der MainUnit heraus regeln.

Dort jetzt dafür eine Klasse anlegen?
Für ein Controll was sich in einer Externen DLL befindet?

EDIT:
Irgendwie will das immer noch nicht.
Muss deinen Code nochmal anschauen.

Alle Trackbars ausgenommen die erste Volume[0] setzen sich alle auf
die Ausgangsposition zurück sobald ich den masterRegler anklicke.


gruss

Aphton 5. Mai 2011 01:16

AW: Kleines rechnen problem
 
Ähm, warum nicht. Ich hab auch zb. ein paar Komponente für die Bass.dll geschrieben. Die Hauptfunktionalität bietet mir die Dll, die Klasse kapselt dies ab. Klappt wunderbar

Edit: In diesem Falle könntest du ihm die Dll und die Wrapper-Unit mit den angesprochenen Klassen schicken.

EWeiss 5. Mai 2011 01:22

AW: Kleines rechnen problem
 
Zitat:

Zitat von Aphton (Beitrag 1098943)
Ähm, warum nicht. Ich hab auch zb. ein paar Komponente für die Bass.dll geschrieben. Die Hauptfunktionalität bietet mir die Dll, die Klasse kapselt dies ab. Klappt wunderbar

Edit: In diesem Falle könntest du ihm die Dll und die Wrapper-Unit mit den angesprochenen Klassen schicken.

Wollte damit sagen das es in diesen Fall besser wäre die Klasse in der DLL
zu erweitern das wäre dann sinnvoller als in der MainUnit rumzupfuschen.
Die frage wäre dann wie oft wird das vom User genutzt bzw.. Überhaupt genutz.

Zitat:

Ich hab auch zb. ein paar Komponente für die Bass.dll geschrieben.
Jo ich nur eine die Bass_vis.dll
Hab den Support aber eingestellt.

Edit:
Jetzt funktioniert soweit alles.

gruss


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:24 Uhr.
Seite 3 von 3     123   

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