Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   problem mit den messages der trackbar (https://www.delphipraxis.net/117150-problem-mit-den-messages-der-trackbar.html)

lbccaleb 12. Jul 2008 18:39


problem mit den messages der trackbar
 
hy there,

ich hab nen problem mit einer trackbar die per winapi (nonvcl) erzeugt wurde, der idc der trackbar ist idc_trackbar2!
komischerweise wird beim verschieben des reglers die funktion nicht ausgeführt..


die messages fang ich so ab:
Delphi-Quellcode:
    WM_HSCROLL:
      begin;
        case LoWord(wParam) of
          TB_THUMBTRACK,
          TB_TOP,
          TB_BOTTOM,
          TB_LINEUP,
          TB_LINEDOWN,
          TB_PAGEDOWN,
          TB_PAGEUP:
            begin;
              //hier wird noch alles bearbeitet!
              case LoWord(lParam) of
                IDC_TRACKBAR2:
                  begin;
                    if assigned(BasicAudio) then BasicAudio.put_Balance(HiWord(wParam));
                    //das wird nicht ausgeführt nur wieso??
                  end;
              end;
            end;
        end;
      end;
ich versteh dasnicht, wo liegt der fehler?? hab ich gerade gurken auf den augen?? :lol:
oder hab ich was vertauscht??

1234588 12. Jul 2008 18:43

Re: problem mit den messages der trackbar
 
hast du mal nachgeschaut, was mit WM_HSCROLL gesendet wird?
im lParam argument wird jedenfalls das handle des controls uebertragen und nicht die id des controls. du kannst imho ja anstatt der constrol id das handle benutzen.

Delphi-Quellcode:
case lParam of
  hTrackbar1:;
  hTrackbar2:;
end;
;o)

lbccaleb 12. Jul 2008 18:45

Re: problem mit den messages der trackbar
 
wenn ich das andle abfrage, kommt ne fehler meldung const expression expectet! will also ne konstante haben..

1234588 12. Jul 2008 18:50

Re: problem mit den messages der trackbar
 
stimmt, daran dachte ich nicht.
dann eben if lParam = handle then .. :o)

optional koenntest du auch per sub classing die message abfangen. sollte auch funktionieren

lbccaleb 12. Jul 2008 18:53

Re: problem mit den messages der trackbar
 
hab ich jetzt so gemacht:

Delphi-Quellcode:
              if lparam = hwndTrackBar2 then
und dann kommt wieder fehlermeldung, konstante erforderlich, ich versteh das nicht??!! :gruebel:

1234588 12. Jul 2008 18:55

Re: problem mit den messages der trackbar
 
kommt bei genau dieser zeile eine fehlermeldung?

lbccaleb 12. Jul 2008 18:57

Re: problem mit den messages der trackbar
 
ohh ich habs jetzt hinn bekommen, hatte vergessen ne zeile auszuklammern!!

:wall: :wall: :wall:

lbccaleb 12. Jul 2008 19:58

Re: problem mit den messages der trackbar
 
noch ne frage zur trackbar, ich hab den bereich festgelegt auf -5000 bis 5000 und die position liegt auf 0, also in der mitte!
wenn ich nun mit der maus den regler bewege, komme ich danach mit selbigen aber nicht mehr auf die mitte sonder auf irgendeine andere zahl daneben, gibt es eine möglich keit das so zu machen das der regler auf jedenfall wieder bei 0 (also die mitte) einrastet??

1234588 12. Jul 2008 20:09

Re: problem mit den messages der trackbar
 
http://msdn.microsoft.com/en-us/library/bb760236(VS.85).aspx
:)

lbccaleb 12. Jul 2008 20:21

Re: problem mit den messages der trackbar
 
wie genau verwende ich das??

ich habs jetzt so gemacht:

Delphi-Quellcode:
          SendMessage(hwndTrackBar2, TBM_SETTICFREQ, 0, 0);
nur da passiert nichts bei mir...

dann wollte ich es so machen, nur das geht nicht weil es dann einen bereichsfehler gibt:

Delphi-Quellcode:
          SendMessage(hwndTrackBar2, TBM_SETTICFREQ, 0, MAKELONG(-100, 100));

was genau macht denn diese funktion?? das ist mir nicht so ganz einleuchtend aus der msdn??!

1234588 12. Jul 2008 20:30

Re: problem mit den messages der trackbar
 
Delphi-Quellcode:
  SendMessage(handle, TBM_SETTIC, 0, pos);
in einem aelteren sdk stand, das lParam aufjedenfall positiv sein muss. auf msdn steht dazu nur, das lParam zwischen dem minimun und dem maximum sein muss. ich wuerde die zahl jedenfalls positiv halten

1234588 12. Jul 2008 20:31

Re: problem mit den messages der trackbar
 
Zitat:

Zitat von 1234588
Delphi-Quellcode:
  SendMessage(handle, TBM_SETTIC, 0, pos);
in einem aelteren sdk stand, das lParam aufjedenfall positiv sein muss. auf msdn steht dazu nur, das lParam zwischen dem minimun und dem maximum sein muss. ich wuerde die zahl jedenfalls positiv halten

//edit
was willst du denn jetzt mit TBM_SETTICFREQ?

lbccaleb 12. Jul 2008 20:37

Re: problem mit den messages der trackbar
 
das mit setticfreq war nen versehen, aber auch mit settic hab ich kein erfolg??!! ich weiß auch nciht wirklich was genau das macht...

1234588 12. Jul 2008 20:52

Re: problem mit den messages der trackbar
 
Liste der Anhänge anzeigen (Anzahl: 1)
also bei mir klappt das wunderbar. im anhang eine trackbar, zu der ich folgende message geschickt habe:
Delphi-Quellcode:
SendMessage(handle, TBM_SETTIC, 0, 32);

lbccaleb 12. Jul 2008 21:09

Re: problem mit den messages der trackbar
 
kannst du das mal bitte mit einer größeren spanne probieren??
hast du dein bsp nonvcl erzeugt?? oder hast du vcl das bsp programmiert..?

1234588 12. Jul 2008 21:27

Re: problem mit den messages der trackbar
 
kein vcl. um ehrlich zu sein nutze ich nichtmal delphi :>

mir ist gerade noch was eingefallen. ueber windows setzt du ja die spanne deiner trackbar mit der TBM_SETRANGE message.
jetzt kommt's
MAKELONG (lMinimum, lMaximum)
ist ein makro, das zwei vorzeichenlose 2 byte integer zu einem 4 byte integer umbastelt. mit 2 bytes kommt man von 0 bis 65535. also keine negativen werte und bei 65535 ist schon schluss. gut moeglich das die vcl das anders macht, das sie die werte so umrechnet, das sie mit windows wieder passen. oder vll. zeichnet sich die vcl auch eine eigene trackbar und benutzt die von windows nicht. kann ich nicht sagen.
versuch mal deine trackbar so umzubauen, das sie von mir aus von 0 bis 100 geht. beim setzen und beim auslesen musst du dann den wert so umrechnen, das er wieder passt. wenn deine trackbar beispielsweise von -50 bis 50 geht, setzt du das ding von 0 bis 100. liest du dann den wert 75 aus, musst du den wert einfach -50 rechnen und du hast den wert, der wieder zu deinem programm passt.

//edit
wie gesagt, theoretisch kannst du von 0 bis 65535 gehen :o)

lbccaleb 12. Jul 2008 21:53

Re: problem mit den messages der trackbar
 
Zitat:

Zitat von 1234588
kein vcl. um ehrlich zu sein nutze ich nichtmal delphi :>

mir ist gerade noch was eingefallen. ueber windows setzt du ja die spanne deiner trackbar mit der TBM_SETRANGE message.
jetzt kommt's
MAKELONG (lMinimum, lMaximum)
ist ein makro, das zwei vorzeichenlose 2 byte integer zu einem 4 byte integer umbastelt. mit 2 bytes kommt man von 0 bis 65535. also keine negativen werte und bei 65535 ist schon schluss. gut moeglich das die vcl das anders macht, das sie die werte so umrechnet, das sie mit windows wieder passen. oder vll. zeichnet sich die vcl auch eine eigene trackbar und benutzt die von windows nicht. kann ich nicht sagen.
versuch mal deine trackbar so umzubauen, das sie von mir aus von 0 bis 100 geht. beim setzen und beim auslesen musst du dann den wert so umrechnen, das er wieder passt. wenn deine trackbar beispielsweise von -50 bis 50 geht, setzt du das ding von 0 bis 100. liest du dann den wert 75 aus, musst du den wert einfach -50 rechnen und du hast den wert, der wieder zu deinem programm passt.

//edit
wie gesagt, theoretisch kannst du von 0 bis 65535 gehen :o)

aso, jetzt weiß ich was es macht... aber das ist nicht direkt das was ich brauche, da der slider ja nicht auf 0 hängen bleibt, sonder der bereich nur extra makiert wird...

ich setze die pos übrigens per MSDN-Library durchsuchenTBS_SETRANGEMIN und MSDN-Library durchsuchenTBS_SETRANGEMAX!! damit lassen sich auch große minuszahlen erreichen.. das funktioniert ja auch alles soweit, nur das halt die trackbar (muss ziemlich klein sein auf der form) aufgrund des großen bereiches man den slider nicht mehr wirklich auf 0 positioniert bekommt, sonder irgendwo bei 70 und -70, das ist aber mist wenn es um sachen sound balance geht^^

hast du vllt ne idee, wie man das per seperate abfrage lösen könnte?? also die position einfach irgendwie errechnen und in dem fall halt den slider auf 0 setzen??

ich habs mal so probiert, aber da ist noch irgendwie der wurm drinn:

Delphi-Quellcode:
if ((Integer(wParam) < 100) and (Integer(wParam) > -1)) or ((Integer(wParam) > -100) and (Integer(wParam) < 1)) then
  SendMessage(hwndTrackBar2, TBM_SETPOS, Integer(TRUE), 0);

1234588 12. Jul 2008 22:31

Re: problem mit den messages der trackbar
 
TBS_SETRANGEMIN und TBS_SETRANGEMAX kannte ich bisher auch noch nicht, danke :)


du weißt schon, das wParam im wndproc callback vom LongInt typ ist? d.h. du castest einen integer zu einem integer :>

ungetestet:
Delphi-Quellcode:
if (pos < 100) or (pos > -100) then
  SendMessage(hwndTrackBar2, TBM_SETPOS, Integer(TRUE), 0);
//edit
TBS_SETRANGEMIN und TBS_SETRANGEMAX kennt mein altes sdk auch nicht :D

lbccaleb 12. Jul 2008 22:44

Re: problem mit den messages der trackbar
 
nee das geht ja nicht, weil dann der slider überhaupt nicht mehr bewegt werden kann, das ist auch uncool ;-)

mhh ich muss mir da irgendwas aus denken, weil das gefällt mir so alles noch nicht, ich brauch das ja auch, hehe

lbccaleb 15. Jul 2008 19:15

Re: problem mit den messages der trackbar
 
ich muss nochmal nachhacken.. ich habs immer noch nicht ordentlich hinnbekommen, das er den slider der trackbar wieder genau in der mitte positioniert, bzw, das man ihn wenigstens genau in der mitte positionieren kann!
es muss doch eine möglichkeit geben??

lbccaleb 19. Jul 2008 10:53

Re: problem mit den messages der trackbar
 
lösung für dieses problem gibts hier!!


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:41 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