Objekt benutzen, welches versteckt ist



  • Eigentlich wird das in der BCB-Hilfe schon ganz gut erklärt.
    Du musst dir nur auch alle Eigenschaften, Methoden usw. auch anschauen!



  • Hallo

    außerdem gibt es auch unter <BCB-Path>Examples\Apps\Canvas noch ein Beispiel.

    bis bald
    akari



  • Mit diesesn Beispiel komm ich nicht ganz zurecht. Kann mir vielleicht mal einer ein Beispiel posten das nicht so komplex ist? z.B. das einfach nur ein Quadrat gezeichnet wird.

    Bin halt noch Anfänger, aber schon mal thx im vor raus. 🙂



  • Hallo

    hier bitte ein einfaches Quadrat, einfach in einer Methode wie OnPaint (aber nicht Konstruktor oder OnCreate) einbauen :

    Canvas->Rectangle(10, 10, 100, 100);
    

    bis bald
    akari



  • Omg, bin halt totaler Anfänger, Metoden...
    Ich nutze bisher eigentlich immer die die, die automatisch erstellt werden...
    (hab in FAQ nichts gefunden zu diesen Thema, wär über nen Link sehr dankbar.)



  • Hallo

    Ich nutze bisher eigentlich immer die die, die automatisch erstellt werden...

    Und was hindert dich daran, für das OnPaint-Ereignis des Forms über den Objektinspektor eine Methode zuerstellen?

    (hab in FAQ nichts gefunden zu diesen Thema, wär über nen Link sehr dankbar.)

    Was für ein Thema meinst du genau? Wenns um Methoden allgemein geht, dann schau die ein Grundlagentutorial zum Thema OOP an, wie das hier.

    bis bald
    akari



  • DSD-Steve schrieb:

    Omg, bin halt totaler Anfänger, Metoden...
    Ich nutze bisher eigentlich immer die die, die automatisch erstellt werden...
    (hab in FAQ nichts gefunden zu diesen Thema, wär über nen Link sehr dankbar.)

    Sach mal.....wie haste denn dann es geschafft ein TicTacToe zu programieren? 😮

    Copy & Paste? 🙄



  • Wieso Copy und Paste? 😕
    Soll ich mal nen Quellcode-Schnippsel zum Beweis reinposten? :p

    Also ich hab das jetzt hinbekommen und hab das Mühlefeld gezeichnet mit TCanvas. Aber wo liegt dabei der Vorteil? Die Datei ist genau so groß(nagut ein paar 100Kilo ist sie kleiner 😉 ) wie die, die ich mit Label gemacht habe. 😕

    Und nun zu meinen Ursprungsproblem zurück. Ich wollte jetzt die Methode OnMouseDown verwenden und die Hilfe sagt folgendes:

    X und Y geben die Pixel-Koordinaten des Mauszeigers im Client-Bereich von Sender an.

    Jetzt meine Frage: Wenn ich nur ein X und ein Y definiere, wie soll das gabnze dann für eine ganze Fläche funzen? Ich brauche doch eigentlich genau wie bei Canvas->Rectangle doch eigentlich 4 Werte?



  • Hallo

    Eine Mausposition hat genau einen X- und einen Y-Wert. Es ist ein Punkt und kein Rechteck.

    Wenn du nun wissen willst, ob dieser punkt in einem von dir definierten Recheckt liegt, must du schon selber einen Vergleich über die Ecken des Rechtecks anstellen.

    bis bald
    akari



  • Ist dies denn effektiv oder sollte ich lieber eine andere Methode verwenden?



  • das ist für Canvas die effektivste Methode, frage einfach ab, ob dein Punkt(X,Y) in dem Bereich des Rechtecks liegt und reagiere je nachdem.



  • Hallo

    Es läßt sich nicht anders lösen.
    Wenn du natürlich mehrere Rechtecke in einem gewissen berechenbaren System angelegt hast, läst sich sowas auch berechnen anstatt einzeln vergleichen.

    bis bald
    akari



  • Irgendwie hab ich gerade ne Denkblockade, ich denke mal es ist eigentlich ziemlich einfach aber ich komm gerade nicht drauf. Am besten ich poste mal meinen Quellcode:

    void __fastcall TForm1::FormPaint(TObject *Sender)
    {
    // Balken außen
    Canvas->Brush->Color = clBlack;//oben
    Canvas->Rectangle(20,20,500,40);
    Canvas->Brush->Color = clBlack;//unten
    Canvas->Rectangle(20,480,500,500);
    Canvas->Brush->Color = clBlack;//links
    Canvas->Rectangle(20,40,40,480);
    Canvas->Brush->Color = clBlack;//rechts
    Canvas->Rectangle(480,40,500,480);
    // Balken mitte
    Canvas->Brush->Color = clBlack;//oben
    Canvas->Rectangle(95,95,425,115);
    Canvas->Brush->Color = clBlack;//unten
    Canvas->Rectangle(95,405,425,425);
    Canvas->Brush->Color = clBlack;//links
    Canvas->Rectangle(95,115,115,405);
    Canvas->Brush->Color = clBlack;//rechts
    Canvas->Rectangle(405,115,425,405);
    // Balken innen
    Canvas->Brush->Color = clBlack;//oben
    Canvas->Rectangle(170,170,350,190);
    Canvas->Brush->Color = clBlack;//unten
    Canvas->Rectangle(170,330,350,350);
    Canvas->Brush->Color = clBlack;//links
    Canvas->Rectangle(170,190,190,330);
    Canvas->Brush->Color = clBlack;//rechts
    Canvas->Rectangle(330,190,350,330);
    // Balken quer
    Canvas->Brush->Color = clBlack;//oben
    Canvas->Rectangle(250,40,270,190);
    Canvas->Brush->Color = clBlack;//unten
    Canvas->Rectangle(250,350,270,480);
    Canvas->Brush->Color = clBlack;//links
    Canvas->Rectangle(20,250,180,270);
    Canvas->Brush->Color = clBlack;//rechts
    Canvas->Rectangle(350,250,480,270);
    }
    

    Wie mache ich das wen ich z.B. möchte das wenn Spieler 1 oben Links auf die Ecke klickt dort sein Stein erstellt wird. 😕



  • Hallo

    da hast du doch die Positionen der einzelnen Recheckte doch.
    Jetzt must du nur noch in OnMouseUp die einzelnen Rechtecke mit den übergebenen Koordinaten vergleichen

    bool Check(const TRect &Rect, int X, int Y)
    {
      return((Rect.left <= X) && (Rect.right >= X) && (Rect.top <= Y) && (Rect.bottom >= Y));
      }
    
    void __fastcall Form1::OnMouseUp(TObject* Sender, TMouseButton Button, Classes::TShiftState Shift, int X, int Y)
    {
      if (Check(TRect(20,40,40,480), X, Y))
      {
        // Klick in oberes linkes Recheck...
        }
      ...
      }
    

    /Edit : Du brauchst übrigens Pen->Color nur setzen, wenn du es ändern willst.

    bis bald
    akari


Anmelden zum Antworten