Button per Programm erzeugen

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
malabarista
Beiträge: 321
Registriert: Sa 11. Jun 2016, 12:16
OS, Lazarus, FPC: Linux Mint 18.1 L1.6.2-1 FPC 3.0.0
CPU-Target: 64Bit
Wohnort: Konstanz

Button per Programm erzeugen

Beitrag von malabarista »

Ich möchte gerne einen Button per Programm erzeugen.

Code: Alles auswählen

 
unit tischwahlu;
 
{$mode objfpc}{$H+}
 
interface
 
uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls,
  Buttons;
 
type
 
  { TFtischwahl }
 
  TFtischwahl = class(TForm)
    Panel1: TPanel;
    zuruck_b: TSpeedButton;
    procedure close0(Sender: TObject; var CloseAction: TCloseAction);
    procedure init0(Sender: TObject);
    procedure zuruck(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;
 
var
  Ftischwahl: TFtischwahl;
 
implementation
 
{$R *.lfm}
 
{ TFtischwahl }
 
var
  jj:integer;
  tt:Tbutton;
 
procedure TFtischwahl.zuruck(Sender: TObject);
begin
  close;
end;
 
 
Leider bricht der Compiler in der Zeile
tt: Tbutton;
ab mit der Fehlermeldung
Error Identifier not found "Tbutton"
Was ist da falsch ? die unit Buttons ist doch im uses eingebunden ?

Noch eine ergänzende Frage dazu:
im onclose-Event muss ich den Button freigeben oder wird dies automatisch gemacht ?
Falls nicht, mit welchen Befehlen muss diese Freigabe erfolgen ?

Benutzeravatar
theo
Beiträge: 10871
Registriert: Mo 11. Sep 2006, 19:01

Re: Button per Programm erzeugen

Beitrag von theo »

Das ist in der Unit StdCtrls. Am einfachsten ziehst du einen Button auf das Formular und löschst ihn gleich wieder. Die Unit StdCtrls bleibt dir dabei in der "uses" Klausel erhalten.

Wenn du den Parameter "Self" als Owner mitgibst, musst du dich nicht um das Freigeben des Buttons beim Freigeben des Formulars kümmern.

Code: Alles auswählen

MyButton:=TButton.Create(Self);
http://lazarus-ccr.sourceforge.net/docs ... utton.html

malabarista
Beiträge: 321
Registriert: Sa 11. Jun 2016, 12:16
OS, Lazarus, FPC: Linux Mint 18.1 L1.6.2-1 FPC 3.0.0
CPU-Target: 64Bit
Wohnort: Konstanz

Re: Button per Programm erzeugen

Beitrag von malabarista »

Funktioniert so.

danke.

malabarista
Beiträge: 321
Registriert: Sa 11. Jun 2016, 12:16
OS, Lazarus, FPC: Linux Mint 18.1 L1.6.2-1 FPC 3.0.0
CPU-Target: 64Bit
Wohnort: Konstanz

Re: Button per Programm erzeugen

Beitrag von malabarista »

Jetzt ergibt sich noch eine ergänzende Frage:
Wie übergebe ich die OnClick-Funktion (=das Sender-Object) ?

Code: Alles auswählen

 
     tt:=TButton.create(self);
     tt.left:=x;
     tt.top:=y;
     tt.width:=breite;
     tt.height:=hoehe;
     tt.caption:=zv+z;
     tt.parent:=panel1;
     tt.tag:=ii;
     tt.onclick:=buchung(tt);
 
Hier bekomme ich einen Compilerfehler (Incompatible types) und auch buchung(@tt) wird als falsch gemeldet (got "Pointer" expected "TObject").

Benutzeravatar
theo
Beiträge: 10871
Registriert: Mo 11. Sep 2006, 19:01

Re: Button per Programm erzeugen

Beitrag von theo »

Setze einfach den Eingabecursor hinter

Code: Alles auswählen

tt.onclick:=
(Rest der Zeile löschen) drücke Shift-Ctrl+C und Sie werden geholfen. :wink:

malabarista
Beiträge: 321
Registriert: Sa 11. Jun 2016, 12:16
OS, Lazarus, FPC: Linux Mint 18.1 L1.6.2-1 FPC 3.0.0
CPU-Target: 64Bit
Wohnort: Konstanz

Re: Button per Programm erzeugen

Beitrag von malabarista »

Aaaah, wunderbar.

Antworten