static_cast



  • hallo

    bin Umsteiger von VB6.5

    möchte in einer Methode (Unterprogramm) eine Wert eines von 96 SpeedButton's auslesen.

    mein Code:
    int TagBuffer;

    Tagbuffer = static_cast<SpeedButton*>(Sender)->Tag;

    bekomme aber die Fehlermeldung: Typname erwartet.

    weiß nicht weiter.

    SpeedButton befinden sich jeweils in einer Groupbox.

    weiter sind noch weitere SpeedButton's in anderen Groupboxen vorhanden, die ich nicht abfragen möchte. Muß ich in meiner Zeile einen Verweiß auf die entsprechende Groupbox mit einfügen ?

    wo und welchen Code muß ich in dem Projekt einfügen ?

    Gruß Siegfried
    😞



  • static_cast<TSpeedButton>



  • hallo

    bekomme jetzt aber die Fehlemeldung undefiniertes Symbol 'Sender'

    Gruß Siegfried



  • hallo

    void __fastcall T_Output::SpeedButton96Click(TObject *Sender)
    {
    int TagBuffer;
      //
        if (SpeedButton96->Down)
          {
          SpeedButton96->Glyph->LoadFromResourceName(0, (AnsiString)"55X18GRUEN");
          }
        else
          {
          SpeedButton96->Glyph->LoadFromResourceName(0, (AnsiString)"55X18ROT");
          }
      //
        SpeedButtonTagAuswerten(SpeedButton96->Tag, SpeedButton96->Down);
      //
    TagBuffer = static_cast<TSpeedButton*>(Sender)->Tag;
    }
    //---------------------------------------------------------------------------
    

    in dieser Routine klappt es, möchte aber diese Anweisung in einem Unterprogramm benutzen.

    TagBuffer = static_cast<TSpeedButton*>(Sender)->Tag;

    Fehlermeldung: undefiniertes Symbol 'Sender'

    gruß Siegfried

    Edit:
    Bitte die Code-Tags benutzen. Danke!



  • Aber du bist schon innerhalb einer Methode, der ein Argument "Sender" übergeben wird, oder?
    Zeig' doch 'mal die ganze Methode inklusive Methoden-Kopf.

    Marc

    [Edit]Ups, schon passiert![/Edit]



  • In c++ muss man alle Variablen, die in einer Methode sichtbar sein sollen als Parameter übergeben. Du hast in einer aufgerufenen Routine keinen automatischen Zugriff auf die Variablen der aufrufenden Routine. (Wie es abartiger Weise in VB ist.)
    Du musst also deinem "Unterbrogramm" einen Parameter "Sender" verpassen und den beim Aufruf übergeben.

    Allgemein halte ich einen Umstieg von VB auf c++ nicht für so auf die Schnelle möglich. Die Sprachen sind schon sehr unterschiedlich. Ohne ein Einführungsbuch oder Tutorial zu lesen, wirst du da nicht weit kommen.

    Gruß
    Marc



  • Hallo

    T_Output::TransferBitUmlauf()
    {
    int TagBuffer;
    TagBuffer = static_cast<TSpeedButton*>(Sender);
    return 0;

    }
    //---------------------------------------------------------------------------

    die Methode 'TransferBitUmlauf' soll von den entsprechenden SpeedButton aktiviert werden.
    wie man einer Methode den Sender mitgebe, ist mir noch nicht bekannt.
    muß noch viel lernen, habe auch die Zeit dazu.

    ein weiteres Problem bekomme ich noch!
    z.B.: beim Clicken von SpeedButton1 bekomme ich den vorgegebne 'Tag' Parameter z.B.: '1' in der TransferBitUmlauf zurück. Jetzt möchte ich, daß sich die Beschriftung z.B.: von ' Halt ' in ' Starten ' ändert.
    wie übernehme ich den TagBuffer(Wert) in den Platzhalter ' * ' des TSpeedButton ?

    gruß Siegfried

    😞



  • Hallo Siegfried,

    also wenn du noch nicht einmal weißt, wie man einen Parameter einer Methode definiert, machst du hier definitv den zweiten (oder genauer den dritten oder vierten) vor dem ersten. Leg' dein Programm erst 'mal zur Seite und schreib ein paar Übungsprogramme nach einem Tutorial.

    Gruß
    Marc

    PS:

    T_Output::TransferBitUmlauf(TObject* Sender)
    


  • hallo,

    du hast recht,
    trotzdem an alle vielen Dank für die Hilfe

    Gruß Siegfried
    😉


Anmelden zum Antworten