Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16
  1. #1

    [Delphi] Errore causato da SETFOCUS

    ciao gente,

    ho un problema alquanto fastidioso.

    un pulsaante genera un frame che contiene una lista.
    ad ogni click si reitera il discorso.

    siccome voglio che la lista venga mostrata da subito con i contenuti in vista (cioè, appena viene generata deve mostrare i valori, non deve essere dunque l'utente a cliccare sopra di essa per attivare il contenuto) uso la proprietà SETFOCUS...

    il fatto è che questo codice:
    codice:
    with  TFRAME.Create(contenitore) do
              begin
                parent:=contenitore;
                left:=sn;
                top:=115;
                Inc(sn,250);
                name:=frame+IntToStr(nframe);
                Inc(nframe);
                setfocus; // <-- !!!
              end;
    provoca un errore in fase di creazione:
    infatti:
    genero il primo frame e la tabella viene visualizzata con i contenuti,
    quando vado a generare il frame successivo viene creato MOLTO più in BASSO, NON rispettando l'impostazione TOP!!!!
    e così via...

    come mai?
    che posso fare?

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,301
    La frase "provoca un errore" sta ad indicare che il comportamento del codice non è quello che ti aspetti o che viene proprio generata un'eccezione quando tenti di richiamare il metodo SetFocus.

    Se il caso è quest'ultimo, quale tipo di errore viene generato?
    Percaso è "Cannot focus a disabled or invisible window" o qualcosa del genere?

    Occorre dire che creazione e visualizzazione sono due operazioni distinte. Quando crei il frame, allochi nella pratica tutte le strutture dati che servono per mantenerne in memoria i dati: queste sono strutture Delphi, a cui segue l'allocazione delle strutture Windows, cioè quelle strutture che appartengono invece al sistema operativo per poter gestire il controllo visuale, inviare ad esso dei messaggi in corrispondenza del movimento del mouse e della pressione di tasti.

    Nel momento in cui tu fai la SetFocus, forse non sono ancora state allocate le strutture dati Windows per il controllo visuale su cui si sta cercando di impostare il focus.

    Controlla che non vi sia una ulteriore chiamata a SetFocus nel codice del frame, ma solo nel codice del contenitore, richiamato quando devi creare un nuovo frame (in pratica, il codice che hai inviato).

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

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

  3. #3
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,301
    Dimenticavo... spero che il codice che hai postato sia stato copiato e incollato da Delphi...e non ricopiato. Confermi?
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

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

  4. #4
    l'errore è in fase di visualizzazione!

    sia cche usi SETFOCUS sia che semplicemente dia il focus ad un frame già generato (senza usare SetFocus nel codice), quando vado a generare un nuovo frame questo risulta traslato in basso invece di essere sulla stessa linea.

    cioè:
    genero un frame.
    lo seleziono, ci clicco sopra, insomma...
    genero un altro framme e questo è più in basso dell'altro come se non avesse rispettato la proprietà TOP.

    oppure
    genero un frame
    viene selezionato automaticamente con la proprietà SetFocus,
    genero un altro framme e questo è più in basso dell'altro come se non avesse rispettato la proprietà TOP.

    capit'?

    e si, il codice è copiato da delphi... è quello mio...

  5. #5
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,301
    Originariamente inviato da Lyll0
    genero un frame
    viene selezionato automaticamente con la proprietà SetFocus,
    genero un altro framme e questo è più in basso dell'altro come se non avesse rispettato la proprietà TOP.
    Quindi tutti i frame hanno lo stesso Top (che imposti fisso a 115), mentre Left è variabile...però in realtà ti ritrovi con frame che hanno un valore di Top diverso da 115?

    Hai degli allineamenti impostati o qualcosa che può far "traslare" le coordinate? Sei sicuro di non assegnare nuovamente la proprietà Top?
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

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

  6. #6
    no!
    Top rimane quella sempre!!!

  7. #7
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,301
    Nel codice non noto errori, quindi il problema è sicuramente da un'altra parte.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

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

  8. #8
    non lo so.
    ho risolto in un altro modo...

    certo è che rimane alquanto fastidioso dover cliccare su ogni componente per far si che questo visualizzi il prorpio contenuto!

  9. #9
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,301
    Originariamente inviato da Lyll0
    certo è che rimane alquanto fastidioso dover cliccare su ogni componente per far si che questo visualizzi il prorpio contenuto!
    Questo è un tuo problema di programmazione e organizzazione.

    Un controllo visuale, ad esempio una ListBox, visualizza il contenuto quando la proprietà Items che contiene gli elementi da mostrare viene inizializzata. Se la inizializzi quando il controllo riceve il focus, allora il contenuto lo vedrai solo cliccando all'interno del controllo, ma il problema è dovuto solo ad un errore tuo nel posizionare il codice di inizializzazione, non riguarda il codice o il funzionamento del controllo visuale stesso.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

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

  10. #10
    e allora dove dovrei metterlo secondo te?
    qui non si parla di un controllo già presente il quale può essere inizializzato anche sul click del pulsante che lo visualizza,

    io avevo messo setfocus al controllo appena veniva creato, che rappresenta l'unica via possibile, ma quella scelta causava lo sfasamento dei controlli generati in sequenza...

    a questo punto, tu che mi consiglieresti?

    io sono ad un punto mortissimo!

    grazie e

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