logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Delphi 7 - Jak dynamicznie tworzyć label po kliknięciu przycisku?

witek2323 04 Gru 2009 17:29 5052 9
REKLAMA
  • #1 7344761
    witek2323
    Poziom 12  
    Posty: 106
    Pomógł: 4
    Ocena: 3
    Witam,

    Mam problem, mianowicie chciałbym stworzyć program, który po kliknięciu na przycisk tworzy dynamicznie label(to znaczy pole z tekstem). Z tego co znalazłem w googlach, stworzyłem takie coś:
    unit Unit1;
    
    interface
    
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;
    
    type
      TForm1 = class(TForm)
        Button1: TButton;
        Label1: TLabel;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;
    
    var
      Form1: TForm1;
      Obiekt:  TLabel;
    
    implementation
    
    {$R *.dfm}
    
    procedure TForm1.Button1Click(Sender: TObject);
    begin
       Obiekt:= TLabel.Create(Self.Label1);
    end;
    
    end.
    


    Niestety nie działa;(

    Z góry dziękuję za wszelką pomoc.
    Pozdrawiam.
  • REKLAMA
  • REKLAMA
  • #3 7345002
    witek2323
    Poziom 12  
    Posty: 106
    Pomógł: 4
    Ocena: 3
    W zasadzie problem rozwiązałem pewnym "mykiem" mianowicie wyłączyłem widoczność elementu na starcie, a po naciśnięciu przycisku widoczność się włącza. To jest mój kod:
    
    unit Unit1;
    
    interface
    
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;
    
    type
      TForm1 = class(TForm)
        Button1: TButton;
        Button2: TButton;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;
    
    var
      Form1: TForm1;
    
    implementation
    
    {$R *.dfm}
    
    procedure TForm1.Button1Click(Sender: TObject);
    begin
    Form1.Button2.Visible:=True;
    end;
    
    end.
    


    Dziękuje za zainteresowanie. Inne opcje rozwiązania mojego problemu są mile widziane:)
  • REKLAMA
  • #4 7345363
    marcinj12
    Poziom 40  
    Posty: 3404
    Pomógł: 1024
    Ocena: 250
    Poczytaj tutaj. Wydaje mi się że oprócz utworzenia elementu musisz mu ponadawać właściwości (w tym włączyć visible na true)
  • REKLAMA
  • #6 7345666
    witek2323
    Poziom 12  
    Posty: 106
    Pomógł: 4
    Ocena: 3
    Mi nie chodzi o konkretny tekst, po prostu po kliknięciu na button, ma się pojawić nowy element formatki taki jak label lub nowy button.
  • #7 7346000
    Dżyszla
    Poziom 42  
    Posty: 7077
    Pomógł: 1095
    Ocena: 226
    A ja chcę, żeby po kliknięciu przycisku sama napisała się odpowiedź na głupią odpowiedź poprzednika... A jak kliknę znowu, to owy poprzednik zrozumie jaką głupotę napisał i się zrehabilituje... A jak kliknę znowu ten sam przycisk, to włączy mi się moje radio na parapecie.
  • #8 7346199
    witek2323
    Poziom 12  
    Posty: 106
    Pomógł: 4
    Ocena: 3
    Natomiast ja bym chciał żeby mój szanowny poprzednik nie pisał równoważnikami zdań. I jeśli ma coś w jakiś sposób nawiązującego do tematu, ubrał to w logiczne zdanie.
  • Pomocny post
    #9 7346292
    blackrage
    Poziom 15  
    Posty: 177
    Pomógł: 10
    Ocena: 13
    Tak jak Ci kolega pisał - Parent, Caption, Left, Top i Visible

    
    unit Unit1;
    
    interface
    
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;
    
    type
      TForm1 = class(TForm)
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
        MyLabel1 : TLabel;
        MyButton1 : TButton;
      end;
    
    var
      Form1: TForm1;
    
    implementation
    
    {$R *.dfm}
    
    procedure TForm1.Button1Click(Sender: TObject);
    begin
     MyLabel1 := TLabel.Create( Self );
     MyLabel1.Parent := Self;
     MyLabel1.Left := 10;
     MyLabel1.Top := 10;
     MyLabel1.Caption := 'abcdefghij';
     MyLabel1.Visible := True;
    
     MyButton1 := TButton.Create( Self );
     MyButton1.Parent := Self;
     MyButton1.Left := 10;
     MyButton1.Top := 40;
     MyButton1.Caption := 'abcdefghij';
     MyButton1.Visible := True;
    end;
    
    end.
    



    ( faktycznie - zbyt pedagogiczne to, to nie było :/ )
  • #10 7346338
    Dżyszla
    Poziom 42  
    Posty: 7077
    Pomógł: 1095
    Ocena: 226
    To jak dajesz kompletny kod, to pamiętaj jeszcze o zwolnieniu obiektów ;) A ten Caption - przecież on nie chciał konkretnego tekstu ;p ale chciał widzieć labela służącego do wyświetlania tekstów :P Ot, zadanie na miarę Einstaina, który dobrze znał rzeczy nieskończone :)

Podsumowanie tematu

LABEL_AI_GENERATED
Użytkownik poszukiwał sposobu na dynamiczne tworzenie etykiet (label) w Delphi 7 po kliknięciu przycisku. W odpowiedziach zasugerowano kilka rozwiązań, w tym ustawienie właściwości obiektu, takich jak Parent, Caption, Left, Top oraz Visible. Użytkownik znalazł alternatywne podejście, polegające na ukryciu elementu na początku i włączeniu jego widoczności po naciśnięciu przycisku. Wskazano również na konieczność zwolnienia obiektów oraz dodania tekstu do wyświetlenia. Ostatecznie, przedstawiono kompletny kod, który tworzy nowy label i button, ustawiając ich właściwości.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA