Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Delphi - Creazione automatica di Label
Forum - Delphi - Creazione automatica di Label

Avatar
rep87 (Normal User)
Newbie


Messaggi: 17
Iscritto: 27/12/2010

Segnala al moderatore
Postato alle 19:51
Sabato, 23/04/2011
Buonasera ragazzi...
Io ho un programma con varie label nello stesso form..

MI č nata una domanda: č possibile creare un numero x di label in automatico?

Esempio: nell'edit 1 del form 1 l'utente inserisce il numero di label da creare nel form 2.
Come fare per ottenere questo scopo?!
Io pensavo ad un array dinamico, il cui limite era il numero ottenuto in input...ma poi come fare?!
E' giusta come idea, o sono totalmente fuori strada?

Grazie dell'aiuto...e BUONA PASQUA A TUTTI! =)...

PM
Avatar
a_butta (Member)
Expert


Messaggi: 578
Iscritto: 16/03/2010

Up
1
Down
V
Segnala al moderatore
Postato alle 20:41
Sabato, 23/04/2011
Codice sorgente - presumibilmente Delphi

  1. var
  2.   LabelArray: array of TLabel;
  3.  
  4. procedure LabelCreateClick(Sender: TObject);
  5. begin
  6.   SetLength(LabelArray, StrToInt(TextBox1.Text));
  7.   for I:= 0 to High(LabelArray) do
  8.     begin
  9.       LabelArray[I]:= TLabel.Create(Self);
  10.       LabelArray[I].Parent:= Self;
  11.       LabelArray[I].Top:= Top;
  12.       // Qui inserisci tutti i parametri di ogni label
  13.       LabelArray[I].Visible:= True;
  14.    end;
  15. end;



Buona Pasqua anche a te

Grazie davvero!!! Inutile dire niente..risposta perfetta! - rep87 - 23/04/11 23:42
Solo un secondo...mi da errore sia su SELF che su TOP, entrambi del tipo 'Undeclared Identifier'...come mai?! - rep87 - 24/04/11 00:23
Allora...risolto il problema sopra, ne ho uno ben pių complicato, quantomeno per me: perchč mi crea solo la Label con I massimo?! Ti spiego...io ho imposto la condizione - rep87 - 24/04/11 00:43
LabelArray[i].caption:=inttostr(i); - rep87 - 24/04/11 00:44
perchč mi disegna solo la label la cui caption č la maggiore?!?!?! AIUTO! - rep87 - 24/04/11 00:44
Scusa se rispondo solo ora: sti commenti non vengono notificati... Comunque la risposta, proprio come dice Goblin č in quel commenti verso la fine del mio codice: lė devi impostare in che regione della tua form (TOP e LEFT) vuoi che venga fuori ciascuna label: se lasci un LEFT uguale per tutti, - a_butta - 26/04/11 11:20
ti si visualizzano sovrapposte in ordine di ciclo: la label con I max visualizza in prima posizione... - a_butta - 26/04/11 11:21
PM
Avatar
Goblin (Member)
Expert


Messaggi: 375
Iscritto: 02/02/2011

Up
1
Down
V
Segnala al moderatore
Postato alle 9:17
Martedė, 26/04/2011
rep87, a_butta ti ha dato, diciamo, le linee guida e tutte le informazioni per creare quello che chiedi, ovviamente non ti ha dato la pappa pronta, come č giusto che sia, Chi mastica almeno un po' di pascal, (delphi deriva dall OP 7.0 di borland) vede subito che alcune informazioni mancano e devono essere rimpiazzate "ad hoc" dal programmatore a cui serve il pezzo di codice, queste informazioni devono essere inserite proprio dove c'e' il commento "// Qui inserisci tutti i parametri di ogni label", le info che mancano sono una variabile per gestire la left della label, una variabile per gestire il top del componente label, il font, e altre cosine. Dunque la funzione č da considerarsi "meta codice" una linea guida dove tu andrai ad imbastire il tuo codice di creazione label.
Giusto per rispondere alla tua domanda che vedi solo l'ultima, ... mi sembra ovvio se non aumenti il top e il left della label verranno create tutte nello stesso punto.
G.

Sono d'accordo che sia giustissimo...il fatto č semplicemente uno: sono tre sere che programmo in piena notte...mi rilassa tanto, ma non tutte le rotelle funzionano! Ed infatti, all'ovvio fatto che me le facesse tutte una sopra l'altra non ci avevo nemmeno pensato...ke sbadato! grazie davvero...-.-" - rep87 - 26/04/11 19:03
Delphi ha un ottimo strumento di Debug, se lo usi il problema viene subito fuori, basta seguire il flusso logico del programma - Goblin - 26/04/11 22:28


Ibis redibis non morieris in bello
PM
Avatar
Goblin (Member)
Expert


Messaggi: 375
Iscritto: 02/02/2011

Up
0
Down
V
Segnala al moderatore
Postato alle 23:53
Martedė, 26/04/2011
ho riletto il tuo post iniziale, le label che crei le devi riutilizzare? oppure sono label che fanno "da contorno"?
nel primo caso invece di un array ti consiglio l'uso dell'oggetto TComponentList, contenuto nella unit Contnrs, , nel secondo caso č inutile creare un lista, basta assegnare l'owner in fase di creazione e alla distruzione ci pensa lui. In ogni caso centralizzerei la creazione della label in un solo punto estraendola dal loop per posizionarla, qualcosa del tipo:

procedure TForm1.LabelClick(Sender: TObject);
begin
  ShowMessage('Click su label '+ (sender as TLabel).Caption+ ' con nome '+(sender as TLabel).Name);
end;

function TForm1.CreaLabelXY(oForm: TForm; oParent: TWinControl; nLeft, nTop: Integer; sCaption: String): TLabel;
  function GetNomeLabel: String;
  Var x: Integer;
  begin
    x:=0;
    Repeat
      Result := 'Label'+IntToStr(x);
      Inc(x);
    until Not Assigned(oForm.FindComponent(Result));
  end;
begin
  Result := TLabel.Create(oForm);
  Result.Parent := oParent;
  Result.Top := nTop;
  Result.Left := nLeft;
  Result.Caption := sCaption;
  Result.OnClick := LabelClick;
  Result.Name := GetNomeLabel;
end;

e il loop di creazione

procedure TForm1.Button1Click(Sender: TObject);
Var x,y: Integer;
    a: Integer;
begin
  x := 10;
  y := 10;
  For a:= 1 to StrToInt(Edit1.Text) do
  Begin
    CreaLabelXY(Self, Self, x,y, IntToStr(a));
    Inc(y,18);
  end;
end;

la function CreaLabelXY ritorna un oggetto di tipo TLabel in modo da poterlo inserire dentro una lista oppure crearlo senza includerlo in un riferimento.
la function GetNomeLabel ritorna un nome univoco per la label
la procedura LabelClick assegna l'evento onclick alla label.
Il tutto č da considerarsi come esempio e deve essere inserito nel tuo contesto
G.

Ultima modifica effettuata da Goblin il 27/04/2011 alle 0:26


Ibis redibis non morieris in bello
PM