Pagina 1 di 4 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 37
  1. #1
    Utente di HTML.it L'avatar di lyllo
    Registrato dal
    Apr 2001
    Messaggi
    832

    [delphi] Creare un oggeto al click su pulsante

    ciao ragazzi,
    ho iniziato a cazzeggiare con delphi 7, vorrei creare un pulsante che crei un componente in una data posizione ed ogni volta che l'utente clicca sullo stesso pulsante si crea un ulteriore componente però più sotto...

    |PULSANTE|............00000 (componente)
    .
    .
    click
    .
    .
    .............................00000
    .
    .
    clicck
    .
    .
    .............................00000

    ideee?

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,296
    Più che idee, servono soluzioni!

    Il procedimento corretto per creare un nuovo controllo visuale, ad esempio un TLabel, è questo:
    codice:
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      with TLabel.Create(Self) do
      begin
        Parent := Self;
        Caption := 'Test';
        Left := Button1.Left;
        Top := Button1.Top + 25;
      end;
    end;
    Questo codice di esempio crea un controllo TLabel alla pressione di un pulsante; molto importante è assegnare il Parent per definire il "controllo contenitore", affinchè il nuovo controllo creato dinamicamente venga visualizzato.
    Nell'esempio, ho assegnato all'etichetta la stessa distanza dal bordo sinistro e di 25 pixel dalla posizione del pulsante su cui viene fatto il clic...ma potrai personalizzare questo codice come meglio credi.

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

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

  3. #3
    Utente di HTML.it L'avatar di lyllo
    Registrato dal
    Apr 2001
    Messaggi
    832
    grazie scusa l'intempestività, ma non ho ricecvuto alcuna notifica!

    ssenti, ma se volessi creare uun numero indefinito di controlli MEMO di una data larghezza, ,uno sottto l'azltro come dovrei fare?

  4. #4
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,296
    Per creare infiniti controlli TMemo, prendi sempre come spunto il codice che ti ho riportato nel messaggio precedente.

    Dovrai ovviamente sostituire la classe TLabel con TMemo per creare i controlli visuali che desideri. L'impostazione del Parent rimane uguale, ma devi specificare anche i valori delle proprietà Height e Width del controllo creato, che corrispondono rispettivamente ad altezza e larghezza, oltre che definire le proprietà Left e Top, che indicano invece la distanza dal margine sinistro e superiore del controllo visuale che li contiene (in questo caso, il Form).

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

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

  5. #5
    ciao e graize,

    sai qual'è il problema?

    1) che non so perchè ma il mio vecchio nome utente portava all'impossibilità di creare, rispondere ai messaggi... quindi riomincio da 0....
    2) con la tua procedura la creazione del memo (che avevo già modificato a mio piacimento) genera un solo componente se clicco un'aòùltra volta, semplicemente non succede nulla!

    io vorrei creare un comando che OGNI volta che viene cliccato generi un memo che stia sotto al precedente...
    mi sai aiutare?

  6. #6
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,296
    La procedura che ti ho fornito genera ad ogni clic un nuovo TMemo!

    Il vero problema è che ciascuno di essi viene visualizzato con le stesse dimensioni nella medesima posizione, dando l'idea che ve ne sia sempre e soltanto uno.

    Dovresti memorizzare il valore di Left e Top in due variabili che ogni volta si incrementano rispettivamente, a seconda della disposizione che si vuole ottenere, del valore della larghezza (Width) o della lunghezza (Height).

    Dovresti utilizzare questi due valori per calcolare ad ogni clic una nuova posizione appropriata per il controllo e assegnarla alle proprietà Left e Top.

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

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

  7. #7
    ma che RINCOGLIONITOOOOOOOOOO

    mica ci avevo pensato!!!!!

    abbattimi per favore!

    ma tanto ce ne saranno altrte di cose che ti chiederò!
    per ora grazie!

  8. #8
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,296
    Non abbatterti assolutamente...

    Capita spesso di ritrovarsi in casi come questo e di non capire come mai avviene una cosa...anche se la soluzione è proprio davanti ai nostri occhi.

    Spesso, il modo più rapido per risolvere il problema è raccontarlo: nel raccontare, si organizza sempre il discorso in modo da far capire all'interlocutore il contesto...e spesso si finisce per trovare la soluzione proprio in quel momento.

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

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

  9. #9
    sto cercando di applicare quello he mi hai suggerito tu, solo che non ne vegno fuori:

    ho creato una lista ch memorizza la posizione del comntrollo, solo che non rieso a far funzionare quello che dico io!

    codice:
    type
          TipoMemo=record
                     altezza:integer;
                    end;
          TipoLista=array[1..200] of TipoMemo; //dovrebbe esere il vettore che memorizza le informazioni
    var
      Form1: TForm1;
      num:TipoLista;
    implementation
    
    {$R *.dfm}
    
    procedure TForm1.btnNuovaClick(Sender: TObject);
    var i:integer;
    begin
      with TMemo.Create(self) do
      begin
        if i=1 then
          begin
            num[i].altezza:=2;
            top:=num[i].altezza;
            i:=i+1;
          end;
        left:=60;
        height:=90;
        top:=90+(num[i].altezza);
        i:=i+1;
      end;
    end;
    ma così non va!

  10. #10
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,296
    Non stai usando una lista, ma un array: sono due strutture dati profondamente differenti. A parte questa precisazione, che non ha a che vedere col problema in se, gli errori appaiono abbastanza chiari.

    Il suggerimento che ti dò prima di subito è quello di tentare, prima di scrivere messaggi, l'esecuzione passo per passo (debug) della tua applicazione, ponendo un breakpoint sulla riga della procedura incriminata (in Delphi basta fare clic sulla barra a sinistra del codice, dove appaiono i pallini blu dopo la compilazione, comunemente detta "gutter").

    Eseguire passo per passo aiuta a capire quale logica sta seguendo il programma e quindi verificare anche se tale logica è quella che abbiamo pensato noi stessi.

    Ad esempio, l'uso di i = 1 è corretto, ma il codice che segue il blocco dell'if viene eseguito in ogni caso, mentre questo non dovrebbe essere fatto; occorre quindi aggiungere una chiamata ad Exit per interrompere la procedura.

    In secondo luogo, credo che il vettore (array) ti serva per poter memorizzare i controlli creati precedentemente...ma supponendo che la variabile i indichi il controllo corrente, nel codice non si fa mai riferimento a (i - 1) per acquisire la posizione dell'elemento precedentemente creato.

    Dovresti prima realizzare il tuo algoritmo, vista la semplicità, sulla carta, scrivendoti i valori assunti dalle variabili ciclo per ciclo e, se quell'algoritmo che hai pensato è corretto, trasferirlo in linguaggio Pascal su Delphi per farlo eseguire al computer.

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