OnClick Ereignis
-
Hallo
also ich versteh dich so, das die Labels nicht eine Methode von dem Frame, sondern eine Methode von dem Form aufrufen soll?
Da fällt mir zum einen nur ein das du damit den eigentlichen Sinn eines Frames negierst, nämlich das alle Controls eines Frames zusammengehören und keine direkten externen Mittel brauchen.
Wenn du das trotzdem machen willst, must du eben entweder aus dem Parent des Frames das Form casten (wenn dein Form-Aufbau entsprechend aussieht). Oder du gibst dem Frame andersweitig den Pointer auf das übergeordnete Form.
Dann must du natürlich die zuzuweisende Methode aus dem Form public machen.bis bald
akari
-
Hallo,
warscheinlich heute zu heiß, verstehe zu Zeit nichtsmehr.
wenn ich in der Frame folgendes mache, habe ich das was ich möchte.NewLabel[i]->OnClick = FrameMenueNewLabelClick;Die NewLabelClick Routiene in der Frame ist für dieses Beispiel dann deaktiviert.
zusätzlich habe ich in der Frame den Form.Header eingeschlossen. Dies möchte ich unter allen Umstande nicht tun. Da die Frame auch für zukünftige Projekte gedacht ist, möchte ich keine unbekannte Verbindungen haben.
Das Ergebnis des OnClick der Frame wird nur in der Form "weiterverarbeitet"
Wie muß ich die Zeilen
NewLabel[i]->OnClick = FrameMenueNewLabelClick;
NewLabel[i]->OnClick = NewLabelClick;
umstellen ?
Gruß Siegfried

-
Hallo
zusätzlich habe ich in der Frame den Form.Header eingeschlossen. Dies möchte ich unter allen Umstande nicht tun. Da die Frame auch für zukünftige Projekte gedacht ist, möchte ich keine unbekannte Verbindungen haben.
Das Ergebnis des OnClick der Frame wird nur in der Form "weiterverarbeitet"
merkst du den Widerspruch?
Wobei ich wiie gesagt die erste Aussage unterstütze.
Wenn die Verarbeitung in der Form erfolgt hast du einen Konzept-Fehler. Verleg lieber die Verarbeitung in das Frame.bis bald
akari
-
Hallo,
geht leider nicht. muß mir einen anderen Weg suchen.
Nur noch eine Frage. Warum geht es von der Form auf die Frame mit festem Label zuzugreifen und warum geht es nicht, wenn dieses dynamisch erstellt wurden ?
Trozdem vielen Dank.
Gruß Siegfried

-
Hallo
was du hingegen noch machen kannst ist selber einen Event einbauen
class TFrameMenue : { ... public : // Eventpointer wird als Eigenschaft definiert, sodas der auch im OI gesetzt werden kann __property TNotifyEvent CustomLabelClick = {read = m_customlabelclick; write = m_customlabelclick}; private : TNotifyEvent m_customlabelclick; // interner Eventpointer }; // Implementation des Konstruktors, hier wird Initialsierung hinzugefügt TFrameMenue::TFrameMenue : TForm(...), m_customlabelclick(0) { ... } void __fastcall TFrameMenue::NewLabelClick(TObject* Sender) { // Event wird weitergeschickt, wenn vorhanden if (m_customlabelclick) m_customlabelclick(Sender); }Jetzt kannst du sowohl zur Laufzeit als zur Entwurfszeit den neuen Event des Frames zuweisen, um den um Form zu benutzen.
bis bald
akari
-
Hallo,
muß das Problem noch einmal anpacken. Habe von euch gute Info's bekommen, komme aber selber nicht weiter. Wer kann mir hier helfen ?
Gruß Siegfried

-
Hallo
und wo genau kommst du nicht weiter? Wie ist dein aktueller Stand? Es wurden dir ja mehrere Möglichkeiten genannt.
bis bald
akari
-
Hallo,
habe dies in der *.hpublic : // Eventpointer wird als Eigenschaft definiert, sodas der auch im OI gesetzt werden kann __property TNotifyEvent CustomLabelClick = {read = m_customlabelclick; write = m_customlabelclick}; private : TNotifyEvent m_customlabelclick; // interner Eventpointerund dies in der *.cpp
void __fastcall TFrameMenue::NewLabelClick(TObject* Sender) { // Event wird weitergeschickt, wenn vorhanden if (m_customlabelclick) m_customlabelclick(Sender); }eingebunden.
Mit diesem Code stehe ich auf dem Schlauch.// Implementation des Konstruktors, hier wird Initialsierung hinzugefügt TFrameMenue::TFrameMenue : TForm(...), m_customlabelclick(0) { ... }Ich weis nicht, wo dieser stehen muß?
Gruß Siegfried
-
Hallo
das ist die Implementierung des Konstruktors von dem Form.
Eine solche Methode muß bereits in deinem Code des Formes vorhanden sein.
Erkennbar an<Formname>::<Formname> :TForm()Dort sollst du nur die sogenannte Initialisierungsliste um
, m_customlabelclick(0)erweitern.
Für solche Sachen solltest du unbedingt erstmal OOP-Grundlagen beherschen.
bis bald
akari
-
Du kannst genauso
__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { m_customlabelclick = 0; }schreiben. Ist die gleiche Wirkung. Ach ja, versuch mal bitte, dein Deutsch zu verbessern. Es ist teilweise kaum verständlich, was du da schreibst.