PDA

Visualizza la versione completa : Delphi 6 - Creare + schede di un tab


FinalFantasy
13-12-2004, 18:38
Devo creare + schede di un tab dinamicamente. Avevo pensato ad una procedura che creava gli oggetti, ma non so come impostarla :bhò: . Devo creare altre cose del genere, quindi se qualcuno ne è capace (e ci sarà) e mi ascolta gli dico: cortesemente potresti scrivere un codice versatile? Grazie a chiunque sia in ascolto :dhò: :ciauz:

P.S.: mi consigliate un bel sito di cosucce in delphi?

alka
13-12-2004, 19:04
Originariamente inviato da FinalFantasy
Devo creare + schede di un tab dinamicamente. Avevo pensato ad una procedura che creava gli oggetti, ma non so come impostarla :bhò: . Devo creare altre cose del genere, quindi se qualcuno ne è capace (e ci sarà) e mi ascolta gli dico: cortesemente potresti scrivere un codice versatile? Grazie a chiunque sia in ascolto :dhò: :ciauz:

Si tratta di un PageControl o di un TabControl?
Nel secondo caso, il problema è abbastanza semplice da risolvere; nel primo caso, devi creare dinamicamente a runtime un'istanza della classe TTabSheet: è la classe che rappresenta le pagine ospitabili dal PageControl.

Per esempio, ho creato un progetto vuoto e al suo interno ho inserito un TPageControl e un TButton; quando si preme il pulsante, viene creato un nuovo TTabSheet in questo modo:


procedure TForm1.Button1Click(Sender: TObject);
var
NewTabSheet: TTabSheet;
begin
NewTabSheet := TTabSheet.Create(Self);
NewTabSheet.Caption := 'Nuova pagina';
NewTabSheet.PageControl := APageControl;
end;

dove APageControl è il nome del controllo a pagine.

Ciao! :ciauz:

FinalFantasy
13-12-2004, 20:18
Originariamente inviato da alka
Si tratta di un PageControl o di un TabControl?
Nel secondo caso, il problema è abbastanza semplice da risolvere; nel primo caso, devi creare dinamicamente a runtime un'istanza della classe TTabSheet: è la classe che rappresenta le pagine ospitabili dal PageControl.

Per esempio, ho creato un progetto vuoto e al suo interno ho inserito un TPageControl e un TButton; quando si preme il pulsante, viene creato un nuovo TTabSheet in questo modo:


procedure TForm1.Button1Click(Sender: TObject);
var
NewTabSheet: TTabSheet;
begin
NewTabSheet := TTabSheet.Create(Self);
NewTabSheet.Caption := 'Nuova pagina';
NewTabSheet.PageControl := APageControl;
end;

dove APageControl è il nome del controllo a pagine.

Ciao! :ciauz:

Non sono stato chiaro...Vorrei creare delle schede dei tab, no i tab in se stesso...Ma non solo il tab, ma anche quello che c'è all'interno...Ad ogni scheda metterò un richtext e vorrei crearli dinamicamente...naturalmente ogni scheda e richtext dovranno avere nomi diversi...Io ancora con sti oggetti non ci ho capito molto

alka
13-12-2004, 20:56
Originariamente inviato da FinalFantasy
Ma non solo il tab, ma anche quello che c'è all'interno...Ad ogni scheda metterò un richtext e vorrei crearli dinamicamente...naturalmente ogni scheda e richtext dovranno avere nomi diversi...
Il procedimento è analogo, solo che invece di creare un TTabSheet, devi creare il controllo che ti serve (RichEdit, Memo, quello che preferisci) e assegnare le proprietà Left e Top alle coordinate che desideri; non dimenticare di assegnare alla proprietà Parent il riferimento al controllo "contenitore" (in questo caso, il TabSheet), cioè al controllo nel quale dovrà essere visualizzato.

Ciao! :ciauz:

FinalFantasy
13-12-2004, 21:14
Ho creato questa procedura


procedure NewSheet();
var NewTabSheet: TTabSheet;
begin
NewTabSheet := TTabSheet.Create(Self);
NewTabSheet.Caption := 'Nuova pagina';
NewTabSheet.PageControl := APageControl;
end;


Mi da questo errore: [Error] frmprincipale.pas(57): Undeclared identifier: 'Self'

AlbertoPicca
14-12-2004, 09:26
procedure XXX.NewSheet();
var NewTabSheet: TTabSheet;
begin
NewTabSheet := TTabSheet.Create(Self);
NewTabSheet.Caption := 'Nuova pagina';
NewTabSheet.PageControl := APageControl;
end;


In questo caso la tua procedura é orfana.
Sostituisci al posto di XXX il nome della tua form.

:ciauz:

alka
14-12-2004, 09:34
Originariamente inviato da FinalFantasy
Mi da questo errore: [Error] frmprincipale.pas(57): Undeclared identifier: 'Self'
Nell'esempio che ti ho indicato, la procedura apparteneva alla classe del form, pertanto Self rappresenta l'oggetto corrente per il quale viene chiamato il metodo che, solo casualmente, era associato alla gestione di un evento.

FinalFantasy
14-12-2004, 16:31
Fatto, ma mi da quest'altro errore: [Error] frmprincipale.pas(70): Undeclared identifier: 'APageControl'

Se tolgo questa riga il prog funge ma non mette i fogli sul tab, credo a causa di questa mancanza :cry: Dov'è che sbaglio? :dhò:

AlbertoPicca
14-12-2004, 16:36
NewTabSheet.PageControl := APageControl;
Da quanto ho capito dalla prima risposta di Alka, APageControl é il nome del tuo componente TPageControl .
Quindi dovrai sostituire i nomi per fare in modo che non appaiano errori.

In fin dei conti non esiste nessun oggetto o variabile nella tua classe che si chiami con APageControl.

Prova a vedere...


:ciauz:

alka
14-12-2004, 16:39
Originariamente inviato da FinalFantasy
Fatto, ma mi da quest'altro errore: [Error] frmprincipale.pas(70): Undeclared identifier: 'APageControl'

Non puoi pretendere di utilizzare il codice così com'è senza interpretarlo e modificarlo opportunamente.

E' necessario capire cosa avviene nel codice e, in base al concetto appreso, modificarlo affinchè si adatti alla propria implementazione e...funzioni.

Si tratta del principale motivo per il quale, generalmente, non fornisco stralci di codice da copiare e incollare ma semplicemente spiegazioni, cercando di essere il più prolisso possibile per il tempo libero che mi è concesso.

Nel mio esempio, APageControl è il nome attribuito al controllo PageControl presente sul mio form; devi sostituire quell'identificatore con il nome del tuo controllo a pagine.

Non si dovrebbe andare a "tentoni", ma cercare di capire; piuttosto che copiare e incollare, invia un messaggio e chiedi chiarimenti qui se una parte di codice non ti è chiara, altrimenti la prossima volta che ti ritroverai nella medesima situazione non sarai in grado di risolverla a causa del fatto che non hai ragionato e capito come il problema va affrontato.

Ciao! :ciauz:

Loading