Ansprechen von Objekten

Todd

Grünschnabel
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:
#include "Unit1.h"

AnsiString stringmanipulation(AnsiString s)
{
 ....;
 ....;
 return s;
 Form1->Label1->Caption="irgendwas";
}

Geht das denn nicht?

Vielen Dank und liebe Grüße

Todd
 
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
 
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
 
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.
 
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:
//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:
//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:
//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:
#include "Unit1.h"

AnsiString labelcaption()
{AnsiString a="es funktioniert";return a;}
 
Zuletzt bearbeitet:
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
 

Neue Beiträge

Zurück