tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
5
ZUGRIFFE
1192
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Todd Todd ist offline Mitglied
    Registriert seit
    Apr 2007
    Beiträge
    11
    Hallo,

    ich benutze insgesamt 3 Formulare für mein Programm und habe dem ganzen Projekt eine zusätzliche .cpp Datei angefügt, um dort immerwiederkehrende Funktionen zu definieren.

    Meine Frage:

    Wie kann ich jetzt innerhalbt dieser .cpp Datei (Keine Unit zu Form) zum Beispiel Objekte auf einem Formular verändern?
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    #include "Unit1.h"
     
    AnsiString stringmanipulation(AnsiString s)
    {
     ....;
     ....;
     return s;
     Form1->Label1->Caption="irgendwas";
    }

    Geht das denn nicht?

    Vielen Dank und liebe Grüße

    Todd
     

  2. #2
    Supa Supa ist offline Mitglied Gold
    Registriert seit
    Jul 2004
    Ort
    Velbert
    Beiträge
    160
    Hy...

    dein Problem ist, das alles was nach dem "return s;" in der Funktion aufgerufen werden soll, irgnoriert wird.

    Sobald ein return auftaucht, spring dein Programm aus der Funktion raus.


    mfg
     
    noch 'n bischen Werbung in eigener Sache: www.ice-only.de

  3. #3
    Todd Todd ist offline Mitglied
    Registriert seit
    Apr 2007
    Beiträge
    11
    Mhhh....

    Ne. Auch wenn das vor der return steht funktionert es nicht.
    Er gibt mir immer die Fehlermeldung aus, dass er Label1 etc...(von Form1) nicht findet.
    muss man vielleicht etwas an der Header Datei ändern? bzw. irgendwas, dass er die Form1 als global bzw. als public definiert?

    Danke
     

  4. #4
    Supa Supa ist offline Mitglied Gold
    Registriert seit
    Jul 2004
    Ort
    Velbert
    Beiträge
    160
    Kannst du vielleicht 'n bischen mehr von denem Code offenbaren?

    Ich hab das Programm wie du es beschrieben hast, gerade mal testhalber implementiert... bei mir mekert der Kompiler nicht. Allerdings wird auch kein geänderter Wert auf Form1 angezeigt wenn ich die Funktion benutze.
     
    noch 'n bischen Werbung in eigener Sache: www.ice-only.de

  5. #5
    Todd Todd ist offline Mitglied
    Registriert seit
    Apr 2007
    Beiträge
    11
    Okay...ein einfaches Beispiel:
    Ein Formular mit dem Namen Form1. Dazugehörige Unit = Unit1.
    Darauf ein Label = Label1 und ein Button = Button1.

    In das Projekt wird nun ein cpp File eingefügt mit dem Namen File1 und in der steht eine Funktion labelcaption();
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    
    //Unit1.cpp
     
    #include <vcl.h>
    #pragma hdrstop
     
    #include "Unit1.h"
    #include "File1.cpp"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    void labelcaption();
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
            : TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
     
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    void labelcaption();
    }
    //---------------------------------------------------------------------------

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    
    //Unit1.h
     
    #ifndef Unit1H
    #define Unit1H
    //---------------------------------------------------------------------------
    #include <Classes.hpp>
    #include <Controls.hpp>
    #include <StdCtrls.hpp>
    #include <Forms.hpp>
    //---------------------------------------------------------------------------
    class TForm1 : public TForm
    {
    __published:    // IDE-managed Components
            TLabel *Label1;
            TButton *Button1;
            void __fastcall Button1Click(TObject *Sender);
    private:    // User declarations
    public:     // User declarations
            __fastcall TForm1(TComponent* Owner);
            void labelcaption();
    };
    //---------------------------------------------------------------------------
    extern PACKAGE TForm1 *Form1;
    //---------------------------------------------------------------------------
    #endif
    Code :
    1
    2
    3
    4
    5
    
    //File1.cpp
    #include "Unit1.h"
     
    void labelcaption()
    {Form1->Label1->Caption="es funktioniert";}

    Bei Button1.Click soll er die Funktion labelcaption die in File1.cpp steht ausführen. In der soll dann die Caption des Label1 verändert werden.
    Der Compiler meckert nicht, aber es wird nichts ausgeführt.

    Das ganze ist natürlich eine grundsätzliche Frage wie ich es schaffe Objekte auf einem Formular in einer anderen cpp Datei anspreche, die keine Unit zu einem anderen Formular ist.

    Folgendes würde funktionieren, ist aber nicht in meinem Interesse, da ich andere Werte zurückgeben möchte, die kein AnsiString sind:

    [CODE]
    //---------------------------------------------------------------------------

    #include <vcl.h>
    #pragma hdrstop

    #include "Unit1.h"
    #include "File1.cpp"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    AnsiString labelcaption();
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------

    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    AnsiString a=labelcaption();
    Form1->Label1->Caption=a;
    }
    //---------------------------------------------------------------------------
    [\CODE]
    [CODE]
    #include "Unit1.h"

    AnsiString labelcaption()
    {AnsiString a="es funktioniert";return a;}
    [\CODE]
    Geändert von Todd (22.05.07 um 15:18 Uhr)
     

  6. #6
    Supa Supa ist offline Mitglied Gold
    Registriert seit
    Jul 2004
    Ort
    Velbert
    Beiträge
    160
    Naja, es passiert nichts, weil die Funktion in deiner File1.cpp garnicht aufgerufen wird! (kannste mit Breakpoints testen)

    Außerdem haste deine Funktion jetzt 4 mal deklariert! Du kannst dir vorstellen, dass das 3 mal zuviel ist, oder? Ausschlaggeben ist allerdings, die Deklaration im OnClick-Ereigniss des Buttons...

    Dein zweiter Ansatz ist auf jedenfall die sauberere Lösung. Und wenn die Funktion keinen AnsiString zurück gibt, dann das AnsiString einfach auf den Typ, der zurück gegeben wird.

    mfg
     
    noch 'n bischen Werbung in eigener Sache: www.ice-only.de

Ähnliche Themen

  1. Probleme mit Objekten
    Von anopheles1 im Forum Java Grundlagen
    Antworten: 2
    Letzter Beitrag: 27.03.09, 18:26
  2. Lebensdauer von Objekten
    Von newmem im Forum Java
    Antworten: 1
    Letzter Beitrag: 19.08.05, 21:51
  3. Objekt aus Objekten
    Von Tago im Forum Cinema 4D
    Antworten: 2
    Letzter Beitrag: 30.03.05, 11:59
  4. Ein Array von Objekten
    Von Saber im Forum PHP
    Antworten: 2
    Letzter Beitrag: 15.08.04, 03:41
  5. Verbiegen von Objekten
    Von modstyle im Forum Photoshop
    Antworten: 6
    Letzter Beitrag: 04.12.02, 23:52