Visualizzazione dei risultati da 1 a 7 su 7

Discussione: [Delphi] TPageControl

  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2003
    Messaggi
    92

    [Delphi] TPageControl

    Salve a tutti!!

    Vorrei poter impedire all'utente di passare alla scheda successiva del
    PageControl senza aver prima selezionato la voce che gli interessa all'interno del DBgrid sito su TabSheet1.
    L'utente può passare alla scheda successiva TabSheet2
    solo cliccando su una label (labAssocia).
    Sull'OnClick della label per ora ho solo questa istruzione

    PageControl1.ActivePage := TabSheet2

    comunque, ho individuato l'evento OnChanging sul PageControl dove scrivo questo codice:
    if (sender = labAssocia) then
    begin
    ShowMessage('ora puoi procedere');
    end
    else
    begin
    AllowChange := False;
    PageControl1.ActivePage := TabSheet1;
    showMessage('Seleziona un record e clicca
    su "Next >>"')
    end;

    Funziona, ma ho un problema...
    devo poter accedere al TabSheet3 quando voglio...
    e in questo modo... non posso farlo...

    ho fatto diversi tentativi in modi diversi..
    ma il risultato rimane lo stesso.
    Al TabSheet3 non riesco ad accedere se prima
    non faccio clic sulla label.

    cosa posso fare?
    Grazie e Buon Lavoro!
    Kate71

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,480
    Non ho ben capito qual è il risultato che vuoi ottenere, ma se riesco a leggere tra le righe, credo che tu voglia fare una specie di "wizard", giusto?

    Se io fossi in te, disabiliterei la visibilità delle schede ("tabs") impostando la proprietà TabVisible dei TabSheet a False. In questo modo, non avrai più "linguette" sulle quali cliccare per spostarti da una scheda all'altra, ma potrai farlo solo premendo appositi pulsanti e controllando, tramite codice, che tutti i dati relativi ad un passo della tua autocomposizione siano stati inseriti o selezionati.

    Usando la Object TreeView (menu [View|Object TreeView], puoi sempre selezionare e portare in primo piano il TabSheet su cui stai lavorando per aggiungere nuovi controlli, modificare quelli esistenti, definire eventi, ecc. ecc. anche se la proprietà TabVisible ne impedisce, inizialmente, la visibilità.

    Io farei uso dell'evento OnChanging solo per bloccare/sbloccare lo spostamento da parte dell'utente con i normali tasti CTRL+TAB e CTRL+SHIFT+TAB, magari usando una variabile booleana che indichi se è possibile passare o no ad uno step precedente o successivo, solo quando il codice richiede di farlo (ad esempio, quando i controlli di validità del passo corrente danno buon esito alla pressione del pulsante "Next" ed è necessario spostarsi su una nuova pagina).

    Spero di averti descritto sufficientemente bene il modello concettuale di wizard che ho in mente per permetterti di provare a realizzarlo.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2003
    Messaggi
    92
    Si, hai capito perfettamente !
    Ora provo a sperimentare!
    Avevo provato già a mettere il tabSheet
    a Visibile = False..ma comunque mi faceva
    accedere al tab successivo... :master:
    Ti farò sapere se riesco ad ottenere
    il risultato che volevo!!

    Grazie !!
    Kate71

  4. #4
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,480
    Originariamente inviato da kate71

    Avevo provato già a mettere il tabSheet
    a Visibile = False..ma comunque mi faceva
    accedere al tab successivo... :master:
    Se poni a False la proprietà Visible del controllo TabSheet, non vedrai più nemmeno il contenuto della pagina stessa, mentre attraverso la proprietà TabVisible hai la possibilità di rimuovere la linguetta e temporaneamente anche la pagina, che diverrà comunque visibile quando la imposterai come pagina attiva attraverso la proprietà ActivePage del PageControl.

    Buona sperimentazione!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  5. #5
    Utente di HTML.it
    Registrato dal
    Jul 2003
    Messaggi
    92
    beh...credevo di aver capito quello che mi avevi scritto..
    ma a quanto sembra non è così...
    stavo per scriverti per dirti che avevo
    risolto in modo differente...
    e cioè...
    procedure TForm1.sbtNextClick(Sender: TObject);
    begin
    if sbtNext.Caption = 'Next >>' then
    begin
    sbtNext.Caption := '<< Back';
    DBGrid1.DataSource := dm.ds1;
    end
    else
    begin
    sbtNext.Caption := 'Next >>';
    DBGrid1.DataSource := dm.ds2 ;
    end;
    end;

    ma a questo punto devo proprio sperimentare la tua soluzione
    m'incuriosisce troppo...
    a tra poco...


  6. #6
    Utente di HTML.it
    Registrato dal
    Jul 2003
    Messaggi
    92

    stupefacente!!!

    non posso crederci... è davvero splendida questa proprietà!!
    la proprietà che avevo sperimentato prima era "Visible";
    il "TabVisible" non lo avevo proprio visto....
    è semplicemente spettacolare !!!

    avevo persino pensato di creare un TabSheet a runtime..
    ma a questo punto non è assolutamente necessario!!

    Il mio entusiasmo forse potrebbe sembrare esagerato...
    ma ti assicuro..che sto saltellando nella stanza per la gioia!!



    GRAZIE!!!!

  7. #7
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,480
    Di niente...

    Buon lavoro!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

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 © 2025 vBulletin Solutions, Inc. All rights reserved.