ERLEDIGT
NEIN
NEIN
ANTWORTEN
5
5
ZUGRIFFE
1192
1192
EMPFEHLEN
-
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
-
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.
mfgnoch 'n bischen Werbung in eigener Sache: www.ice-only.de
-
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.noch 'n bischen Werbung in eigener Sache: www.ice-only.de
-
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; //--------------------------------------------------------------------------- #endifCode :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)
-
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.
mfgnoch 'n bischen Werbung in eigener Sache: www.ice-only.de
Ähnliche Themen
-
Probleme mit Objekten
Von anopheles1 im Forum Java GrundlagenAntworten: 2Letzter Beitrag: 27.03.09, 18:26 -
Lebensdauer von Objekten
Von newmem im Forum JavaAntworten: 1Letzter Beitrag: 19.08.05, 21:51 -
Objekt aus Objekten
Von Tago im Forum Cinema 4DAntworten: 2Letzter Beitrag: 30.03.05, 11:59 -
Ein Array von Objekten
Von Saber im Forum PHPAntworten: 2Letzter Beitrag: 15.08.04, 03:41 -
Verbiegen von Objekten
Von modstyle im Forum PhotoshopAntworten: 6Letzter Beitrag: 04.12.02, 23:52





Zitieren
Login






