Eigene Klasse (mit komponenten) benutzen
-
Hallo Leute,
ich arbeite grad bisschen mit BCB 6 Pro!
Ich will folgendes machen:
Habe eine Form, mit zB einer CheckBox!
Wenn die CheckBox angeklickt wird, möchte ich Methoden meiner eigenen Klasse verwenden!
Nur wie geht das?
Habe eine neue Unit hinzugefügt, in Header die Klassendefinitionen gemacht und in CPP die definitionen!
Allerdings bekomme ich nur fehlermeldungen!(ich denke aber, das ich wahrscheinlich falsch rangegangen bin in bezug auf die VCL, denn wenn ich eine Konsolenanwendung schreibe, funktioniert genau die selbe klasse, nur in der vcl nicht)
Meine Frage: wie muss ich mein eigenen Klassen machen, und wie binde ich sie ein? (Wie Methoden hinzufügen etc..)
-
1. Wenn du schon Fehlermeldungen bekommen hast, dann zeig sie doch bitte.
2. Hast du deine Klasse auch im Header der Form als Include stehen?
-
ok ich poste mal alles (nicht meckern oder lachen, das war mein erster jungfräulicher versuch)
ALSO
TForm1 (Unit1.cpp)
//--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include <fstream.h> #include "Unit1.h" #include "Unit2.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //---------------------------------------------------------------------------TForm1 (Unit1.h)
//--------------------------------------------------------------------------- #ifndef Unit1H #define Unit1H //--------------------------------------------------------------------------- #include <Classes.hpp> #include <Controls.hpp> #include <StdCtrls.hpp> #include <Forms.hpp> //--------------------------------------------------------------------------- class TForm1 : public TForm { __published: // Von der IDE verwaltete Komponenten private: // Anwender-Deklarationen public: // Anwender-Deklarationen __fastcall TForm1(TComponent* Owner); }; //--------------------------------------------------------------------------- extern PACKAGE TForm1 *Form1; //--------------------------------------------------------------------------- #endifso nun meine eigene (Test)Klasse
Unit2.cpp//--------------------------------------------------------------------------- #pragma hdrstop #include <vcl.h> #include "Unit2.h" //--------------------------------------------------------------------------- #pragma package(smart_init) test::test(String test) { text=test; //TODO: Hier Ihren Quelltext einfügen } test::test() { text="Hallo"; //TODO: Hier Ihren Quelltext einfügen }UNit2.h
//--------------------------------------------------------------------------- #ifndef Unit2H #define Unit2H class test { public: test(String test); test(); private: String text; }; //--------------------------------------------------------------------------- #endifso...lusitg ist, das er jetzt keine fehler bringt! (Habe seit gestern nix verändert, glaube ich....dann zeig ich die von gestern)
[C++ Fehler] Unit1.cpp(14): E2089 Bezeichner '{' darf keinen Typqualifizierer besitzen [C++ Fehler] Unit1.cpp(14): E2312 'TForm' ist keine eindeutige Basisklasse von 'test' [C++ Fehler] Unit1.cpp(21): E2040 Deklaration nicht ordnungsgemäß abgeschlossenok, nehmen wir mal an, das funktioniert jetzt, wie setze ich meine klasse in kombination mit koponenten in Form1 ein?
zB das wenn ich eine CheckBox anklicke, das dann eine bool variable in meiner klasse (die noch nicht drin is die variable) verändert wird, oder eine funktion ausgeführt wird?
Und noch ne frage, wenn ich eigene klassen erstelle, muss ich da auch die VCL.h einbinden, oder weglassen?
-
müsste eigentlich funktionieren, soweit ich das sehe!
Verwenden der klasse:
mach eben mal zum test eine methode GetIt() die den String zurückgibt, und dann:
void __fastcall TForm1::Button1Click(TObject *Sender) { test t; Edit1->Text=t.GetIt(); }mal als einfaches beispiel
-
Name_ schrieb:
test::test(String test)
{
text=test; //TODO: Hier Ihren Quelltext einfügen
}ich glaub nicht, dass das geht, dein uebergebener string hat den gleichen namen wie deine klasse! am einfachsten kannst du das ueberpruefen, wenn du die unit separat kompilierst.
-
Hallo,
Noch zwei kleine Dinge mit deinen includs.
in Unit1.cpp#include <fstream.h>ersetzen durch
#include <fstream>in Unit2.cpp
#pragma hdrstop #include <vcl.h> #include "Unit2.h"ersetzen durch
#include <vcl.h> #pragma hdrstop #include "Unit2.h"
-
ich hab jetzt ne komische frage:
Was ist ein gutes programm, wo man eigene klassen mit komponenten einsetzen könnte?
Mir fällt irgendwie nix ein!
Möchte eben ein programm schreiben, was viel mit einer eigenen klasse macht, nur was?!
-
bleib dann am besten bei funktionen. ansonsten müsste dir die frage nicht erst jemand anders beantworten. *nicht böse gemeint, aber denke mal drüber nach*
klassen schreibt man nicht zum zeitvertreib, sondern weil sie etwas bewerkstelligen sollen.
versuch doch ne eigene komponente zu schreiben, da kannste dich in sachen klassen voll austoben!

gruß gerd
-
hmm..is schon shice wenn man kein ideen hat...lol!

-
es gibt für dich eigentlich zwei möglichkeiten:
1. du hast ein projekt vor, dann schreibe diese anwendung und vielleicht fehlt dir ja zwischendurch irgendwas an einer bestimmten funktionalität in einer komponente, dann kannste schreiben
2. du willst nur lernen und setzt dir ein komponenten ziel, und schreibst einfach so ne komponente!
oder du schreibst dir klassen auf der konsole, um deine fähigkeiten darin auszubauen!
gruß gerd