(Anfänger) Suche Hilfe beim Erstellen einer Rezeptdatenbank



  • so weit bin ich jetzt:

    void __fastcall TForm1::newrubrikClick(TObject *Sender)
    {
    Text1 = InputBox ("Neue Rubrik","Geben Sie die neue Rubrik ein:","neue Rubrik");
    TreeView1->Items->Add(Text1);
    TreeView1->SaveToFile(pfad_rubrik);
    }
    

    Doch:
    Cannot Convert 'System::AnsiString' to 'Comctrls::TTreeNode *'.

    Type mismatch in parameter 'Node' in call to '_fastcall Comctrls::TTreeNodes::Add(Comctrls::TTreeNode*,const System::AnsiString)'.

    Too few parameters in call to '_fastcall Comctrls::TTreeNodes::Add(Comctrls::TTreeNode *, const System::AnsiString)'.



  • hiho
    sry für den ****, den ich da geschrieben hab. (ich hab gedacht, es geht so, wie bei einer ListBox)

    TreeView1->Items->Add(NULL, Text1);
    

    so muss es sein
    SChau auch mal unter der BCB-Hilfe nach(such nach "TreeView Add"):

    void __fastcall TForm1::Button1Click(TObject *Sender)
    
    {
      TTreeNode *Node1;
      TreeView1->Items->Clear(); // Existierende Knoten entfernen
      // Stammknoten hinzufügen
      TreeView1->Items->Add(NULL, "RootNode1");
    
      /* MyTreeNode wird der erste Knoten in der Baumstruktur zugewiesen, dann wird ein untergeordneter Knoten hinzugefügt */
      Node1 = TreeView1->Items->Item[0];
      TreeView1->Items->AddChild(Node1,"ChildNode1");
    
      // Anderen Stammknoten hinzufügen
      TreeView1->Items->Add(Node1, "RootNode2");
    
      /* Node1 wird auf RootNode2 zurückgesetzt, dann wird ein untergeordneter Knoten hinzugefügt */
    
      Node1 = TreeView1->Items->Item[2];
      TreeView1->Items->AddChild(Node1,"ChildNode2");
    
      /* Node1 wird auf ChildNode2 zurückgesetzt, dann wird ein untergeordneter Knoten hinzugefügt */
      Node1 = TreeView1->Items->Item[3];
      TreeView1->Items->AddChild(Node1,"ChildNode2a");
    
       /* Hinter ChildNode2a wird ChildNode2 ein weiterer Knoten hinzugefügt */
      TreeView1->Items->AddChild(Node1,"ChildNode2b");
    
      // Anderen Stammknoten hinzufügen
      TreeView1->Items->Add(TreeView1->Items->Item[0], "RootTreeNode3");
    
    }
    

    da steht alles drin(denk ich)
    mfg allison



  • Ok, das habeich jetzt ausprobiert, funktioniert alles super:
    dann wollte ih es so machen:

    void __fastcall TForm1::FormCreate(TObject * Sender)
    {
      TTreeNode *Node1;
      TreeView1->Items->Clear();
      TreeView1->Items->Add(NULL, TreeView1->LoadFromFile (pfad_rubrik));
    }
    

    Doch:
    Cannot Convert void to System::AnsiString
    Node1 is declared but never used;



  • Hallo

    Ja du hast doch schon rausgefunden was du Add übergeben must. Warum räts du wild rum anstatt in die BCB-Hilfe zu schauen? Wenn du LoadFromFile benutzt brauchst du kein Add mehr.

    bis bald
    akari



  • hiho
    wenn das der ganze code für FormCreate ist, sollte

    TTreeNode *Node1;
    

    weg, weil du das hier nicht brauchst;
    mfg allison



  • ja stimmt, bin bisschen durcheinander.
    Also neue Rubriken, per Knofdruck funktioniert, auch das speichern in einer txt-Datei klappt.
    wie siehts aus mit löschen von Rubriken, dazu würde ich gern ein Kontextmenu nutzen, ist das kompliziert?

    Auch ein weiteres Problem ist enstanden, wenn ich nach der Eingabe des neuen Rubriknames Abbrechen drücke, erstellt er die neue Rubrik trotzdem, also hab ich versucht:

    void __fastcall TForm1::newrubrik2Click(TOBject *Sender)
    {
    String Text1;
    Text1 = InputBox ("Neue Rubrik", "Geben Sie die neue Rubrik ein:", "Rubrikname");
    if (IDOK==true)
      {
      TreeView1->Items->Add(NULL,Text1);
      TreeView1->SaveToFile (pfad_rubrik);
      }
    }
    

    Aber irgendwie sagt er Condition is always true!
    Warum is die always true?



  • hiho
    IDOK ist einfach true
    da steht irgentwo irgentwas wie das hier:

    #define IDOK true
    

    mfg allison



  • hiho
    machs lieber so:

    if (Text1 != "")
    {
    ...
    }
    

    mfg allison



  • Hallo

    Oder mit anderen Worten : Es ist unnütz zwei Konstanten zu vergleichen. Du must natürlich das Rückgabeergebnis von InputQuery auswerten.

    bis bald
    akari



  • ja, habs hinbekommen, hab mir schon sowas gedacht, konnte mir aber nicht denken,dass die Variable Text1, den Wert vin IDOK hat.



  • Hallo

    konnte mir aber nicht denken,dass die Variable Text1, den Wert vin IDOK hat.

    Hat sie ja auch nicht. IDOK hat damit nichts zu tun.

    bis bald
    akari



  • hiho

    konnte mir aber nicht denken,dass die Variable Text1, den Wert vin IDOK hat.

    Hat sie auch nicht

    IDOK ist einfach true

    IDOK = true 💡
    nicht Text1
    [edit] akari war mal wieder schneller 😞
    mfg allison



  • Und wie mache ich das jetzt, das mit der rechten Maustaste über ein Kontextmenü einen eintrag löschen kann?
    nehmen ich da OLe-Container(oder wie das Ding heißt)
    oder TPopupMenu?



  • Hallo

    Du erstellst ein TPopupmenu auf deinem Form und weist dem die notwendigen Einträge und Aktionen zu. Dann must du nur doch die Eigenschaft TTreeView::PopupMenu auf dieses Menu zeigen lassen.

    bis bald
    akari



  • Hilfe!!!
    ein PopupMenu auf meinem Form erstellen krieg ich hin.
    Darin Einträge setzen, krieg ich auch hin.
    Den Einträgen Aktionen zuweisen, kein Plan, ob ich das hinkriege.
    Die Eigenschaft TTreeView::PopupMenu auf das Kontextmenü zeigen lassen krieg ich nicht hin.

    Wie stelle ich das an?

    (PS Sagt mal, woher habt ihr eigentlich die Nerven, mit mir rumzuplagen, ich stell doch nur Anfängerfragen, oder? Find Ich aber trotzdem echt super, wie freundlich Ihr antwortet.)



  • Hallo

    Den Einträgen Aktionen zuweisen, kein Plan, ob ich das hinkriege.

    Eintrag des Menu auswählen, im Objektinspektor zu den Events gehen und bei OnClick doppelklicken : die Notwengige Methode wird im Code erstellt.

    Die Eigenschaft TTreeView::PopupMenu auf das Kontextmenü zeigen lassen krieg ich nicht hin.

    TreeView auswählen die Eigenschaft PopupMenu suchen und dort in der Auswahl deine Popup-Komponente auswählen (TreeView und Popmenu müßen natürlich auf dem selben Form liegen.)

    (PS Sagt mal, woher habt ihr eigentlich die Nerven, mit mir rumzuplagen, ich stell doch nur Anfängerfragen, oder? Find Ich aber trotzdem echt super, wie freundlich Ihr antwortet.)

    Das könntest du auch alles in der BCB-Hilfe nachlesen...

    bis bald
    akari



  • 1. es gibt laut meinem Objektinspektor keine Eigenschaft Popup oder OnPopup oder ähnliches.
    2. ich habe das gemacht:

    void __fastcall TForm1::TreeView1Change(Tobject *sender, TTreeNode, *Node)
    {
    int x = MouseCoord (x); // x-Koordinate des MouseCursors auslesen
    int y = MouseCoord (y); // y lalalala
    PopupMenu1->Popup(x,y); //Das Popup reagiert auf Change
    }
    

    Die Methode Popup funktioniert, nur das Auslesen der MouseCoord, will nicht gehen. Dann muss ich noch hinbekommen, das er auf die rechte Maustaste reagiert.



  • hiho
    es heisst popupmenu
    mfg allison



  • Hallo

    Ich habe keine Ahnung was die TreeView1Change-Methode soll, ist aber nicht der richtige Weg um das PopupMenu aufzurufen. Das macht alles die VCL für dich mithilfe der PopupMenu-Eigenschaft.

    Also
    - wähle zur Entwurfszeit das TreeView aus.
    - Gehe in den Objektinspektor
    - Suche in der Liste der Eigenschaften "PopupMenu". Hinweis : die Liste ist alphabetisch sortiert
    - Setz den Cursor in die Zelle um die Combobox aufzurufen und wähl deine Popup-Komponente aus
    Mehr must du nicht machen.

    bis bald
    akari



  • uuuups, war natürlich bei Ereignisse, ich kann garnicht glauben, wie doof ich schon wieder war! Echt mal!
    Aber jetzt machen wir erstmal Mittag, dann hört Ihr von mir!
    Guten Appetit


Anmelden zum Antworten