Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2001
    Messaggi
    19

    [C++] Allocazione di oggetto grafico in C++ Builder

    Ciao a tutti,
    io ho il problema di dover allocare dinamicamente un oggetto grafico (in particolare una matrice di TShape) in un progetto che sto realizzando con C++Builder 6 della Borland usando la Visual Component Library.
    Ho scritto il seguente codice

    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    int i, j;
    int PosX, PosY, Pitch, SizeLed;

    PosX = 32;
    PosY = 32;
    Pitch = 12;
    SizeLed = 10;
    NRow = 16;
    NCol = 144;
    Shape = new TShape**[NRow];

    for(i=0; i<NRow; i++)
    Shape[i] = new TShape*[NCol];

    for(i=0; i<NRow; i++)
    for(j=0; j<NCol; j++)
    {
    Shape[i][j] = new TShape(Owner);
    Shape[i][j]->Shape = stCircle;
    Shape[i][j]->Height = SizeLed;
    Shape[i][j]->Width = SizeLed;
    Shape[i][j]->Top = PosX + i*Pitch;
    Shape[i][j]->Left = PosY + j*Pitch;
    Shape[i][j]->Brush->Color = clRed;
    Shape[i][j]->Brush->Style = bsSolid;
    Shape[i][j]->Visible = true;
    }
    }

    dove Shape è dichiarato come

    private: // User declarations
    TShape ***Shape;

    nella classe TForm.

    Questo codice viene compilato correttamente senza alcun errore, ma quando clicco sul buttone per eseguire la procedura di allocazione dei TShape non viene visualizzato nulla nel form. Controllando da debug osservo che la matrice viene costruita e allocata correttamente, e quindi sembra che l'unico problema sia proprio nella visualizzazione.
    Sapete dirmi qualcosa al riguardo? Qualche soluzione al problema?

    Ringrazio
    Davide
    Windows XP \ Windows CE
    Visual Studio 6 Enterprise Edition
    embedded Visual Studio 4
    Borland Builder C++

  2. #2
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254
    probabilmente devi aggiungerla in un qualche contenitore (pannello) o direttamente nella tform

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2001
    Messaggi
    19
    Non mi è molto chiara la tua risposta. Che cosa intendi?

    La classe TForm1 che ho creato è la seguente

    class TForm1 : public TForm
    {
    __published: // IDE-managed Components
    TButton *Button1;
    void __fastcall Button1Click(TObject *Sender);

    private: // User declarations
    TShape ***Shape;

    public: // User declarations

    __fastcall TForm1(TComponent* Owner);
    };

    Come __published vengono dichiarati tutti gli oggetti grafici visualizzati nella form (ed i rispettivi metodi). Se provo a mettere TShape ***Shape; come __published mi da errore in compilazione.
    Mi sembra strano che un'allocazione dinamica di oggetti grafici non sia possibile!!
    Windows XP \ Windows CE
    Visual Studio 6 Enterprise Edition
    embedded Visual Studio 4
    Borland Builder C++

  4. #4
    Utente di HTML.it
    Registrato dal
    Nov 2001
    Messaggi
    19
    Ho risolto il problema. Subito dopo l'istruzione

    Shape[i][j] = new TShape(Owner);

    è necessario aggiungere

    Shape[i][j]->Parent = this;

    e questo vale per tutti gli oggetti grafici che si vogliono allocare run time.


    Saluti
    Windows XP \ Windows CE
    Visual Studio 6 Enterprise Edition
    embedded Visual Studio 4
    Borland Builder C++

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.