2 Fragen (Tastendruck und datei öffnen)



  • Hallo zusammen
    ich hoffe dass ihr mir bei meinem Problem verzeih. ich miente Probs. helfen könnt...
    ich will, dass wenn ich auf eine Datei Doppelklicke sie sich mit meinem Programm öffnet (ich weiß, dass es in den FAQ ist) ich schaff es ja auch, Windoof mitzuteilen, dass es die datei mit meim Proggi öffnet. Problem, meim Programm kann damit nix anfangen bei folgendem Code

    __fastcall TMarcTrainer::TMarcTrainer(TComponent* Owner)
            : TForm(Owner)
    {
     if (ParamStr(1) != "")
        {
        Vocabeln->LoadFromFile(ParamStr(1));
        randzahl = random(StrToInt(Vocabeln->Strings[3]))+2;
        randzahl = randzahl *2;
        Label1->Caption = Vocabeln->Strings[randzahl];
        Label2->Caption = Vocabeln->Strings[1];
        Label3->Caption = Vocabeln->Strings[2];
        }
    }
    

    so über öffnen gehts total, nur nich, wenn ich auf die datei Doppelklicke, und dass is ja mein Ziel...(den code oben, hab ich aus der FaQ) er meldet immer nur Fehler (EAccesViolation).
    hoff ich hab gnug gsagt und hof ihr köönt es lösen

    Prob 2
    Ich will einen Tastendruck abfangen (in diesem Fall die [Enter] Taste)
    und dann einen Button ausführen.
    Also: Ich gebe etwas in Edit 1 Ein, und drücke Enter, da´durch löst sich der Button unten aus. so soll es werden!
    hoffe auch hier, dass ich genug angaben gemacht hab, und dasss ihrs lösen könnt.

    Allgemein hoffe ich, dass ich im richtigen Forum bin....

    Bis Dann und danke im v******

    Elefunty



  • Hallo

    1. Vokabeln ist anscheinend eine TStringList. Und da sehe ich weder eine Deklaration (was aber einen Compiler-Fehler verursachen würde) noch sehe ich, das du eine gültige Instanz anlegst.

    2. Du kannst entweder den Event TForm::OnKeyPressed einsetzen oder du setzt (wenn du TButton verwendest) TButton::Default auf true.

    3. Ja du bist im richtigen Forum.

    bis bald
    akari



  • akari schrieb:

    Hallo

    1. Vokabeln ist anscheinend eine TStringList. Und da sehe ich weder eine Deklaration (was aber einen Compiler-Fehler verursachen würde) noch sehe ich, das du eine gültige Instanz anlegst.

    2. Du kannst entweder den Event TForm::OnKeyPressed einsetzen oder du setzt (wenn du TButton verwendest) TButton::Default auf true.

    3. Ja du bist im richtigen Forum.

    bis bald
    akari

    1. Ja es is ne String list dafür nochma der komplette Cot

    //---------------------------------------------------------------------------
    
    #include <vcl.h>
    #pragma hdrstop
    
    #include "Unit1.h"
    #include "fstream.h"
    #include <string>
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TMarcTrainer *MarcTrainer;
    TStringList* Vocabeln;
    int randzahl;
    //---------------------------------------------------------------------------
    __fastcall TMarcTrainer::TMarcTrainer(TComponent* Owner)
            : TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
    void __fastcall TMarcTrainer::Beenden1Click(TObject *Sender)
    {
    exit(1);
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TMarcTrainer::ffnen1Click(TObject *Sender)
    {
      try
      {
        if (OpenDialog1->Execute ())
          {
          Vocabeln->LoadFromFile (OpenDialog1->FileName);
          }
      randzahl = random(StrToInt(Vocabeln->Strings[3]))+2;
      randzahl = randzahl *2;
      Label1->Caption = Vocabeln->Strings[randzahl];
      Label2->Caption = Vocabeln->Strings[1];
      Label3->Caption = Vocabeln->Strings[2];
      }
      catch (...)
      {
        Application->MessageBox
          ("Fehler beim Öffnen der Datei!", "Achtung!", 0+48);
      }
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TMarcTrainer::FormCreate(TObject *Sender)
    {
    randomize ();
    Vocabeln = new TStringList();
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TMarcTrainer::Button1Click(TObject *Sender)
    {
      if (Edit1->Text == Vocabeln->Strings[++randzahl])
      {
      Label2->Caption = "Richtig!!!";
      Label4->Caption = StrToInt(Label4->Caption)+1;
      }
      else
      {
      Label2->Caption = "Leider Falsch";
      Label4->Caption = StrToInt(Label4->Caption)-1;
      }
      randzahl = random(StrToInt(Vocabeln->Strings[3]))+2;
      randzahl = randzahl *2;
      Label1->Caption = Vocabeln->Strings[randzahl];
    }
    //---------------------------------------------------------------------------
    

    2. Das kapier ich nich so ganz... Ja, das is n TButton...

    und das mim öffnen?

    Bis dann Elefunty



  • Hallo

    wie ich bereits vermutet habe, gibt es nirgendwo ein new, das eine gültige Instanz von TStringList für Vocabeln anlegt. Desweiteren ist das bei dir eine globale Variable, was auch nicht gut ist. Dabei würde es ja ausreichen, die rein lokal zu verwenden
    Das sollte so aussehen

    try
      {
        TStringList* Vocabeln = new TStringList;
        if (OpenDialog1->Execute ())
          {
          Vocabeln->LoadFromFile (OpenDialog1->FileName);
          }
      randzahl = random(StrToInt(Vocabeln->Strings[3]))+2;
      randzahl = randzahl *2;
      Label1->Caption = Vocabeln->Strings[randzahl];
      Label2->Caption = Vocabeln->Strings[1];
      Label3->Caption = Vocabeln->Strings[2];
      delete Vocabeln;
      }
      catch (...)
      {
        Application->MessageBox
          ("Fehler beim Öffnen der Datei!", "Achtung!", 0+48);
      }
    

    Damit wäre zumindestens der Speicherzugriffsfehler behoben.
    Du solltest aber vor dem Lesen aus der StringList auch prüfen, ob überhaupt was dadrin steht.

    Desweiteren solltest du zum Beenden des Programms nicht exit nehmen (das ist sozusagen die Notbremse). Sondern entweder (weil das dein Hauptform ist) Close(); oder Application->Terminate();

    2. Das kapier ich nich so ganz... Ja, das is n TButton...

    Was verstehst du nicht daran? Setzt zur Entwurfszeit die Eigenschaft Default des besagten Buttons auf true. Fertig.

    bis bald
    akari



  • THX das hauptproblem ist gelöst!!!!!
    danke akari
    aber wie mach i das, dass wenn ich auf die datie doppelklicke dass mein programm erkennt dass es die datei öffnen soll
    so solls aussehn (wo ich nich mehr weiter weis mach ich drei P)
    DoppelKlick auf datei>>>Programm Öffnet sich>>PPP>>Programm erkennt dies und öffnet die datei wie z.B.Word
    Elefunty



  • Hallo

    Wo machst du einen Doppelklick auf was für eine Datei?!
    Was soll PPP bedeuten?
    Was hat Word damit zu tun?

    Btw : Ein Thread, ein Thema. Ein Thema ein Thread. Also überleg dir deine Fragegestellung nochmal, so das auch uns klar ist was du wissen willst und mach damit einen neuen Thread auf.

    bis bald
    akari



  • akari schrieb:

    Hallo

    Wo machst du einen Doppelklick auf was für eine Datei?! - im Explorer
    Was soll PPP bedeuten? - Hab ich geschrieben
    Was hat Word damit zu tun? - isn Vergleich

    Btw : Ein Thread, ein Thema. Ein Thema ein Thread. Also überleg dir deine Fragegestellung nochmal, so das auch uns klar ist was du wissen willst und mach damit einen neuen Thread auf.

    bis bald
    akari

    Hast wohl nich genau gelesen...
    siehe

    Ich schrieb:

    ich schaff es ja auch, Windoof mitzuteilen, dass es die datei mit meim Proggi öffnet

    so ich hab doch auch gleich am Anfang gesagt, was ich machen will.
    ich hoffe, dass ich nun alles klargestellt hab, und dass folgender Verlauf reibungslos Verläuft......

    ..........................
    Elefunty

    Edit: das mim Button hab ich jez geschafft
    Edit oh das hatte ich schon gesagt... nix für ungut 😉



  • Hallo

    Die Antwort hättest du schon durch diesen Thread in der FAQ bekommen können.

    bis bald
    akari



  • akari schrieb:

    Hallo

    Die Antwort hättest du schon durch diesen Thread in der FAQ bekommen können.

    bis bald
    akari

    ja, da kann ichs innen Memo einlesen, aber wenn ich es in die Stringlist speichern will kommt immer dieser Fehler...
    aber nochmal danke...
    Elefunty

    PS: du solltest dir vielleicht mal den Gesamten Thread durchlesen... 🙂



  • Hallo

    der Fehler den du am Anfang beschrieben hast, kam von der nicht initialisierten StringList. Die Lösung habe ich dir schon bereits beschrieben.

    Woran genau hängt es also jetzt noch?
    Bitte relevanten aktuellen Quellcode und eine detaillierte Fehlerbeschreibung.

    /Edit : Ob du in ein Memo oder eine eigene TStringList lesen will, spielt für die Parameterübergabe an das Programm und deren Auswertung keine Rolle.

    bis bald
    akari


Anmelden zum Antworten