Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it L'avatar di VaLvOnAuTa
    Registrato dal
    Jun 2002
    Messaggi
    2,003

    Usare un componente custom

    Il titolo non è molto chiaro, lo so.
    In pratica l'idea è quella di creare un TForm customizzato (per farne un popup alla google desktop per intenderci).
    Ho creato la classe derivata da TForm
    codice:
    unit mypopup;
    
    interface
    
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, ExtCtrls;
    
    type
     TPopForm = class(TForm)
       pnlText,
       pnlTitle: TPanel;
       LblTitle,
       LblText : TLabel;
     public
       constructor Create(AOwner: TComponent); override;
     end;
    implementation
    
    constructor TPopForm.Create(AOwner: TComponent);
    var
     Desktop: TRect;
    begin
     inherited Create(AOwner);
     Height := 120;
     Width := 300;
     if SystemParametersInfo(SPI_GETWORKAREA,0,@Desktop,0) then
      begin
       Left := Desktop.Right - Width;
       Top  := Desktop.Bottom - Height;
      end;
     pnlTitle.Align := alTop;
     pnlTitle.Height := 20;
     pnlTitle.Color := $00ff0000;
     LblTitle.Parent := pnlTitle;
    end;
    
    end.
    E volevo crearlo a run-time durante l'esecuzione del programma (ad esempio al click di un bottone).
    Però se lo costruisco così:
    p:= TPopForm.Create(Form1); mi da "TPopForm Resource not found"

    mentre se lo costruisco così
    p.Create(Form1); mi dà stack overflow. In cosa sbaglio?

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,296
    Manca il riferimento al file DFM che deve essere presente per consentire al form di prelevare i propri dati:
    codice:
    {$R *.dfm}
    Qualcosa mi fa pensare che tu non abbia creato questo form nel modo convenzionale.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

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

  3. #3
    Utente di HTML.it L'avatar di VaLvOnAuTa
    Registrato dal
    Jun 2002
    Messaggi
    2,003
    Originariamente inviato da alka
    Manca il riferimento al file DFM che deve essere presente per consentire al form di prelevare i propri dati:
    codice:
    {$R *.dfm}
    Qualcosa mi fa pensare che tu non abbia creato questo form nel modo convenzionale.
    Quel coso è importante?

    No in realtà la mia idea era quello di creare una classe che potesse creare il form a run-time. E devo dire che ci sono pure riuscito. Solo che non riesco ad assegnare gli eventi al form una volta creato

  4. #4
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,296
    Originariamente inviato da VaLvOnAuTa
    Quel coso è importante?
    Abbastanza.

    Originariamente inviato da VaLvOnAuTa
    No in realtà la mia idea era quello di creare una classe che potesse creare il form a run-time. E devo dire che ci sono pure riuscito. Solo che non riesco ad assegnare gli eventi al form una volta creato
    Quella classe puoi crearla comunque pur inserendo il Form nella maniera classica, con [File|New Form]. Non vedo quale sia il vantaggio di scrivere il form a mano, tralasciando elementi che generalmente sono fondamentali per il Form.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

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

  5. #5
    Utente di HTML.it L'avatar di VaLvOnAuTa
    Registrato dal
    Jun 2002
    Messaggi
    2,003
    Originariamente inviato da alka
    Abbastanza.


    Quella classe puoi crearla comunque pur inserendo il Form nella maniera classica, con [File|New Form]. Non vedo quale sia il vantaggio di scrivere il form a mano, tralasciando elementi che generalmente sono fondamentali per il Form.
    Vantaggi nessuno (anche disegnarlo senza strumenti visuali è alquanto una rottura). Infatti ho lasciato perdere. Lascio che il form sia creato all'avvio e poi nascosto. Poi eventuali operazioni da eseguire all'evento "oncreate" le eseguo su "onshow" e mi risolvo i problemi.
    Pensavo che creandolo e distruggendolo quando serviva avrebbe risparmiato un pò di risorse.

  6. #6
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,296
    Originariamente inviato da VaLvOnAuTa
    Pensavo che creandolo e distruggendolo quando serviva avrebbe risparmiato un pò di risorse.
    Uh!?

    Questo è sacrosanto, hai pienamente ragione, ma non capisco cosa c'entra la progettazione del form visuale e non con la creazione dinamica di un'istanza del form che puoi fare comunque e quando lo ritieni opportuno.

    Perché intercettare l'OnShow e nascondere una form di cui non si ha bisogno lasciando che venga creata?

    Hai la totale padronanza nella scelta di quali finestre debbano essere o meno create a runtime in modo automatico.

    Vai nella finestra di dialogo delle opzioni del progetto, pagina "Forms" se non sbaglio, e scegli quali form creare automaticamente.

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

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

  7. #7
    Utente di HTML.it L'avatar di VaLvOnAuTa
    Registrato dal
    Jun 2002
    Messaggi
    2,003
    Hai perfettamente ragione. Avevo pensato una cosa più o meno giusta e l'ho realizzata a pene di canide.
    Bastava un
    codice:
    Application.CreateForm(TPopup, Popup);
    Popup.Show;
    Grazie mille

    (E' venuta una cosa abbastanza carina.. stile popup di google desktop.. )

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.