Fehler?!?



  • aahhh ^^.. itz kann ich mich a endlich mal einlogen ^^.. naja ega .. also kannst du mir des ma erklärn bzw. des glei ma einbinden?



  • Die Form hat verschiedene Events auf die sie reagieren kann wie z.B. onClick, onShow, onClose usw. Immer wenn das entsprechende Event passiert wird die dazugehörige Funktion ausgelöst.
    Bei einem Tastendruck auf der Form wird dann z.B. das Event onKeyPress ausgelöst und damit die Funktion

    void __fastcall TForm1::FormKeyPress(TObject *Sender, char &Key)
    {
     //Alles was hier steht wird bei einem Tastendruck auf der Form ausgeführt
    }
    

    Hinter dem :: steht auf welches Event sich die Funktion bezieht, gefolgt von den Parametern die dieser übergeben werden. Wie du sehen kannst ist einer dieser Parameter Key. Aus dem kannst du dann wie vorher gezeigt auslesen welche Taste denn nun eigentlich gedrückt wurde und dementsprechend darauf reagieren.

    Welche Events ein Objekt alle hat kannst du im Object Inspector sehen wenn du den Reiter "Events" wählst. Dort kannst du auch mit einem doppelklick auf ein Event dir automatisch die Grundstruktur der Funktion (siehe code) automatisch generieren lassen.

    Dein code müsste also dann so aussehen:

    #include <vcl.h>
    #include <conio.h>
    #include <stdio.h>
    
    #pragma hdrstop
    
    #include "Unit1.h"
    #include "Unit2.h"
    #include "Unit3.h"
    #include "Unit4.h"
    #include "Unit5.h"
    
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    int huehnchenbild=4;
    bool gebissen;
    char c ;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
            : TForm(Owner)
    {
    fliege1->Left=Image4->Left;
    fliege1->Top=Image4->Top-8;
    fliege1->Visible=false;
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::FormKeyDown(TObject *Sender, WORD &Key,
          TShiftState Shift)
    {
     if(Key == VK_LEFT)
        bild->Left -= 10;
     if(Key == VK_RIGHT)
        bild->Left += 10;
     if(Key == VK_UP)
        bild->Top -= 10;
     if(Key == VK_DOWN)
        bild->Top += 10;
    }
    //---------------------------------------------------------------------------
    

    Ich hoffe das ich dir alles einigermaßen gut erklären konnte.

    mfg

    Tsurai



  • jo also sry wenn ich nerv aba ich hab des itz so (wobei "bild" zu "huehnchen" geworden is ^^):

    //---------------------------------------------------------------------------
    #include <vcl.h>
    #include <conio.h>
    #include <stdio.h>
    
    #pragma hdrstop
    
    #include "Unit1.h"
    #include "Unit2.h"
    #include "Unit3.h"
    #include "Unit4.h"
    #include "Unit5.h"
    
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    int huehnchenbild=4;
    bool gebissen;
    char c ;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
            : TForm(Owner)
    {
    fliege1->Left=Image4->Left;
    fliege1->Top=Image4->Top-8;
    fliege1->Visible=false;
    }
    
    //---------------------------------------------------------------------------
    void __fastcall TForm1::FormKeyDown(TObject *Sender, WORD &Key,TShiftState Shift)
    {
     if(Key == VK_LEFT)
    huehnchen->Left=huehnchen->Left-10;
     if(Key == VK_RIGHT)
    huehnchen->Left=huehnchen->Left+10;
     if(Key == VK_UP)
    huehnchen->Top=huehnchen->Top-10;
     if(Key == VK_DOWN)
    huehnchen->Top=huehnchen->Top+10;
    }
    //---------------------------------------------------------------------------
    

    nur wenn ich das kompiliern will kommt:

    [C++ Error] Unit1.cpp(33): E2316 '_fastcall TForm1::FormKeyDown(TObject *,unsigned short &,TShiftState)' is not a member of 'TForm1'

    wo liegt itz mei fehler? ich schötz mal da fehlt itz ne definirung oda ne einbindung oda sowas.. also wie wenn ich ne 2. form einbinden will des "<Unit2.h>" oda so ... also nochma: ich bin noch der ziemliche anfänger ^^.. und ma so btw: wo lernst du programmiern? weil wenn du sahst du bist noch "anfänger" dann gehst du schu ziemlich ab ^^.. also per buch oda wie? wenn jo welche(s)?



  • aso .. also wie gesaht ich denk mal das muss mit in die form oda in die header .. die form haste ja und hier is die header:

    #include <Classes.hpp>
    #include <Controls.hpp>
    #include <StdCtrls.hpp>
    #include <Forms.hpp>
    #include <ExtCtrls.hpp>
    #include <Graphics.hpp>
    #include <Menus.hpp>
    //---------------------------------------------------------------------------
    class TForm1 : public TForm
    {
    __published:	// Von der IDE verwaltete Komponenten
            TImage *Image1;
            TButton *Hoch;
            TButton *Runter;
            TButton *Links;
            TButton *Rechts;
            TImage *huehnchen;
            TMainMenu *MainMenu1;
            TMenuItem *sas1;
            TMenuItem *gauf;
            TMenuItem *Beenden1;
            TLabel *Laune;
            TImage *Image3;
            TLabel *Label1;
            TLabel *Label2;
            TLabel *Label3;
            TMenuItem *Optionen1;
            TMenuItem *Hilfe1;
            TMenuItem *Hilfe2;
            TMenuItem *Version1;
            TMenuItem *Updates1;
            TImage *Image2;
            TButton *biss;
            TButton *Button1;
            TImage *Image4;
            TTimer *Timer3;
            TTimer *Timer1;
            TImage *fliege1;
            void __fastcall HochClick(TObject *Sender);
            void __fastcall RunterClick(TObject *Sender);
            void __fastcall RechtsClick(TObject *Sender);
            void __fastcall LinksClick(TObject *Sender);
            void __fastcall Beenden1Click(TObject *Sender);
            void __fastcall gaufClick(TObject *Sender);
            void __fastcall Hilfe2Click(TObject *Sender);
            void __fastcall Version1Click(TObject *Sender);
            void __fastcall Optionen1Click(TObject *Sender);
            void __fastcall bissClick(TObject *Sender);
            void __fastcall Button1Click(TObject *Sender);
            void __fastcall Timer3Timer(TObject *Sender);
            void __fastcall Timer1Timer(TObject *Sender);
    
    private:	// Anwenderdeklarationen
    public:		// Anwenderdeklarationen
            __fastcall TForm1(TComponent* Owner);
    };
    //---------------------------------------------------------------------------
    extern PACKAGE TForm1 *Form1;
    //---------------------------------------------------------------------------
    


  • das stimmt das muß auch in den Header, allerdings macht das der BCB selbst, zumindest wenn mans richtig macht:

    klick auf dein Formular, dann im Objektinspektor auf Ereignisse (also das Tab neben Eigenschaften) und dort Doppelklick auf das leere Feld neben OnKeyDown, schon legt der BCB im Header und in der Cpp einen entsprechenden Funktionskopf an



  • Tut mir leid, ich hatte den Header ganz vergessen weil ich daran gewöhnt bin das der bcb das selbst macht wenn man halt die von Linnea und mir beschriebenen Schritte folgt.
    In deinem Fall müsste der header dann so aussehen:

    #include <Classes.hpp>
    #include <Controls.hpp>
    #include <StdCtrls.hpp>
    #include <Forms.hpp>
    #include <ExtCtrls.hpp>
    #include <Graphics.hpp>
    #include <Menus.hpp>
    //---------------------------------------------------------------------------
    class TForm1 : public TForm
    {
    __published:    // Von der IDE verwaltete Komponenten
            TImage *Image1;
            TButton *Hoch;
            TButton *Runter;
            TButton *Links;
            TButton *Rechts;
            TImage *huehnchen;
            TMainMenu *MainMenu1;
            TMenuItem *sas1;
            TMenuItem *gauf;
            TMenuItem *Beenden1;
            TLabel *Laune;
            TImage *Image3;
            TLabel *Label1;
            TLabel *Label2;
            TLabel *Label3;
            TMenuItem *Optionen1;
            TMenuItem *Hilfe1;
            TMenuItem *Hilfe2;
            TMenuItem *Version1;
            TMenuItem *Updates1;
            TImage *Image2;
            TButton *biss;
            TButton *Button1;
            TImage *Image4;
            TTimer *Timer3;
            TTimer *Timer1;
            TImage *fliege1;
            void __fastcall HochClick(TObject *Sender);
            void __fastcall RunterClick(TObject *Sender);
            void __fastcall RechtsClick(TObject *Sender);
            void __fastcall LinksClick(TObject *Sender);
            void __fastcall Beenden1Click(TObject *Sender);
            void __fastcall gaufClick(TObject *Sender);
            void __fastcall Hilfe2Click(TObject *Sender);
            void __fastcall Version1Click(TObject *Sender);
            void __fastcall Optionen1Click(TObject *Sender);
            void __fastcall bissClick(TObject *Sender);
            void __fastcall Button1Click(TObject *Sender);
            void __fastcall Timer3Timer(TObject *Sender);
            void __fastcall Timer1Timer(TObject *Sender);
            void __fastcall FormKeyPress(TObject *Sender, char &Key);
    
    private:    // Anwenderdeklarationen
    public:        // Anwenderdeklarationen
            __fastcall TForm1(TComponent* Owner);
    };
    //---------------------------------------------------------------------------
    extern PACKAGE TForm1 *Form1;
    //---------------------------------------------------------------------------
    


  • Sieht so aus, als bräuchtest du auch Hilfe bezüglich deutscher Rechtschreibung...



  • @_DocShoe_

    weil?

    @Tsurai

    k alles kla danke .. nur nu nochma: wie lernst du des? also ich hab noch keine richtig geile methode gefunden (außer in foren weil de da viel erklärt kriegst) wo de mal richtig geil lern kannst .. zumal du meinst du bist anfänger ^^ ..
    naja aba ich hab des itz so drin:

    //---------------------------------------------------------------------------
    #include <vcl.h>
    #include <conio.h>
    #include <stdio.h>
    
    #pragma hdrstop
    
    #include "Unit1.h"
    #include "Unit2.h"
    #include "Unit3.h"
    #include "Unit4.h"
    #include "Unit5.h"
    
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    int huehnchenbild=4;
    bool gebissen;
    char c ;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
            : TForm(Owner)
    {
    fliege1->Left=Image4->Left;
    fliege1->Top=Image4->Top-8;
    fliege1->Visible=false;
    }
    
    //--------------------------------------------------------------------------
    
    void __fastcall TForm1::FormKeyDown(TObject *Sender, WORD &Key,
          TShiftState Shift)
    {
    if(Key == VK_LEFT)
    huehnchen->Left=huehnchen->Left-10;
     if(Key == VK_RIGHT)
    huehnchen->Left=huehnchen->Left+10;
     if(Key == VK_UP)
    huehnchen->Top=huehnchen->Top-10;
     if(Key == VK_DOWN)
    huehnchen->Top=huehnchen->Top+10;
    }
    //---------------------------------------------------------------------------
    

    und so in der header:

    //---------------------------------------------------------------------------
    #ifndef Unit1H
    #define Unit1H
    //---------------------------------------------------------------------------
    #include <Classes.hpp>
    #include <Controls.hpp>
    #include <StdCtrls.hpp>
    #include <Forms.hpp>
    #include <ExtCtrls.hpp>
    #include <Graphics.hpp>
    #include <Menus.hpp>
    //---------------------------------------------------------------------------
    class TForm1 : public TForm
    {
    __published:	// Von der IDE verwaltete Komponenten
            TImage *Image1;
            TButton *Hoch;
            TButton *Runter;
            TButton *Links;
            TButton *Rechts;
            TImage *huehnchen;
            TMainMenu *MainMenu1;
            TMenuItem *sas1;
            TMenuItem *gauf;
            TMenuItem *Beenden1;
            TLabel *Laune;
            TImage *Image3;
            TLabel *Label1;
            TLabel *Label2;
            TLabel *Label3;
            TMenuItem *Optionen1;
            TMenuItem *Hilfe1;
            TMenuItem *Hilfe2;
            TMenuItem *Version1;
            TMenuItem *Updates1;
            TImage *Image2;
            TButton *biss;
            TButton *Button1;
            TImage *Image4;
            TTimer *Timer3;
            TTimer *Timer1;
            TImage *fliege1;
            void __fastcall HochClick(TObject *Sender);
            void __fastcall RunterClick(TObject *Sender);
            void __fastcall RechtsClick(TObject *Sender);
            void __fastcall LinksClick(TObject *Sender);
            void __fastcall Beenden1Click(TObject *Sender);
            void __fastcall gaufClick(TObject *Sender);
            void __fastcall Hilfe2Click(TObject *Sender);
            void __fastcall Version1Click(TObject *Sender);
            void __fastcall Optionen1Click(TObject *Sender);
            void __fastcall bissClick(TObject *Sender);
            void __fastcall Button1Click(TObject *Sender);
            void __fastcall Timer3Timer(TObject *Sender);
            void __fastcall Timer1Timer(TObject *Sender);
            void __fastcall FormKeyDown(TObject *Sender, WORD &Key,
              TShiftState Shift);
    
    private:	// Anwenderdeklarationen
    public:		// Anwenderdeklarationen
            __fastcall TForm1(TComponent* Owner);
    };
    //---------------------------------------------------------------------------
    extern PACKAGE TForm1 *Form1;
    //---------------------------------------------------------------------------
    #endif
    

    nur wenn ich das kompilier (fehlerfrei), das aufgeht und ich die pfeiltasten drück wechselt der imma nur die markierung von den button die ich drin hab .. also wie wenn ich auf [TAB] drücken würde .. ich habs mit onkeypress und onkeydown versucht .. klappt ne.. dann hab ich spaßeshalber ma die buttons raus genomm.. nur leider bewegt sich das bild immanoch ne hoch und runna .. 😞



  • heiden schrieb:

    k alles kla danke .. nur nu nochma: wie lernst du des? also ich hab noch keine richtig geile methode gefunden (außer in foren weil de da viel erklärt kriegst) wo de mal richtig geil lern kannst .. zumal du meinst du bist anfänger ^^ ..

    Programmieren habe ich in der 8. Klasse im Informatik Kurs angefangen zu lernen. Damals aber mit VB und der Lehrer war ziehmlich schlecht. Erst vor 3 Jahre habe ich auf der Berufsschule auf der ich mein Fachabitur und eine Ausbildung zum Informationstechnischen Assistenten gemacht habe mit C/C++ angefangen. Wobei ich sagen muss das ich Zuhause in meiner Freizeit sehr viel aus Spaß programmiert habe.
    Eine sehr große Hilfe war das Buch "Borland C++ Builder 5 Grundlagen (ISBN: 3-9806738-4-7)". Solltest du dir mal angucken, besonders weil es sich auch direkt auf den Borland Builder bezieht. Außerdem bietet dieses Forum auch sehr gute Tutorials an:
    http://www.c-plusplus.net/cms/modules.php?op=modload&name=Downloads&file=index

    Ich bezeichne mich als Anfänger weil ich im Vergleich zu den meisten in diesem Forum ein wirklich kleines Wissen über Programmierung habe. Außerdem ist C/C++ so umfangreich das man nie alles perfekt können kann.

    Und nun zurück zu deinem Problem. Wie ich bereits vorher gesagt habe wird dieser Weg nur funktionieren wenn auf der Form nichts anderes als das Bild ist, bzw nichts was der Form in direkten Fokus nehmen könnte.
    Als Alternative könntest du Hooks benutzen mit denen du Tastendrücke systemweit abfangen kannst. Also auch wenn du mehrere Forms hast usw. Das ist wiederum etwas kompliziert. Wie das genau geht kannst du in diesem Thread lesen:
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-39145.html



  • aso jo ok .. naja des wird aba grad bissl kompliziert ^^.. naja ich gucks mir mal an und versuchs das ma .. wenn ichs ma getestet hab meld ich mich auf jeden fall nochma!! aba auf jeden fall danke erstma für alles !!!


Anmelden zum Antworten