Hilfe bei Delphi in C++ übersetzen



  • hi,

    Ich würde gerne diese beiden kleinen Beispile in C++ benutzen aber sie sind in Delphi. Da ich kein Delphi kann ware es nett wenn es jemand übersetzen könnte.

    Big THX 🙄



  • welche?





  • Man muss kein Delphi können um da wenigstens einen Ansatz zu finden.
    Zeig mal deine bisherigen Versuche, wir helfen dir dann mit dem Rest.



  • Zum ersten:
    Da hab ich es so gemacht.

    void TForm1::CreateParams(TCreateParams Params)
    {
     const AnsiString CS_DROPSHADOW = "$00020000";
     inherited::Dispatch(&Params);
     Params.WindowClass.style = Params.WindowClass.style;
    }
    //---------------------------------------------------------------------------
    

    Weiß nicht ob es richtig ist. Und jetzt ist auch die frage, wie soll ich es aufrufen???

    Zum zweiten:
    Da habe ich es so Probiert

    void ShadeIt(TForm f, TControl c, int Width, TColor Color)
    {
      TRect rect;
      TColor old;
    
      if(c.Visible)
      {
        rect = c.BoundsRect;
        rect.Left = rect.Left + Width;
        rect.Top = rect.Top + Width;
        rect.Right = rect.Right + Width;
        rect.Bottom = rect.Bottom + Width;
        old = f.Canvas->Brush->Color;
        f.Canvas->Brush->Color = Color;
        f.Canvas->FillRect(rect);
        f.Canvas->Brush->Color = old;
      }
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm11::FormPaint(TObject *Sender)
    {
      int i;
      for(i = 0; Form1->ControlCount - 1; i++)
      ShadeIt(Form1, Form1->Controls[i], 3, clBlack);
    }
    //---------------------------------------------------------------------------
    

    Hier ist das Problem bei FormPaint. Wo ich für TForm f das Form1 eingetragen habe



  • Hi,
    naja sieht doch schon ganz gut aus:

    zu 2:
    Self -> this

    zu 1:
    Die Funktion miusst du in der Header-Datei noch deklarieren! Die soll dann die orginal VCL Funktion überschreiben!

    Hoffe das hilft!

    MfG

    Alexander Sulfrian

    PS: Was für Fehlermeldungen bzw. Reaktionen vom Programm gab es denn?



  • zu 2:

    void __fastcall TMainForm::FormPaint(TObject *Sender)
    {
      for(int i = 0; i < this->ControlCount - 1; i++)
      ShadeIt(this, this->Controls[i], 3, clBlack);
    }
    //---------------------------------------------------------------------------
    

    Habe das jetzt so aber es gibt eine Fehlermeldung.
    [C++ Fehler] Unit1.cpp(492): E2459 Klassen im VCL-Stil müssen mit dem Operator new erstellt werden.
    Das liegt irgendwie an der reihe von ShadeIt!

    zu 1:
    Habe es jetzt im Header hinzugefügt aber es ändert sich nichts. Keine Funktion als wenn es garnicht erst aufgerufen wird. ???
    So sieht das jetzt aus.

    //---------------------------------------------------------------------------
    class TForm1 : public TForm
    {
    protected:
        void CreateParams(TCreateParams Params);
    __published:	// Von der IDE verwaltete Komponenten
    


  • kleinerwicht schrieb:

    void ShadeIt(TForm f, TControl c, int Width, TColor Color)
    {
    ....
    }
    //---------------------------------------------------------------------------
    

    Muesstest du der Funktion nicht einen Zeiger der Form uebergeben?
    MfG Aoeke



  • Das mit dem 2ten hat sich erledigt. Habe sie etwas umgebaut und jetzt geht sie! 👍

    Jetzt muss das aber noch das erste Beispiel laufen. 😞
    Da passiert immer noch nichts!



  • Hi,
    ich habs mal etwas umgebaut:

    //h:
    protected:
    	 void __fastcall CreateParams(TCreateParams &Params);
    
    //cpp:
    void __fastcall TForm1::CreateParams(TCreateParams &Params)
    {
     inherited::CreateParams(Params);
     const CS_DROPSHADOW = 0x00020000;
     Params.WindowClass.style += CS_DROPSHADOW;
    }
    //---------------------------------------------------------------------------
    

    Jetzt läuft's!

    MfG

    Alexander Sulfrian



  • Vielen Dank an alle! Jetzt geht alles! 👍 😃



  • aber bei styles macht man nicht += sonder |=



  • Hi,
    das weiß ich eigentlich! Beim Code stand ja auch or! Aber irgendwie ging das bei mir vorhin nicht!
    Keine Ahnung warum?! Jetzt geht's!

    MfG

    Alexander Sulfrian



  • Kann man das eigentlich auch so hinbekommen das man das Programm auch unter Win2k starten kann. Bisher geht das nur unter WinXP sonst nirgends.
    Gibt sonst Fehler:

    Win32-Fehler. Code 87.
    Falscher Parameter.



  • void __fastcall TForm1::CreateParams(TCreateParams &Params) 
    { 
     inherited::CreateParams(Params); 
     const CS_DROPSHADOW = 0x00020000; 
     Params.WindowClass.style += CS_DROPSHADOW; 
    }
    

    Habe gemerkt das wenn man aus 0x00020000 das x entfernt das Programm ohne fehler startet aber dann fehl logischer weise auch die funktion des codes. Kann man da nicht was dran ändern das es unter anderen Systemen die kein WinXP haben auch läuft???



  • Hi,
    na frage doch einfach ab, ob das OS WinXP ist ind führe nur dann den Code aus!

    In der FAQ gabs da mal nen Eintrag zum Version ermitteln!

    MfG

    Alexander Sulfrian



  • Das Problem dürfte wohl sein, dass es ihm eigentlich darum ging, diese Schatten nicht nur unter XP sondern eben auch unter den anderen Versionen anzuzeigen. Offensichtlich ist das aber ein spezielles XP-Feature.



  • OK.
    Werde es dann so machen das ich das OS abfrage. Danke!


Anmelden zum Antworten