object pascal -> c++
-
hi,
void __fastcall TForm1::PopupMenu1Popup(TObject *Sender) { if ((Sender as TButton)->Tag == 0) {
über das "as" meckert der cbuilder .. wie macht man das ganze in ordentlichem c++ syntax? ich habe eine gruppe von button die alle bei der eigenschaft Tag 1 oder 2 oder .. haben und diesen gruppen immer eingenschaften zuweisen.
kann einer helfen?
-
Dazu musst du casten. Siehe FAQ unter "Komponenten benutzen".
-
if ((dynamic_cast <TButton*> (Sender))->Tag == 0)
-
Vielen Dank!
-
sorry irgendwie bringt mich das casten nicht weiter .. peil das nicht ganz? könntest mir bitte helfen?
ich habe 6 Buttons, welche eine eigenschaft DropDownMenu besitzen, wo ich überall das PopupMenu1 eingetragen habe.
(mit linksklick auf den button wird das Popup angezeigt)nun möchte ich in *void __fastcall TForm1::PopupMenu1Popup(TObject Sender)
herrausfinden welcher dieser 6 button das PopupMenu1 aufgerufen hat, um manche einträge in diesem Popup unsichtbar zu machen etc.TExplorerButton *button = dynamic_cast<TExplorerButton*>(PopupMenu1->PopupComponent);
aber zugriff auf button kommt bei mir speicherfehler
-
ups, hätte mal aktualisieren sollen ^^
ich teste mal
-
TExplorerButton *button = dynamic_cast<TExplorerButton*>(PopupMenu1->PopupComponent); if (button) // Cast war erfolgreich button->MachWas();
-
was ist denn daran falsch?
TExplorerButton *button = dynamic_cast<TExplorerButton*>(PopupMenu1->PopupComponent);
if (button->Tag==0)wenn ich zur if komme, hauts mich sofort mit speicherfehler raus
-
Bevor du auf die Eigenschaften zugreifst musst bzw. solltest du prüfen, ob der Cast erfolgreich war. Wenn nicht, dann ist button hier NULL und hat logischerweise keine Tag-Property.
Offensichtlich ist die PopupComponent in deinem Fall nicht vom Typ TExplorerButton.
-
also der cast war nicht erfolgrein
*heul* also werd ich wohl in dem onClick Ereignis des Buttons das Popup öffnen müssen.
schade, schade,aber vielen dank für eure hilfe .. werd mir das casten mal im hinterkopf behalten ^^
-
warum nimmst du nicht Sender beim casten?