Newsgroup: it.comp.lang.c++
Titolo: VB++ hai hai hai hai hai

Che dolore ....
Sto cercando di convertire un programma scritto da VB5 a C++ Builder 3.
Vi pongo i miei maggiori problemi.
Come posso nel builder creare conrolli a run-time (Label o shape)?
Sempre nel builder come faccio a creare una matrice di controlli (label)?
Uno stralcio di codice sarebbe gradito.......
Ciao e grazie e a buon rendere , ma chissa' come........
Prodigy2

Sempre nel builder come faccio a creare una matrice di controlli (label)?
Sempre a run-time? Ma a che vi serve creare delle label a run-time?
TLabel *pippi[10];
pippi[0] = new TLabel("Pippo 1");
...    // come sopra
e ti crei un array di label. Ma non e' meglio se usi una ListView?
--
Byez.
Stefano Tempesta
temp...@tin.it
http://tempesta.freeweb.org
--------------------------------
(-: In a world without walls and fences
who needs Windows and Gates? :-)

 Sempre nel builder come faccio a creare una matrice di controlli (label)?
Credo che non sia possibile.
Per creare un array di controlli a run-time dovresti scrivere qualcosa
del tipo:
1. TLabel* Label_array;
2. Label_array = new TLabel[5];
...
ma l'istruzione 2. il Bulder non la accetta perche` la classe TLabel non
possiede un
ctor di default (senza parametri).
Possiede invece un unico ctor: TLabel(Classes::TComponent* AOwner).
Roberto

e ti crei un array di label. Ma non e' meglio se usi una ListView?
No, devo crare un pannello dei 90 elemeniti ( superEnalotto .... neanche a
dirlo)
uso le label come se fossero bottoni .......hanno un effetto estetico piu'
gradevole............
comunque ririgrazie............
Prodigy2

Un grazie a tutti quelli che mi hanno rispoto.......
Ma (a causa mia) non sono riuscito a risolvere il problema....
Dovevo spiegarmi meglio........
Ci riprovo, sperando di non rompere troppo........
Allora.....
Ho una Label (Label1) sul Form (Form1) con tutte le sue
proprietà (Color ecc ecc)...
Anche l'evento OnClick di Label1 è impostato....
Quindi la domanda corretta è:
Come faccio a run-time a creare 90 copie di quella label?
(le faccio a run-time per adeguarmi alla risoluzione video e
per non impostare manualmente  90 caption)
Cioè una matirce di controlli label tutte uguali .......
Anche le copie create a run-time devono rispondere all'evento Click...
Per esempio ogni label quando viene cliccata visualizza un MessageBox
che contiene la Caption della label....
Come faccio a capire chi ha generato l'evento?
Tutto questo in VB5 era banale perchè la si aveva una cosa del topo:
Label1_Click(index as integer)
Quindi quando la funzione era richiamata index conteneva l'indice
della label che aveva generato l'evento......
Spero di essere stato chiaro........
Ancora mille grazie a chi mi aiuterà........
Prodigy2

 Ancora mille grazie a chi mi aiuterà........
Ecco un esempio per risolvere il tuo problema: un form con un button che
consente di creare a run-time 10 label:
-->File: Unit1.h
//---------------------------------------------------------------------------
#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <Menus.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:	// IDE-managed Components
	TButton *Button1;
	TLabel *Label1;
	void __fastcall Button1Click(TObject *Sender);
	void __fastcall ClickOnLabel(TObject *Sender);
private:	// User declarations
	int CreateLabel(int number, int x, int y, String Caption);
public:		// User declarations
	__fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif
-->File: Unit1.cpp
//---------------------------------------------------------------------------
#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::Button1Click(TObject *Sender)
{
	//x e y sono le coordinate della nuova etichetta da creare
	int x=10,y=10;
	String Caption;
	for(int i=1;i<=10;i++)
	{
		y+=20;
		Caption=i;
		Caption="Caption "+Caption;
		if(!CreateLabel(i,x,y,"Caption")) break;
	}
}
//---------------------------------------------------------------------------
int
TForm1::CreateLabel(int number, int x, int y, String Caption)
{
	TLabel* A_Label;
	String Nome(number);
	Nome="Etichetta"+Nome;
	A_Label=new TLabel(this);
	//Controlliamo se l'allocazione ha avuto successo
	if(!A_Label)
	{
        	ShowMessage("Impossibile creare una nuova etichetta!");
	        return 0;
	}
	A_Label->Name=Nome;
	A_Label->Left=x;
	A_Label->Top=y;
	A_Label->Caption=Caption;
	A_Label->OnClick=ClickOnLabel;	//anche gli eventi sono proprieta`
	A_Label->Parent=this;
	return 1;
}
//---------------------------------------------------------------------------
void __fastcall
TForm1::ClickOnLabel(TObject *Sender)
{
	String Mess;
	TLabel* A_Label;
	A_Label=(TLabel*)Sender;
	//Ora hai pieno accesso all'etichetta su cui l'utente ha cliccato
	Mess="Hai fatto Click sull'etichetta : "+A_Label->Name;
	ShowMessage(Mess);
}
Ciao
_________________________________________
Roberto Gerola
e-mail: 
roge...@tin.it
www: 
http://space.tin.it/computer/rgerola

Veramente grazie !
Avrei impiegato 20 anni per risolverlo da me.........
Perdonatemi L'OT ma :
Graaaaaaaaaaaaaaaaaaaaaaaaazzzzzzzzzzzzziiiiiiiiiiiiiieeeeeeeeeeeeeee!!!!!!!
!!!!!!!
Prodigy2