TForm/Unit



  • Hallo,

    hab mal eine Frage.

    Ich arbeite gerade an einen Programm, wenn ich einen Befehl in die TForm Komponente schreibe, dann wird dieser nur einmal ausgeführt beim Starten.

    Schreibe ich ihn direkt in die unit1 dann bekomme ich Fehlermeldungen, obwohl die Anweisung OK ist.

    Möchte aber nun eine Anweisung ständig ausführen, unabhängig von irgendwelchen Komponenten.

    Muss man da noch irgendwelche Einstellungen machen damit Anweisungen bearbeitet werden?

    Bin Dankbar für jede Antwort.

    mfg ahl



  • Ähä !
    Deine Worte las ich wohl, doch der Sinn blieb mir verborgen 🙄



  • [internal error] brain refuced request, devision by -12910298938^Ersadasdd, system haltet!



  • ich rate jetzt mal:
    du hast eine funktion die irgendwas mit dem form macht...
    diese funktioniert wenn du sie in der form direkt schreibst, aber nicht außerhalb.
    das liegt dann wahrscheinlich daran das du in der funktion z.b. ein attribut des forms setzen willst, wie z.b.:
    width = 50

    wenn du aber außerhalb des forms bist gibt es kein attribut width, also probiers mal mit form->width = 50.

    hoffe das hilft
    Errraddicator



  • Also,

    wenn ich z.B. ein Button auf die Oberfläche mache, dann ist dieser Button auf der TForm1. Machst du ein doppelklick auf diesen Button, dann kommst Du in die Unit1. Dort schreibst Du doch für den Button die Anweisung in die void_fastcall TForm1::Button1Click.
    Diese Anweisung da drin wird doch nun nur ausgeführt, wenn ein klick auf den Button kommt.
    Für die TForm1 (TKomponente) gibt es jetzt auch ganz automatisch __fastcall TForm1, indem Du Anweisungen schreiben kannst und diese werden bei mir nur einmal beim Start ausgeführt.
    Schreibe ich Anweisungen in die Unit1 direkt, also wo alle Komponenten aufgeführt sind, dann bekomme ich eine Fehlermeldung, obwohl die Anweisung OK ist.
    Daher meine Frage, ob Jemand mir da helfen kann.
    Meine Anweisung muss jedoch immer ausgeführt werden, unabhängig von irgendwelchen Komponenten.
    Wo schreibt man diese dann hinein?



  • wo die komponenten aufgeführt sind kannst du keine anweisungen ausführen!
    das geht nur in funktionen und methoden!

    was hast du denn überhaupt vor?



  • Hallo Errraddicator,

    nein, es soll eine Überwachung werden.
    Ich sende Daten von einer RS232 in Borland hinein. Sobald ein Leitungsbruch da ist oder das Kabel wird abgezogen, dann soll eine Meldung kommen.

    Diese muss jetzt natürlich immer aktiv sein und daher kann sie nicht in eine Komponente stehen. Ich denke sie muss direkt auf die Unit1 geschrieben werden, da wo auch die Heatherdateien stehen.
    Ich bekomme dann aber Fehlermeldungen.



  • Da bietet sich dann ein Thread an. Oder ein Timer.



  • Also ersteinmal sehr vereinfacht gesagt:

    *.h oder *.hpp sind HEADER Datei, hier werden Klassen (wie z.B. das Formular das du erstellt hast) und deren Mitglieder (Variablen oder Methoden) definiert.
    Definiert bedeutet das hier nur Ihre Schnittstelle eingetragen wird.

    *.cpp auch meist mit Quellcode Datei gemeint ist die Datei in deren die Funktionalitäten auch wirklich realisiert werden. Diese Datei siehst du zum Beispiel wenn Du per Doppelklick auf einen Button dem Builder anweisst einen Funktionsrumpf (in CPP) und Deklaration (in Header) zu erzeugen... Du landest also automatisch an der stelle an der du Anweisungen für diese funktion schreiben kannst in der CPP Datei.

    Dem ganzen Aufbau von Komponenten, wie auch dein Formular etc. des Builders liegt ein Klassenkonzept zugrunde. Das kannste dir als Container vorstellen der alles beinhalten soll was zu diesen Container selbst gehört.
    (Beispiel: Auto->fahreNach(Ort); Klasse: Auto Mitgliedfunktion: fahreNach(Parameter))

    Jedes Object das einer Klasse angehört wird über eine Erzeugerfunktion erstellt. Diese wird EINMALIG beim erstellen einer Konkreten Instanz (ein konretes Auto z. B.) aufgerufen! Diese Funktion wird Konstruktor genannt und heisst in C++ immer so wie die Klasse. Die Funktion die Du gesehen hast TForm... ist eine solche Konstruktor Funktion.

    PS.: schau in der Hilfe nach Timer damit kannst du kontinuierlich nach festlegbaren Zeitdauern eine Funktion aufrufen.



  • ich würde mich bei threads umschauen...
    die sind für sowas gut geignet, ist aber nicht ganz einfach...



  • eben, der Mensch kennt sich nicht mit Funktionen und Klassen aus und Du willst Ihn auf Threads loslassen



  • Ich werde mich dann da mal umschauen.

    Mit einen Timer habe ich auch schon versucht, funktioniert natürlich auch. Dachte nur an eine andere Lösung, hätte ja sein können, dass es noch andere Möglichkeiten gibt.

    Vielen Dank für die Hilfe

    mfg ahl



  • gib ja zu, dass ich mich nicht so gut mit funktionen auskenne.

    Das kann man aber lernen oder ?



  • Nein das bleibt einer erlesen Elite vorbehalten 😉



  • FrankHof schrieb:

    eben, der Mensch kennt sich nicht mit Funktionen und Klassen aus und Du willst Ihn auf Threads loslassen

    Seufz, ja irgendwie glauben viele, man braucht keine Grundkenntnisse um mit dem BCB Programme erstellen zu können... Aber wenn man nicht weiß, was Klassen, Funktionen und Co. sind, hilft einem auch die beste IDE und die prächtigste Komponentensammlung nichts.



  • Irgendwann & wie muss man ja anfangen... und mir könnt ihr erzählen was wolle, die scheisse dos kacke bringt nicht gerade dolle erfolgserlebnisse... klar is das eine der besten methoden um c++ zu lernen...



  • ich lerne ja noch



  • ahl schrieb:

    ich lerne ja noch

    ja, aber offensichtlich in der falschen Reihenfolge... Bevor man sich an eine der 'großen' IDEs wagt, sollte man sich zumindest Grundkenntnisse aneignen...



  • ich denke nicht, unser Dozent hat diese Sachen so schnell gemacht, dass keiner den durchblick bekommen hat und jetzt muss das prog schnell fertig sein.
    So nebenbei hat man nicht allzu viel zeit, um das jetzt noch alles schnell zu lernen. Natürlich befasse ich mich damit noch, sobald zeit ist.

    Wenn man auf abendschule noch studiert und tagsüber zur arbeit geht, bleibt nicht so viel zeit über, um alles ganz genau zu lernen.


Anmelden zum Antworten