Problem mit Button/Schaltfläche



  • estardu_de schrieb:

    Rapha schrieb:

    Die Windowsnachrichten WM_LBUTTONUP und WM_LBUTTONDOWN müssten dir weiterhelfen. Hab sowas selber aber noch nie gemacht.

    Dafür dürfte man aber ne eigene von CButton abgeleitete Klasse brauchen. Und einen Thread, sonst merkt der das Loslassen nicht.

    Ich hab sowas aber auch noch nicht gemacht.

    ich erinner mich da an was wie CaptureMouse oder etwas in der Art damit müsste es auch ohne thread gehen. Habs leider nicht auf die schnelle gefunden aber ich schau nochmal nach

    Nagut habs gefunden:

    in OnLButtonDown() schreibst du SetCapture()
    und in OnLButtonUp() schreibst du ::ReleaseCapture()

    ggf noch mit ner boolschen membervariablen prüfen ob SetCapture aufgerufen wurde bevor du ReleaseCapture aufrufst



  • Der obere Link geht bei mir nicht, beim unteren gibts nur Beispiele um Farbe oder Form zu verändern. Jedenfalls habe ich da nix gefunden.
    Aber gibt es nicht ne Möglichkeit die IDC abzufragen. Also der Button heißt ja z.B. IDC_Button1. Kann man den nicht irgendwie abfragen ob der true oder false ist, also gedrück(aktive)oder nicht.

    Dann könnte ich mir ne Funktion schreiben die den Button prüft und nur wenn der halt gedrückt wird ausgeführt wird.

    Gruß



  • @ Taelan: Sorry das versteh ich nicht, bin leider kein Crack in C++.

    Hoffe nicht zuviel verlangt wenn mir einer ein einfaches Beispiel posten könnte? So könnte ich es vielelicht verstehen.

    Gruß

    PS: bei www.codeproject.com beomme ich ein http error.



  • Ronn schrieb:

    @ Taelan: Sorry das versteh ich nicht, bin leider kein Crack in C++.

    Hoffe nicht zuviel verlangt wenn mir einer ein einfaches Beispiel posten könnte? So könnte ich es vielelicht verstehen.

    Tja, das hat hier nur keiner fertig liegen und es ist etwas mehr Arbeit.
    Ich fürchte, da wirst du dich selber einarbeiten müssen. 🙄

    Gruß

    PS: bei www.codeproject.com beomme ich ein http error.

    Dann schreib es davor: http://www.codeproject.com
    Außerdem muss man manchmal Geduld haben, die Seite ist extrem beliebt.



  • Mmmhh 🙄 tja oder ich lass das erst mal wech und wenn ich noch Zeit habe verusche ich es in mein Projekt einzubauen. 😃

    Wenn die Seite irgendwann mal wieder funzt werde ich da noch mal suchen.

    Gruß Danke für die Mühe



  • Ronn schrieb:

    Mmmhh 🙄 tja oder ich lass das erst mal wech und wenn ich noch Zeit habe verusche ich es in mein Projekt einzubauen. 😃

    Hast du keine Alternative Idee? Vielleicht ist die einfacher.

    Wenn die Seite irgendwann mal wieder funzt werde ich da noch mal suchen.

    Gruß Danke für die Mühe

    Funktioniert doch. 😕



  • also bei mir geht die Seite, leider hab ich atm auch nciht die Zeit dir zu erklären wie das genau funktioniert



  • Ja jetzt geht die Seite auch bei mir, gleich noch mal stöbern gehen.

    Alternative Idee mmh hatte ich etwas weiter oben schon mal geschrieben. Der Button hat doch ne Bezeichnung z.B. IDC_Button1. Mir war so als könnte man die Überprüfen mit true oder false falls ich mich nicht irre. Oder bin ich damit auf dem falschen Weg, als Alternative.

    Sonst fällt mir nix ein. Wenn ich es jetzt nciht hin bekomme, hat mein Programm leider ne etwas andere Funktion, aber das wäre nicht so schlimm.

    Gruß



  • neee die Resource-ID is zur Identifikation der Resource, mehr auch nicht. Mit GetDlgItem(<RessourceID>) kannst dir einen Zeiger auf das Objjekt holen und damit kann man dann wieder was machen



  • Mit Alternative meinte ich "was anderes als: Der Knopf soll gedrückt sein"
    Wie wäre es mit einer Checkbox? Ich glaube, die kann man aussehen lassen, wie einen Button. Ist dann eben zweimal klicken mit zwischendrin loslassen - statt festhalten. Das in Verbindung mit einem Timer wäre auch eine Möglichkeit.

    Was soll überhaupt gemacht werden? Wenn das zu lange dauert, brauchst du wohl doch einen Thread.



  • Genau ich meinte eigentlich das GetDlgItem, habe es nur nicht mehr zusammen bekommen im Kopf. Werde es damit nochmal probieren.

    Mit der Checkbox scheint mir doch zu kompliziert zu sein. Der Button soll als Taster arbeiten und daraufhin wird über USB-Karte ein Motor gesteuert.
    Wenn man Button los lässt Motor wieder aus. Wofür das agnz ist, ich schreibe ein kleine Maschinensteuerung quasi wie ne SPS Steuerung nur eben halt mit C++.

    Gruß Ronn



  • Hi,

    ich hab sowas in der Art mal mit einer Timer-Routine gemacht, in der ich den Status der jeweiligen Schaltfläche abgefragt hab und mit dem vorhergehenden Status dieser Schaltfläche verglichen habe:

    UINT XPlusState = m_cXPlus.GetState();
    
    	if(XPlusState & 0x0004){
    		// X-Plus-gedrückt
    		if(m_XPlusButtonDown || m_pIsel->IsBusy()){
    			// X-Plus-Button war bereits gedrückt oder Steuerung noch nicht bereit
    		}
    		else{
    			// X-Plus-Knopf erstmals gedrückt
    			m_XLED.SetOnOff(TRUE);
    			Command.Format("@0a 800000,%d,0,%d,0,%d,0,%d",GeschwX,GeschwY,GeschwZ,GeschwZ);
    			m_pIsel->AddCommand(Command); // Fahrt X start
    			m_XPlusButtonDown = TRUE;
    		}
    	}
    	else{
    		// X-Plus-nicht-gedrückt
    		if(!m_XPlusButtonDown || m_pIsel->IsBusy()){
    			// X-Plus-Knopf war nicht gedrückt oder Steuerung noch nicht bereit
    		}
    		else{
    			// X-Plus-Button war gedrückt, erstmals losgelassen
    			m_XLED.SetOnOff(FALSE);
    			m_pIsel->StopBefehl(); // Fahrt X Stop
    			m_XPlusButtonDown = FALSE;
    		}
    	}
    

    Ist zwar bestimmt nicht die sauberste Lösung und auch bei mehreren Schaltflächen (bei mir waren es 😎 eine Menge Code, aber es hat funktioniert..
    (es ging um eine Schrittmotor-Ansteuerung, bei der eine manuelle Fahrt ausgelöst werden sollte, solange die Schaltfläche gedrückt war)


Anmelden zum Antworten