|
| Indsæt Automatisk Memo felter og andre Obj~ Fra : Gugge |
Dato : 05-08-02 15:49 |
|
Hej
Jeg sidder og laver et setup program til en brugerflade, men jeg har lidt
problemer
med at lave automatisk opbygning af brugerfladen.
Ved at indtaste fx. 6 i et felt angående hvor mange memofelter der skal
opbygges
på brugerfladen, skal man ved at trykke på en knap frembringe den
automatiske opbygning.
Jeg har prøvet med noget ligende:
void __fastcall TBagground::testbuttonClick(TObject *Sender)
{
TMemo *memo1 = new TMemo(memo1); ????
memo1->Left = 100;
memo1->Top = 500;
}
men det duer ikke!!!
Men hvordan får jeg lavet dette.
Jeg kan ikke finde formen for at indsætte objekter efter at programmet
kører.
Er der nogen der kan hjælpe mig, så er jeg evigt taknemmeligt ....
Mvh
Gugge
| |
Ivan Johansen (05-08-2002)
| Kommentar Fra : Ivan Johansen |
Dato : 05-08-02 19:48 |
|
Gugge wrote:
> void __fastcall TBagground::testbuttonClick(TObject *Sender)
> {
> TMemo *memo1 = new TMemo(memo1); ????
> memo1->Left = 100;
> memo1->Top = 500;
> }
Du kan ikke sætte memo1 som owner, specielt ikke da memo1 endnu ikke er
initialiseret. Du ønsker formentligt at den form, der opretter den er ejer:
TMemo *memo1 = new TMemo(this);
Du skal også angive hvor den skal vises. Dette gøres ved at sætte Parent:
Memo1->Parent = this;
Samlet får du:
void __fastcall TBagground::testbuttonClick(TObject *Sender)
{
TMemo *memo1 = new TMemo(this);
memo1->Parent = this;
memo1->Left = 100;
memo1->Top = 500;
}
Ivan Johansen
| |
Gugge (06-08-2002)
| Kommentar Fra : Gugge |
Dato : 06-08-02 19:54 |
|
Jeg har lige et extra spørgsmål til dette emne.
Hvordan får jeg slettet et evt memofelt, som jeg opretter i Runtime....(af
programmet)
For hvis jeg opretter i programmet et felt der hedder memo1:
void __fastcall TBagground::testbuttonClick(TObject *Sender)
{
TMemo *memo1 = new TMemo(this); >
memo1->Parent = this;
}
Hvordan kan dette Objekt blive slettet igen, da jeg jo ikke kan skrive i
koden en delete funktion til dette
objekt, fordi programmet ved jo ikke endnu at det bliver oprettet..
Hvordan gøres dette....
Mange tak for svar..
Gugge
...............................
----------------------------------------------------------------------------
-----------------------------------------------------
"Ivan Johansen" <NG@Padowan.dk> skrev i en meddelelse
news:3D4EC845.1060401@Padowan.dk...
> Gugge wrote:
>
> > void __fastcall TBagground::testbuttonClick(TObject *Sender)
> > {
> > TMemo *memo1 = new TMemo(memo1); ????
> > memo1->Left = 100;
> > memo1->Top = 500;
> > }
>
>
> Du kan ikke sætte memo1 som owner, specielt ikke da memo1 endnu ikke er
> initialiseret. Du ønsker formentligt at den form, der opretter den er
ejer:
> TMemo *memo1 = new TMemo(this);
>
> Du skal også angive hvor den skal vises. Dette gøres ved at sætte Parent:
> Memo1->Parent = this;
>
> Samlet får du:
>
> void __fastcall TBagground::testbuttonClick(TObject *Sender)
> {
>
> TMemo *memo1 = new TMemo(this);
>
> memo1->Parent = this;
> memo1->Left = 100;
> memo1->Top = 500;
> }
>
>
> Ivan Johansen
>
| |
Ivan Johansen (06-08-2002)
| Kommentar Fra : Ivan Johansen |
Dato : 06-08-02 21:35 |
|
Gugge wrote:
> Jeg har lige et extra spørgsmål til dette emne.
> Hvordan får jeg slettet et evt memofelt, som jeg opretter i Runtime....(af
> programmet)
> For hvis jeg opretter i programmet et felt der hedder memo1:
>
> void __fastcall TBagground::testbuttonClick(TObject *Sender)
> {
> TMemo *memo1 = new TMemo(this); >
> memo1->Parent = this;
> }
> Hvordan kan dette Objekt blive slettet igen, da jeg jo ikke kan skrive i
> koden en delete funktion til dette
> objekt, fordi programmet ved jo ikke endnu at det bliver oprettet..
>
> Hvordan gøres dette....
Dit problem er at du gemmer memo1 inde i funktionen, så den ikke kan
tilgås fra andre funktioner. I stedet kan du gemme den i klassen. Da du
formentligt vil oprette et på ukendt antal kan du gemme dem i en
std::vector.
I klassedefinitionen skriver du:
std::vector<TMemo*> MemoVector;
Når du opretter komponenter skriver du:
TMemo *Memo = new TMemo(this);
Memo->Parent = this;
MemoVector.push_back(Memo);
Du kan så senere tilgå dine komponenter gennem MemoVector. Du kan f.eks.
slette dem alle:
for(unsigned I = 0; I < MemoVector.size(); I++)
delete MemoVector[I];
MemoVector.clear();
Bemærk dog at du angiver din form som ejer, hvilket betyder at
komponenterne automatisk bliver nedlagt når formen nedlægges medmindre
du selv har gjort det før. Du må derfor ikke selv nedlægge komponenterne
efter at ejeren er blevet nedlagt.
Ivan Johansen
| |
Gugge (06-08-2002)
| Kommentar Fra : Gugge |
Dato : 06-08-02 20:36 |
|
Men når man indsætte et nyt objekt og "attach'er " det til den rigtige form,
så kan det går hen og
forsvinde helt.
Jeg har prøvet at indsætte en PageControl, og et par tabsheets..2 stk..
Dette skal også gøres "During Runtime"..
void __fastcall TForm1::Button1Click(TObject *Sender)
{
TPageControl *PageControl1 = new TPageControl(this);
PageControl1->Parent = this;
PageControl1->Left = 30;
PageControl1->Top = 100;
PageControl1->Width = 150;
TTabSheet *One = new TTabSheet(PageControl1);
One->Parent = PageControl1;
One->Enabled = true;
One->Caption = "One";
One->Height = 300;
One->Width = 400;
TTabSheet *Two = new TTabSheet(PageControl1);
Two->Parent = PageControl1;
Two->Enabled = true;
Two->Caption = "Two";
Two->Height = 300;
Two->Width = 400;
}
Men her forsvinder, eller rettere: de dukker slet ikke op på skærmen.
Man kan kun se PageControl en grå boks...
Gugge
-------------
"Ivan Johansen" <NG@Padowan.dk> skrev i en meddelelse
news:3D4EC845.1060401@Padowan.dk...
> Gugge wrote:
>
> > void __fastcall TBagground::testbuttonClick(TObject *Sender)
> > {
> > TMemo *memo1 = new TMemo(memo1); ????
> > memo1->Left = 100;
> > memo1->Top = 500;
> > }
>
>
> Du kan ikke sætte memo1 som owner, specielt ikke da memo1 endnu ikke er
> initialiseret. Du ønsker formentligt at den form, der opretter den er
ejer:
> TMemo *memo1 = new TMemo(this);
>
> Du skal også angive hvor den skal vises. Dette gøres ved at sætte Parent:
> Memo1->Parent = this;
>
> Samlet får du:
>
> void __fastcall TBagground::testbuttonClick(TObject *Sender)
> {
>
> TMemo *memo1 = new TMemo(this);
>
> memo1->Parent = this;
> memo1->Left = 100;
> memo1->Top = 500;
> }
>
>
> Ivan Johansen
>
| |
Ivan Johansen (06-08-2002)
| Kommentar Fra : Ivan Johansen |
Dato : 06-08-02 21:23 |
|
Gugge wrote:
>
> void __fastcall TForm1::Button1Click(TObject *Sender)
> {
> TPageControl *PageControl1 = new TPageControl(this);
> PageControl1->Parent = this;
> PageControl1->Left = 30;
> PageControl1->Top = 100;
> PageControl1->Width = 150;
>
> TTabSheet *One = new TTabSheet(PageControl1);
> One->Parent = PageControl1;
> One->Enabled = true;
> One->Caption = "One";
> One->Height = 300;
> One->Width = 400;
Prøv også at sætte PageControl:
One->PageControl = PageControl1;
Ivan Johansen
| |
|
|