primitives Zeichenprogramm (Positions Problem)



  • //---------------------------------------------------------------------------
    
    #include <vcl.h>
    #pragma hdrstop
    
    #include "Unit1.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
            : TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::ffnen1Click(TObject *Sender)
    {
    if(OpenDialog1->Execute())
      {
      Image1->Picture->LoadFromFile(OpenDialog1->FileName);
      }
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Beeenden1Click(TObject *Sender)
    {
    Close();        
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::SpeedButton1Click(TObject *Sender)
    {
    Image1->Canvas->MoveTo(150,300);
    Image1->Canvas->Pen->Color =clRed;
    Image1->Canvas->Brush->Color =clBlue;
    Image1->Canvas->Rectangle(5,5,60,60);
    
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::SpeedButton2Click(TObject *Sender)
    {
    Image1->Canvas->Pen->Color =clGreen;
    Image1->Canvas->Brush->Color =clYellow;
    Image1->Canvas->Ellipse(5,5,30,30);
    }
    //---------------------------------------------------------------------------
    

    Morgen zusammen,

    ich versuchen mich grade an einem Zeichen Programm.
    Aber ich bekomme es nicht hin das z.b:

    Image1->Canvas->Pen->Color =clGreen;
    Image1->Canvas->Brush->Color =clYellow;
    Image1->Canvas->Ellipse(5,5,30,30);
    

    dort hinkommen sollen auf den Image1 wo meine maus hinklickt.

    jemand ne idee wie man das Problem lösen kann. ? ich würde michs ehr freuen

    mfg

    |23|



  • In den OnMouse...-Events von TImage bekommst du die Koordinaten der Maus über dem Image und kannst deine Zeichen-Koordinaten entsprechend anpassen.



  • sorry,

    versteh ich nicht so richtig 😞 *sorry*

    *hab auch erste 1 woche c++ hinter mir sprich Borland Builder 6*



  • Zwischen meiner Antwort und deiner Nachfrage liegen gerade mal 10 Minuten. In der Zeit willst du dich ernsthaft mit den von mir gegebenen Informationen auseinandergesetzt haben? D.H. du hast dir die Beschreibungen zu den Events in der Hilfe durchgelesen, hast die dort gegebenen Beispiele ausprobiert, hast sie abgewandelt und die Ergebnisse ausgewertet und hast versucht, das Ganze auf deine Zeichenoperationen zu übertragen. Und dann hast du deine Nachfrage geschrieben, und das alles in 10 Minuten???

    Wir helfen gern, üblicherweise aber nur, wenn auch etwas eigener Einsatz zu erkennen ist.



  • Jansen schrieb:

    [...], und das alles in 10 Minuten???

    Jansen, du wirst hald einfach etwas träge aufs Alter (o;

    SCNR

    -junix



  • nee tut mir leid ich komm ned dahinter.



  • Was hast du versucht, wie sieht dein (nichfunktionierender) Code aus?



  • nix ich hab nix raus sitze hier die ganze zeit mache mir meine gedanken und was ist nix 😢



  • rumsitzen und so tun als ob man nachdenkt hilft dir da reichlich wenig ... 🙄

    hast du schon mal versucht in der borland hilfe (im index) ganz einfach onmouse einzugeben? .. dort findest du mehrere beispiele die sich intensivst mit dem thema auseinandersetzen

    edit:
    btw du solltest dir vielleicht einen anderen nick suchen ... der jetzige passt irgendwie nich zu dir



  • mutzel schrieb:

    edit:
    btw du solltest dir vielleicht einen anderen nick suchen ... der jetzige passt irgendwie nich zu dir

    nur weil ich noch ned gut coden kann ? 😕



  • //---------------------------------------------------------------------------
    
    #include <vcl.h>
    #pragma hdrstop
    
    #include "Unit1.h"
    
    int StartX, StartY;
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
            : TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::ffnen1Click(TObject *Sender)
    {
    if(OpenDialog1->Execute())
      {
      Image1->Picture->LoadFromFile(OpenDialog1->FileName);
      }
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::SpeedButton1Click(TObject *Sender)
    {
    Image1->Canvas->MoveTo(150,300);
    Image1->Canvas->Pen->Color =clRed;
    Image1->Canvas->Brush->Color =clBlue;
    Image1->Canvas->Rectangle(100,50,60,60);
    
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::SpeedButton2Click(TObject *Sender)
    {
    Image1->Canvas->Pen->Color =clGreen;
    Image1->Canvas->Brush->Color =clYellow;
    Image1->Canvas->Ellipse(5,5,30,30);
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Beeenden2Click(TObject *Sender)
    {
    Close();        
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::SpeedButton3Click(TObject *Sender)
    {
    Image1->Canvas->MoveTo(100,50);
    Image1->Canvas->LineTo(Image1->ClientWidth, Image1->ClientHeight);
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::Image1MouseDown(TObject *Sender,
          TMouseButton Button, TShiftState Shift, int X, int Y)
    {
    Image1->Canvas->Pen->Color =clRed;
    Image1->Canvas->Brush->Color =clBlue;
    Image1->Canvas->Rectangle(StartX,StartY,60,60);
    }
    //---------------------------------------------------------------------------
    

    soo da ich weiss wie ich es jetzt mache (ungefähr)

    wie verbinde ich die SpeedButton mit dem MoauseDown ? so das wenn ich den Speedbutton1 anklicke und dann auf das Image irgendwo klicke und da der Kreis usw. angeuzigt werden ???



  • Hi 23

    Du musst Dir mal Dein Problen ÜBERDENKEN!

    Dein Code ... Ellipse ...
    soll an der Mausposition ausgefuehrt werden??? 😕

    Du fuehrst das im Click des SpeedButton aus. Soll das wirklich an der Stelle passieren?

    PS: Schau mal nach unter:

    OnMausMove, OnMouseDown ...



  • Soweit ich verstehe willst du das man erst auf den SpeedButton klickt und dann auf die Position wo der Kreis erschienen soll.Und dann soll dort ein Kreis gezeichnet werden.Richitg?

    Ich würde das mal so probieren:

    Benutze eine Globale Boolsche-Variable die du beim
    Klick auf den Button auf true setzt und nach dem zeichnen wieder auf false.

    ps.: Könnte dir auch Code geben wenn dus so nicht schaffst. 😉



  • Du willst doch verschiedene geometrische Formen anzeigen, oder?

    Mach das doch so:

    1 globale Variable(in der Headerdatei definieren 😉 )

    int Formen;
    

    Im onCreate Ereignis der Form:

    Formen = -1 //Intitialwert, also es darf noch nicht gezeichnet werden
    

    Bei einem Klick auf Speedbutton "Ellipse" setzt du Formen auf 0.
    bei einem Klick auf Speedbutton "Rechteck" setzt du Formen auf 1.

    Also so:

    void __fastcall TForm1::SpeedButton2Click(TObject *Sender) // am besten dem Button noch einen passenden Namen geben : z.B. "BtnRechteck 
    { 
    Formen = 1;
    }
    

    Im OnMouseDown, fragst du jetzt ab welche Form gezeichnet werden soll,
    und ob überhaupt schon durch einen der Speedbutton die zu zeichnende Figur
    ausgewählt wurde:

    [cpp]
    void __fastcall TForm1::Image1MouseDown(TObject *Sender,
    TMouseButton Button, TShiftState Shift, int X, int Y)
    {
    switch(Formen)
    {
    case -1:
    return // also nicht zeichnen.
    case 0:
    Image1->Canvas->Pen->Color =clGreen;
    Image1->Canvas->Brush->Color =clYellow;
    Image1->Canvas->Ellipse(X,Y,30,30); // X u. Y sind Parameter von onMouseDown und geben Top/Left der Mausposition wieder
    break;
    case 1:
    //dasselbe für das Rechteck...
    }
    }
    [/cpp]

    Grüsse,
    MastaFlasH

    Edit: Achja, und nach dem Zeichen setzt du "Formen" wieder auf den Initialwert



  • Also geht geht soweit dank "Borland Hilfe 😃 und euch"
    ne mal ernst Borlands Beispiele sidn schon klasse!

    hier der COde:

    //---------------------------------------------------------------------------
    
    #include <vcl.h>
    #pragma hdrstop
    
    #include "Unit1.h"
    
    bool Ellipse1;
    int StartX, StartY;
    
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
            : TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::Beenden1Click(TObject *Sender)
    {
    Close();        
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::ffnen1Click(TObject *Sender)
    {
    if (OpenPictureDialog1->Execute())
      {
       Image1->Picture->LoadFromFile(OpenPictureDialog1->FileName);
      }
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::Image1MouseDown(TObject *Sender,
          TMouseButton Button, TShiftState Shift, int X, int Y)
    {
      if(Ellipse1 = "True")
      {
        if (Shift.Contains(ssLeft)) // Prüfen, ob Maustaste gedrückt ist
        {
        Image1->Canvas->Pen->Color =clBlack;
         Image1->Canvas->Brush->Color =clYellow;
         Image1->Canvas->Ellipse(StartX = X,StartY = Y, 200,150);
        }
        else
        {
        ShowMessage("nene so ned");
        }
        }        
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::SpeedButton1Click(TObject *Sender)
    {
    Ellipse1 = "True";        
    }
    //---------------------------------------------------------------------------
    

    Das dumme ist blos das Ihm egal ist ob der SpeedButton gedrückt ist oder nicht man kann auch so schreiben ! ja geht das mit dem bool auch ned !! jemand nen tip for me !!



  • Deine If-Anweisung ist immer true... schau sie dir noch mal an.



  • Ausserdem weist man einer bool-Variable nix in Anführungszeichen zu...



  • wenn du mehrere formen unterstuetzen willst macht sich das mit der switch anweisung wie bei MastaFlasH echt gut

    und wenn du einen wert ueberpruefen willst immer mit == arbeiten und das true ohne " und mit nem kleinen t

    also so:

    if(Ellipse1 == true) {
    
    }
    


  • |23| schrieb:

    Das dumme ist blos das Ihm egal ist ob der SpeedButton gedrückt ist oder nicht man kann auch so schreiben ! ja geht das mit dem bool auch ned !! jemand nen tip for me !!

    Schau dir den Code den ich gepostet hab mal genau an.
    Er enthält alles was du brauchst um dein Ziel zu erreichen (ggf. musst den Code an deine Bedürfnisse anpassen)

    Abgesehen wolltest du doch über die Speedbuttons steuern welche geometrische Form gezeichnet werden soll, oder nicht?

    Grüsse,
    MastaFlasH

    P.S. Nur der Formhalber, setz boolische Ausdrücke nicht in Anführungsstriche auch wenn es der Compiler schluckt 😉


Log in to reply