Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Zugriffsverletzung bei Adresse 0045976B ... (https://www.delphipraxis.net/169885-zugriffsverletzung-bei-adresse-0045976b.html)

anoymouserver 19. Aug 2012 01:03

Zugriffsverletzung bei Adresse 0045976B ...
 
Hi ich arbeite zur Zeit an meinem ersten Projekt und bin jetzt leider auf diese Fehlermeldung gestoßen:


Im Projekt ProjektBerechnen.exe ist eine Exception der Klasse EAccessViolation aufgetreten. Meldung: 'Zugriffsverletzung bei Adresse 0045976B in Modul 'ProjektBerechnen.exe'. Lesen von Adresse 00000000'. Prozess wurde angehalten. Mit Einzelne Anweisung oder Start fortsetzen.

und ich finde leider den Fehler nicht!
Könnt ihr mir bitte sagen was ich falsch mache?

Hier mal die Quellcodes der Formulare:

Hauptformular
Delphi-Quellcode:
unit UnitBerechnen;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, ComCtrls, TabNotBk, Menus, Math, ShellAPI;

type
  TForm1 = class(TForm)
    TabSheet1: TTabSheet;
    TabSheet2: TTabSheet;
    TabSheet3: TTabSheet;
    TabSheet4: TTabSheet;
    QBild: TShape;
    QLba1: TLabel;
    QLba2: TLabel;
    QLbSeitenlaenge: TLabel;
    QLbUmfang: TLabel;
    QLbFlaeche: TLabel;
    QEdLaenge: TEdit;
    QEdUmfang: TEdit;
    QEdFlaeche: TEdit;
    QBtRechnen: TButton;
    RBild: TShape;
    RLbb2: TLabel;
    RLbSeitenlaengeb: TLabel;
    RLbUmfang: TLabel;
    RLbFlaeche: TLabel;
    REdLaengea: TEdit;
    REdUmfang: TEdit;
    REdFlaeche: TEdit;
    RLbSeitenlaengea: TLabel;
    REdLaengeb: TEdit;
    KBild: TShape;
    QLbA: TLabel;
    RLbA: TLabel;
    RBtRechnen: TButton;
    KLbRadius: TLabel;
    KLbDurchmesser: TLabel;
    KLbUmfang: TLabel;
    KLbFlaeche: TLabel;
    KEdRadius: TEdit;
    KEdDurchmesser: TEdit;
    KEdUmfang: TEdit;
    KEdFlaeche: TEdit;
    KBtRechnen: TButton;
    rDLbWinkelb: TLabel;
    rDEdBeta: TEdit;
    rDLbSeitenlaengea: TLabel;
    rDEdLaengea: TEdit;
    rDLbSeitenlaengeb: TLabel;
    rDEdLaengeb: TEdit;
    rDLbSeitenlaengec: TLabel;
    rDEdLaengec: TEdit;
    TabSheet5: TTabSheet;
    rDLbbeta: TLabel;
    rDLbWinkela: TLabel;
    rDLbalpha: TLabel;
    rDEdAlpha: TEdit;
    rDLbFlaeche: TLabel;
    rDEdFlaeche: TEdit;
    rDBtRechnen: TButton;
    KRadiusStrich: TShape;
    KLbR: TLabel;
    rDLbUmfang: TLabel;
    rDEdUmfang: TEdit;
    rDBild: TImage;
    rDLba1: TLabel;
    rDLbc1: TLabel;
    rDLbb1: TLabel;
    RLba1: TLabel;
    rDBildColor: TShape;
    rDLbA: TLabel;
    aDBild: TImage;
    aDLba1: TLabel;
    aDLbc1: TLabel;
    aDLbb1: TLabel;
    aDBildColor: TShape;
    aDLbA: TLabel;
    aDEdAlpha: TEdit;
    aDLbWinkela: TLabel;
    aDLbAlpha: TLabel;
    aDEdBeta: TEdit;
    aDLbWinkelb: TLabel;
    aDLbBeta: TLabel;
    aDEdLaengea: TEdit;
    aDLbSeitenlaengea: TLabel;
    aDLbSeitenlaengeb: TLabel;
    aDEdLaengeb: TEdit;
    aDLbSeitenlaengec: TLabel;
    aDEdLaengec: TEdit;
    aDLbUmfang: TLabel;
    aDEdUmfang: TEdit;
    aDLbFlaeche: TLabel;
    aDEdFlaeche: TEdit;
    aDEdGamma: TEdit;
    aDLbWinkelg: TLabel;
    aDLbGamma: TLabel;
    aDBtRechnen: TButton;
    PageControlKoerper: TPageControl;
    TabSheet6: TTabSheet;
    PageControlFlaechen: TPageControl;
    MainMenu1: TMainMenu;
    Einstellungen1: TMenuItem;
    Farbe1: TMenuItem;
    Rot1: TMenuItem;
    Blau1: TMenuItem;
    Gelb1: TMenuItem;
    Wei1: TMenuItem;
    Hilfe1: TMenuItem;
    Hilfe2: TMenuItem;
    N1: TMenuItem;
    Info1: TMenuItem;
    Berechnungen1: TMenuItem;
    Startseite1: TMenuItem;
    N2: TMenuItem;
    Flchen1: TMenuItem;
    Krper1: TMenuItem;
    TabSheet7: TTabSheet;
    TabSheet8: TTabSheet;
    TabSheet9: TTabSheet;
    TabSheet10: TTabSheet;
    WLbKantenlaenge: TLabel;
    WEdKanten: TEdit;
    WLbGesamtkantenlaenge: TLabel;
    WEdDiagonale: TEdit;
    WLbRaumdiagonale: TLabel;
    WEdGesamtkanten: TEdit;
    WLbVolumen: TLabel;
    WEdVolumen: TEdit;
    WEdOberflaeche: TEdit;
    WLbOberflaeche: TLabel;
    WBtRechnen: TButton;
    QuLbKantenlaengec: TLabel;
    QuEdKantec: TEdit;
    QuLbRaumdiagonale: TLabel;
    QuEdDiagonale: TEdit;
    QuLbGesamtkantenlaenge: TLabel;
    QuEdGesamtkanten: TEdit;
    QuLbOberflaeche: TLabel;
    QuEdOberflaeche: TEdit;
    QuLbVolumen: TLabel;
    QuEdVolumen: TEdit;
    QuEdKanteb: TEdit;
    QuLbKantenlaengeb: TLabel;
    QuLbKantenlaengea: TLabel;
    QuEdKantea: TEdit;
    QuBtRechnen: TButton;
    KuLbRadius: TLabel;
    KuEdRadius: TEdit;
    KuEdDurchmesser: TEdit;
    KuLbDurchmesser: TLabel;
    KuEdVolumen: TEdit;
    KuLbVolumen: TLabel;
    KuEdOberflaeche: TEdit;
    KuLbOberflaeche: TLabel;
    KuBtRechnen: TButton;
    Grn1: TMenuItem;
    KuBild: TImage;
    KuBildColor: TShape;
    KuRadiusStrich: TShape;
    KuLbR: TLabel;
    WBild: TImage;
    WBildColor: TShape;
    WLba1: TLabel;
    WLba3: TLabel;
    WLba2: TLabel;
    WLbV: TLabel;
    QuBild: TImage;
    QuBildColor: TShape;
    QuLba1: TLabel;
    QuLbc1: TLabel;
    QuLbb1: TLabel;
    QuLbV: TLabel;
    ZBild1: TShape;
    ZBild4: TShape;
    ZBild2: TShape;
    ZBild3: TShape;
    ZLbRadius: TLabel;
    ZEdRadius: TEdit;
    ZLbOberflaeche: TLabel;
    ZEdOberflaeche: TEdit;
    ZLbVolumen: TLabel;
    ZEdVolumen: TEdit;
    ZEdHoehe: TEdit;
    ZLbHoehe: TLabel;
    ZLbMantel: TLabel;
    ZEdMantel: TEdit;
    ZLbGrundflaeche: TLabel;
    ZEdGrundflaechen: TEdit;
    ZBtRechnen: TButton;
    ZRadiusstrich: TShape;
    ZLbR: TLabel;
    ZLbh: TLabel;
    TabSheet11: TTabSheet;
    KeBild: TImage;
    KeBildColor: TShape;
    ZEdUmfang: TEdit;
    ZLbUmfang: TLabel;
    KeLbRadius: TLabel;
    KeEdRadius: TEdit;
    KeLbHoehe: TLabel;
    KeEdHoehe: TEdit;
    KeLbUmfang: TLabel;
    KeEdUmfang: TEdit;
    KeLbOberflaeche: TLabel;
    KeEdOberflaeche: TEdit;
    KeLbVolumen: TLabel;
    KeEdVolumen: TEdit;
    KeLbMantel: TLabel;
    KeEdMantel: TEdit;
    KeLbGrundflaeche: TLabel;
    KeEdGrundflaeche: TEdit;
    KeBtRechnen: TButton;
    KeEdMantellinie: TEdit;
    KeLbMantellinie: TLabel;
    KeLbS: TLabel;
    KeHoehestrich: TShape;
    KeLbH: TLabel;
    PLbHoehe: TLabel;
    PEdHoehe: TEdit;
    PLbSeitenkantenlaenge: TLabel;
    PEdSeitenkante: TEdit;
    PLbOberflaeche: TLabel;
    PEdOberflaeche: TEdit;
    PLbVolumen: TLabel;
    PEdVolumen: TEdit;
    PLbMantel: TLabel;
    PEdMantel: TEdit;
    PLbGrundflaeche: TLabel;
    PEdGrundflaeche: TEdit;
    PLbGrundkantenlaenge: TLabel;
    PEdKantenlaenge: TEdit;
    PBtRechnen: TButton;
    PBild: TImage;
    PBildColor: TShape;
    PLba1: TLabel;
    PLbH: TLabel;
    PLba2: TLabel;
    PLbs1: TLabel;
    PHoehestrich: TShape;
    TabSheet12: TTabSheet;
    TEdKantenlaenge: TEdit;
    TLbKantenlaenge: TLabel;
    TEdHoehe: TEdit;
    TLbHoehe: TLabel;
    TLbOberflaeche: TLabel;
    TEdOberflaeche: TEdit;
    TLbVolumen: TLabel;
    TEdVolumen: TEdit;
    TLbMantel: TLabel;
    TEdMantel: TEdit;
    TLabelGrundflaeche: TLabel;
    TEdGrundflaeche: TEdit;
    TBtRechnen: TButton;
    TBild: TImage;
    TBildColor: TShape;
    TLba2: TLabel;
    TLba3: TLabel;
    TLbH: TLabel;
    TLba1: TLabel;
    QBtLoeschen: TButton;
    KBtLoeschen: TButton;
    rDBtLoeschen: TButton;
    RBtLoeschen: TButton;
    aDBtLoeschen: TButton;
    WBtLoeschen: TButton;
    QuBtLoeschen: TButton;
    KuBtLoeschen: TButton;
    ZBtLoeschen: TButton;
    KeBtLoeschen: TButton;
    TBtLoeschen: TButton;
    PBtLoeschen: TButton;
    aDEdAlpha2: TEdit;
    aDEdBeta2: TEdit;
    aDEdGamma2: TEdit;
    aDEdLaengea2: TEdit;
    aDEdLaengeb2: TEdit;
    aDEdLaengec2: TEdit;
    aDEdUmfang2: TEdit;
    aDEdFlaeche2: TEdit;
    aDLbDreieck1: TLabel;
    aDLbDreieck2: TLabel;
    procedure QBtRechnenClick(Sender: TObject);
    procedure RBtRechnenClick(Sender: TObject);
    procedure KBtRechnenClick(Sender: TObject);
    procedure rDBtRechnenClick(Sender: TObject);
    procedure Flchen1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Rot1Click(Sender: TObject);
    procedure Grn1Click(Sender: TObject);
    procedure Blau1Click(Sender: TObject);
    procedure Gelb1Click(Sender: TObject);
    procedure Wei1Click(Sender: TObject);
    procedure aDBtRechnenClick(Sender: TObject);
    procedure Krper1Click(Sender: TObject);
    procedure WBtRechnenClick(Sender: TObject);
    procedure QuBtRechnenClick(Sender: TObject);
    procedure KuBtRechnenClick(Sender: TObject);
    procedure ZBtRechnenClick(Sender: TObject);
    procedure KeBtRechnenClick(Sender: TObject);
    procedure PBtRechnenClick(Sender: TObject);
    procedure OnlyNumbers(Sender: TObject; var Key: Char);
    procedure EditClear(Sender: TObject);
    procedure TBtRechnenClick(Sender: TObject);
    procedure Hilfe2Click(Sender: TObject);
    procedure QBtLoeschenClick(Sender: TObject);
    procedure RBtLoeschenClick(Sender: TObject);
    procedure KBtLoeschenClick(Sender: TObject);
    procedure Info1Click(Sender: TObject);
    procedure rDBtLoeschenClick(Sender: TObject);
    procedure QEdLaengeChange(Sender: TObject);
    procedure QEdUmfangChange(Sender: TObject);
    procedure QEdFlaecheChange(Sender: TObject);
    procedure KEdRadiusChange(Sender: TObject);
    procedure KEdDurchmesserChange(Sender: TObject);
    procedure KEdUmfangChange(Sender: TObject);
    procedure rDEdAlphaChange(Sender: TObject);
    procedure rDEdBetaChange(Sender: TObject);
    procedure rDEdLaengeaChange(Sender: TObject);
    procedure rDEdLaengebChange(Sender: TObject);
    procedure rDEdLaengecChange(Sender: TObject);
    procedure aDBtLoeschenClick(Sender: TObject);
    procedure WBtLoeschenClick(Sender: TObject);
    procedure WEdKantenChange(Sender: TObject);
    procedure WEdDiagonaleChange(Sender: TObject);
    procedure WEdGesamtkantenChange(Sender: TObject);
    procedure QuBtLoeschenClick(Sender: TObject);
    procedure KuBtLoeschenClick(Sender: TObject);
    procedure KuEdRadiusChange(Sender: TObject);
    procedure KuEdDurchmesserChange(Sender: TObject);
    procedure ZBtLoeschenClick(Sender: TObject);
    procedure ZEdRadiusChange(Sender: TObject);
    procedure ZEdUmfangChange(Sender: TObject);
    procedure aDEdAlphaChange(Sender: TObject);
    procedure aDEdBetaChange(Sender: TObject);
    procedure aDEdGammaChange(Sender: TObject);
    procedure aDEdLaengeaChange(Sender: TObject);
    procedure aDEdLaengebChange(Sender: TObject);
    procedure aDEdLaengecChange(Sender: TObject);
    procedure KeBtLoeschenClick(Sender: TObject);
    procedure KeEdRadiusChange(Sender: TObject);
    procedure KeEdHoeheChange(Sender: TObject);
    procedure KeEdUmfangChange(Sender: TObject);
    procedure KeEdMantellinieChange(Sender: TObject);
    procedure PBtLoeschenClick(Sender: TObject);
    procedure PEdHoeheChange(Sender: TObject);
    procedure PEdSeitenkanteChange(Sender: TObject);
    procedure TEdKantenlaengeChange(Sender: TObject);
    procedure TEdHoeheChange(Sender: TObject);
    procedure TBtLoeschenClick(Sender: TObject);
    procedure allgLoeschen(Sender: TObject);

  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

uses UnitInfobox;

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  PageControlFlaechen.Visible := False;
  PageControlKoerper.Visible := False;
  Startseite1.Enabled := False;
  Form1.Color := clWhite;
  Form1.allgLoeschen(Sender);
end;

procedure TForm1.allgLoeschen(Sender: TObject);
begin
  Form1.QBtLoeschenClick(Sender);
  Form1.RBtLoeschenClick(Sender);
  Form1.KBtLoeschenClick(Sender);
  Form1.rDBtLoeschenClick(Sender);
  Form1.aDBtLoeschenClick(Sender);
  Form1.WBtLoeschenClick(Sender);
  Form1.QuBtLoeschenClick(Sender);
  Form1.KuBtLoeschenClick(Sender);
  Form1.ZBtLoeschenClick(Sender);
  Form1.KeBtLoeschenClick(Sender);
  Form1.PBtLoeschenClick(Sender);
  Form1.TBtLoeschenClick(Sender);
end;

(*-----------------------------------Menü-----------------------------------*)

procedure TForm1.Flchen1Click(Sender: TObject);
begin
  Startseite1.Enabled := True;
  Form1.Color := clBtnFace;
  PageControlFlaechen.TabIndex := 0;
  PageControlFlaechen.Visible := True;
  PageControlKoerper.Visible := False;
  Form1.allgLoeschen(Sender);
end;

procedure TForm1.Krper1Click(Sender: TObject);
begin
  Startseite1.Enabled := True;
  Form1.Color := clBtnFace;
  PageControlKoerper.TabIndex := 0;
  PageControlKoerper.Visible := True;
  PageControlFlaechen.Visible := False;
  Form1.allgLoeschen(Sender);
end;

procedure TForm1.Hilfe2Click(Sender: TObject);
begin
  ShellExecute(handle, 'open', PChar('HELP.html'), nil, nil, SW_SHOW);
end;

procedure TForm1.Info1Click(Sender: TObject);
begin
Form2.ShowModal; {Infobox öffnen}
end;



(*----------------------------------Farben----------------------------------*)

procedure TForm1.Rot1Click(Sender: TObject);
begin
   Rot1.Checked := true;
   Grn1.Checked := false;
   Blau1.Checked := false;
   Gelb1.Checked := false;
   Wei1.Checked := false;
    QBild.Brush.Color := clRed;
      QLbA.Color := clRed;
    RBild.Brush.Color := clRed;
      RLbA.Color := clRed;
    KBild.Brush.Color := clRed;
      KLbR.Color := clRed;
    rDBildColor.Brush.Color := clRed;
      rDLbA.Color := clRed;
    aDBildColor.Brush.Color := clRed;
      aDLbA.Color := clRed;
    WBildColor.Brush.Color := clRed;
      WLba2.Color := clRed;
      WLbV.Color := clRed;
    QuBildColor.Brush.Color := clRed;
      QuLbb1.Color := clRed;
      QuLbV.Color := clRed;
    KuBildColor.Brush.Color := clRed;
      KuLbR.Color := clRed;
    ZBild1.Brush.Color := clRed;
    ZBild2.Brush.Color := clRed;
    ZBild3.Brush.Color := clRed;
      ZLbR.Color := clRed;
    KeBildColor.Brush.Color := clRed;
      KeLbH.Color := clRed;
    PBildColor.Brush.Color := clRed;
      PLbH.Color := clRed;
    TBildColor.Brush.Color := clRed;
      TLbH.Color := clRed;
end;

procedure TForm1.Grn1Click(Sender: TObject);
begin
   Rot1.Checked := false;
   Grn1.Checked := true;
   Blau1.Checked := false;
   Gelb1.Checked := false;
   Wei1.Checked := false;
    QBild.Brush.Color := clLime;
      QLbA.Color := clLime;
    RBild.Brush.Color := clLime;
      RLbA.Color := clLime;
    KBild.Brush.Color := clLime;
      KLbR.Color := clLime;
    rDBildColor.Brush.Color := clLime;
      rDLbA.Color := clLime;
    aDBildColor.Brush.Color := clLime;
      aDLbA.Color := clLime;
    WBildColor.Brush.Color := clLime;
      WLba2.Color := clLime;
      WLbV.Color := clLime;
    QuBildColor.Brush.Color := clLime;
      QuLbb1.Color := clLime;
      QuLbV.Color := clLime;
    KuBildColor.Brush.Color := clLime;
      KuLbR.Color := clLime;
    ZBild1.Brush.Color := clLime;
    ZBild2.Brush.Color := clLime;
    ZBild3.Brush.Color := clLime;
      ZLbR.Color := clLime;
    KeBildColor.Brush.Color := clLime;
      KeLbH.Color := clLime;
    PBildColor.Brush.Color := clLime;
      PLbH.Color := clLime;
    TBildColor.Brush.Color := clLime;
      TLbH.Color := clLime;
end;

procedure TForm1.Blau1Click(Sender: TObject);
begin
   Rot1.Checked := false;
   Grn1.Checked := false;
   Blau1.Checked := true;
   Gelb1.Checked := false;
   Wei1.Checked := false;
    QBild.Brush.Color := clBlue;
      QLbA.Color := clBlue;
    RBild.Brush.Color := clBlue;
      RLbA.Color := clBlue;
    KBild.Brush.Color := clBlue;
      KLbR.Color := clBlue;
    rDBildColor.Brush.Color := clBlue;
      rDLbA.Color := clBlue;
    aDBildColor.Brush.Color := clBlue;
      aDLbA.Color := clBlue;
    WBildColor.Brush.Color := clBlue;
      WLba2.Color := clBlue;
      WLbV.Color := clBlue;
    QuBildColor.Brush.Color := clBlue;
      QuLbb1.Color := clBlue;
      QuLbV.Color := clBlue;
    KuBildColor.Brush.Color := clBlue;
      KuLbR.Color := clBlue;
    ZBild1.Brush.Color := clBlue;
    ZBild2.Brush.Color := clBlue;
    ZBild3.Brush.Color := clBlue;
      ZLbR.Color := clBlue;
    KeBildColor.Brush.Color := clBlue;
      KeLbH.Color := clBlue;
    PBildColor.Brush.Color := clBlue;
      PLbH.Color := clBlue;
    TBildColor.Brush.Color := clBlue;
      TLbH.Color := clBlue;
end;

procedure TForm1.Gelb1Click(Sender: TObject);
begin
   Rot1.Checked := false;
   Grn1.Checked := false;
   Blau1.Checked := false;
   Gelb1.Checked := true;
   Wei1.Checked := false;
    QBild.Brush.Color := clYellow;
      QLbA.Color := clYellow;
    RBild.Brush.Color := clYellow;
      RLbA.Color := clYellow;
    KBild.Brush.Color := clYellow;
      KLbR.Color := clYellow;
    rDBildColor.Brush.Color := clYellow;
      rDLbA.Color := clYellow;
    aDBildColor.Brush.Color := clYellow;
      aDLbA.Color := clYellow;
    WBildColor.Brush.Color := clYellow;
      WLba2.Color := clYellow;
      WLbV.Color := clYellow;
    QuBildColor.Brush.Color := clYellow;
      QuLbb1.Color := clYellow;
      QuLbV.Color := clYellow;
    KuBildColor.Brush.Color := clYellow;
      KuLbR.Color := clYellow;
    ZBild1.Brush.Color := clYellow;
    ZBild2.Brush.Color := clYellow;
    ZBild3.Brush.Color := clYellow;
      ZLbR.Color := clYellow;
    KeBildColor.Brush.Color := clYellow;
      KeLbH.Color := clYellow;
    PBildColor.Brush.Color := clYellow;
      PLbH.Color := clYellow;
    TBildColor.Brush.Color := clYellow;
      TLbH.Color := clYellow;
end;

procedure TForm1.Wei1Click(Sender: TObject);
begin
   Rot1.Checked := false;
   Grn1.Checked := false;
   Blau1.Checked := false;
   Gelb1.Checked := false;
   Wei1.Checked := true;
    QBild.Brush.Color := clWhite;
      QLbA.Color := clWhite;
    RBild.Brush.Color := clWhite;
      RLbA.Color := clWhite;
    KBild.Brush.Color := clWhite;
      KLbR.Color := clWhite;
    rDBildColor.Brush.Color := clWhite;
      rDLbA.Color := clWhite;
    aDBildColor.Brush.Color := clWhite;
      aDLbA.Color := clWhite;
    WBildColor.Brush.Color := clWhite;
      WLba2.Color := clWhite;
      WLbV.Color := clWhite;
    QuBildColor.Brush.Color := clWhite;
      QuLbb1.Color := clWhite;
      QuLbV.Color := clWhite;
    KuBildColor.Brush.Color := clWhite;
      KuLbR.Color := clWhite;
    ZBild1.Brush.Color := clWhite;
    ZBild2.Brush.Color := clWhite;
    ZBild3.Brush.Color := clWhite;
      ZLbR.Color := clWhite;
    KeBildColor.Brush.Color := clWhite;
      KeLbH.Color := clWhite;
    PBildColor.Brush.Color := clWhite;
      PLbH.Color := clWhite;
    TBildColor.Brush.Color := clWhite;
      TLbH.Color := clWhite;
end;

(*----------------------------Edit-Einstellungen----------------------------*)

procedure TForm1.OnlyNumbers(Sender: TObject; var Key: Char);
begin
  if not (key in [#48..#57, #8, #44]) then key := #0;
  if (key = ',') then
     if pos(',', TEdit(Sender).Text) > 0 then
     begin
       key := #0; exit;
     end;
end;

procedure TForm1.EditClear(Sender: TObject);
begin
  if TEdit(Sender).ReadOnly = false then
    if TEdit(Sender).Text = '0' then
      TEdit(Sender).Text := '';
end;

(*----------------------------------Flächen----------------------------------*)

(*_____Quadrat_____*)
procedure TForm1.QBtRechnenClick(Sender: TObject);
var a,u,Area :real;
begin
  if QEdLaenge.Text > '0' then
    begin
    a := StrToFloat(QEdLaenge.Text);
    u := 4*a;
    Area := a*a;
    QEdUmfang.Text := FloatToStr(u);
    QEdFlaeche.Text := FloatToStr(Area);
    end else

  if QEdUmfang.Text > '0' then
    begin
    u := StrToFloat(QEdUmfang.Text);
    a := u/4;
    Area := a*a;
    QEdLaenge.Text := FloatToStr(a);
    QEdFlaeche.Text := FloatToStr(Area);
    end else

  if QEdFlaeche.Text > '0' then
    begin
    area := StrToFloat(QEdFlaeche.Text);
    a := sqrt(area);
    u := 4*a;
    QEdLaenge.Text := FloatToStr(a);
    QEdUmfang.Text := FloatToStr(u);
    end;
  QEdLaenge.ReadOnly := true;
  QEdUmfang.ReadOnly := true;
  QEdFlaeche.ReadOnly := true;
  QBtRechnen.Enabled := false;
end;

procedure TForm1.QBtLoeschenClick(Sender: TObject);
begin
QEdLaenge.Text := '0';
QEdUmfang.Text := '0';
QEdFlaeche.Text := '0';
QEdLaenge.ReadOnly := false;
QEdUmfang.ReadOnly := false;
QEdFlaeche.ReadOnly := false;
QBtRechnen.Enabled := true;
end;

procedure TForm1.QEdLaengeChange(Sender: TObject);
begin
if QEdLaenge.Text > '0' then
  begin
  QEdUmfang.ReadOnly := true;
  QEdFlaeche.ReadOnly := true;
  end else
  begin
  QEdUmfang.ReadOnly := false;
  QEdFlaeche.ReadOnly := false;
  end;
end;

procedure TForm1.QEdUmfangChange(Sender: TObject);
begin
if QEdUmfang.Text > '0' then
  begin
  QEdLaenge.ReadOnly := true;
  QEdFlaeche.ReadOnly := true;
  end else
  begin
  QEdLaenge.ReadOnly := false;
  QEdFlaeche.ReadOnly := false;
  end;
end;

procedure TForm1.QEdFlaecheChange(Sender: TObject);
begin
if QEdFlaeche.Text > '0' then
  begin
  QEdLaenge.ReadOnly := true;
  QEdUmfang.ReadOnly := true;
  end else
  begin
  QEdLaenge.ReadOnly := false;
  QEdUmfang.ReadOnly := false;
  end
end;

(*_____Rechteck_____*)
procedure TForm1.RBtRechnenClick(Sender: TObject);
var a,b,u,Area :real;
begin
  if REdLaengea.Text > '0' then
   if REdLaengeb.Text > '0' then
    begin
    a := StrToFloat(REdLaengea.Text);
    b := StrToFloat(REdLaengeb.Text);
    u := 2*a+2*b;
    Area := a*b;
    REdUmfang.Text := FloatToStr(u);
    REdFlaeche.Text := FloatToStr(Area);

  REdLaengea.ReadOnly := true;
  REdLaengeb.ReadOnly := true;
  REdUmfang.ReadOnly := true;
  REdFlaeche.ReadOnly := true;
  RBtRechnen.Enabled := false;
  end;
end;

procedure TForm1.RBtLoeschenClick(Sender: TObject);
begin
REdLaengea.Text := '0';
REdLaengeb.Text := '0';
REdUmfang.Text := '0';
REdFlaeche.Text := '0';
REdLaengea.ReadOnly := false;
REdLaengeb.ReadOnly := false;
RBtRechnen.Enabled := true;
end;

(*_____Kreis_____*)
procedure TForm1.KBtRechnenClick(Sender: TObject);
var r,d,u,Area :real;
begin
  if KEdRadius.Text > '0' then
    begin
    r := StrToFloat(KEdRadius.Text);
    d := 2*r;
    u := pi*d;
    Area := pi*r*r;
    KEdDurchmesser.Text := FloatToStrF (d,ffFixed,10,2);
    KEdUmfang.Text := FloatToStrF(u,ffFixed,10,3);
    KEdFlaeche.Text := FloatToStrF(Area,ffFixed,10,2);
    end else

  if KEdDurchmesser.Text > '0' then
    begin
    d := StrToFloat(KEdDurchmesser.Text);
    r := d/2;
    u := pi*d;
    Area := pi*r*r;
    KEdRadius.Text := FloatToStrF (r,ffFixed,10,2);
    KEdUmfang.Text := FloatToStrF(u,ffFixed,10,3);
    KEdFlaeche.Text := FloatToStrF(Area,ffFixed,10,2);
    end else

  if KEdUmfang.Text > '0' then
    begin
    u := StrToFloat(KEdUmfang.Text);
    r := u/(2*pi);
    d := 2*r;
    Area := pi*r*r;
    KEdRadius.Text := FloatToStrF (r,ffFixed,10,2);
    KEdDurchmesser.Text := FloatToStrF(d,ffFixed,10,2);
    KEdFlaeche.Text := FloatToStrF(Area,ffFixed,10,2);
    end;
  KEdRadius.ReadOnly := true;
  KEdDurchmesser.ReadOnly := true;
  KEdUmfang.ReadOnly := true;
  KEdFlaeche.ReadOnly := true;
  KBtRechnen.Enabled := false;
end;

procedure TForm1.KBtLoeschenClick(Sender: TObject);
begin
KEdRadius.Text := '0';
KEdDurchmesser.Text := '0';
KEdUmfang.Text := '0';
KEdFlaeche.Text := '0';
KEdRadius.ReadOnly := false;
KEdDurchmesser.ReadOnly := false;
KEdUmfang.ReadOnly := false;
KBtRechnen.Enabled := true;
end;

procedure TForm1.KEdRadiusChange(Sender: TObject);
begin
if KEdRadius.Text > '0' then
  begin
  KEdDurchmesser.ReadOnly := true;
  KEdUmfang.ReadOnly := true;
  end else
  begin
  KEdDurchmesser.ReadOnly := false;
  KEdUmfang.ReadOnly := false;
  end
end;

procedure TForm1.KEdDurchmesserChange(Sender: TObject);
begin
if KEdDurchmesser.Text > '0' then
  begin
  KEdRadius.ReadOnly := true;
  KEdUmfang.ReadOnly := true;
  end else
  begin
  KEdRadius.ReadOnly := false;
  KEdUmfang.ReadOnly := false;
  end
end;

procedure TForm1.KEdUmfangChange(Sender: TObject);
begin
if KEdUmfang.Text > '0' then
  begin
  KEdRadius.ReadOnly := true;
  KEdDurchmesser.ReadOnly := true;
  end else
  begin
  KEdRadius.ReadOnly := false;
  KEdDurchmesser.ReadOnly := false;
  end
end;

(*_____rechtwinkliges Dreieck_____*)
procedure TForm1.rDBtRechnenClick(Sender: TObject);
var alpha,beta,a,b,c,u,Area :real;
    h,q,p :real;
begin
  if rDEdAlpha.Text > '0' then
    begin
    if rDEdLaengea.Text > '0' then
      begin
      alpha := StrToFloat(rDEdAlpha.Text);
      a := StrToFloat(rDEdLaengea.Text);
      beta := 90-alpha;
      b := a/Tan(DegtoRad(alpha));
      c := sqrt(a*a+b*b);
      u := a+b+c;
          q := a*a/c;
          p := c-q;
          h := sqrt(p*q);
      Area := (c*h)/2;
      rDEdAlpha.Text := FloatToStr(alpha)+ '°';
      rDEdBeta.Text := FloatToStr(beta)+ '°';
      rDEdLaengeb.Text := FloatToStrF(b,ffFixed,10,3);
      rDEdLaengec.Text := FloatToStrF(c,ffFixed,10,3);
      rDEdUmfang.Text := FloatToStrF(u,ffFixed,10,3);
      rDEdFlaeche.Text := FloatToStrF(Area,ffFixed,10,2);
      end else

    if rDEdLaengeb.Text > '0' then
      begin
      alpha := StrToFloat(rDEdAlpha.Text);
      b := StrToFloat(rDEdLaengeb.Text);
      beta := 90-alpha;
      a := b*Tan(DegtoRad(alpha));
      c := sqrt(a*a+b*b);
      u := a+b+c;
          q := a*a/c;
          p := c-q;
          h := sqrt(p*q);
      Area := (c*h)/2;
      rDEdAlpha.Text := FloatToStr(alpha)+ '°';
      rDEdBeta.Text := FloatToStr(beta)+ '°';
      rDEdLaengea.Text := FloatToStrF(a,ffFixed,10,3);
      rDEdLaengec.Text := FloatToStrF(c,ffFixed,10,3);
      rDEdUmfang.Text := FloatToStrF(u,ffFixed,10,3);
      rDEdFlaeche.Text := FloatToStrF(Area,ffFixed,10,2);
      end else

    if rDEdLaengec.Text > '0' then
      begin
      alpha := StrToFloat(rDEdAlpha.Text);
      c := StrToFloat(rDEdLaengec.Text);
      beta := 90-alpha;
      a := c*Cos(DegtoRad(beta));
      b := sqrt(c*c-a*a);
      u := a+b+c;
          q := a*a/c;
          p := c-q;
          h := sqrt(p*q);
      Area := (c*h)/2;
      rDEdAlpha.Text := FloatToStr(alpha)+ '°';
      rDEdBeta.Text := FloatToStr(beta)+ '°';
      rDEdLaengea.Text := FloatToStrF(a,ffFixed,10,3);
      rDEdLaengeb.Text := FloatToStrF(b,ffFixed,10,3);
      rDEdUmfang.Text := FloatToStrF(u,ffFixed,10,3);
      rDEdFlaeche.Text := FloatToStrF(Area,ffFixed,10,2);
      end
    end else

  if rDEdBeta.Text > '0' then
    begin
    if rDEdLaengea.Text > '0' then
      begin
      beta := StrToFloat(rDEdBeta.Text);
      a := StrToFloat(rDEdLaengea.Text);
      alpha := 90-beta;
      b := a/Tan(DegtoRad(alpha));
      c := sqrt(a*a+b*b);
      u := a+b+c;
          q := a*a/c;
          p := c-q;
          h := sqrt(p*q);
      Area := (c*h)/2;
      rDEdAlpha.Text := FloatToStr(alpha)+ '°';
      rDEdBeta.Text := FloatToStr(beta)+ '°';
      rDEdLaengeb.Text := FloatToStrF(b,ffFixed,10,3);
      rDEdLaengec.Text := FloatToStrF(c,ffFixed,10,3);
      rDEdUmfang.Text := FloatToStrF(u,ffFixed,10,3);
      rDEdFlaeche.Text := FloatToStrF(Area,ffFixed,10,2);
      end else

      if rDEdLaengeb.Text > '0' then
      begin
      beta := StrToFloat(rDEdBeta.Text);
      b := StrToFloat(rDEdLaengeb.Text);
      alpha:= 90-beta;
      a := b*Tan(DegtoRad(alpha));
      c := sqrt(a*a+b*b);
      u := a+b+c;
          q := a*a/c;
          p := c-q;
          h := sqrt(p*q);
      Area := (c*h)/2;
      rDEdAlpha.Text := FloatToStr(alpha)+ '°';
      rDEdBeta.Text := FloatToStr(beta)+ '°';
      rDEdLaengea.Text := FloatToStrF(a,ffFixed,10,3);
      rDEdLaengec.Text := FloatToStrF(c,ffFixed,10,3);
      rDEdUmfang.Text := FloatToStrF(u,ffFixed,10,3);
      rDEdFlaeche.Text := FloatToStrF(Area,ffFixed,10,2);
      end else

    if rDEdLaengec.Text > '0' then
      begin
      beta := StrToFloat(rDEdBeta.Text);
      c := StrToFloat(rDEdLaengec.Text);
      alpha := 90-beta;
      a := c*Cos(DegtoRad(beta));
      b := sqrt(c*c-a*a);
      u := a+b+c;
          q := a*a/c;
          p := c-q;
          h := sqrt(p*q);
      Area := (c*h)/2;
      rDEdAlpha.Text := FloatToStr(alpha)+ '°';
      rDEdBeta.Text := FloatToStr(beta)+ '°';
      rDEdLaengea.Text := FloatToStrF(a,ffFixed,10,3);
      rDEdLaengeb.Text := FloatToStrF(b,ffFixed,10,3);
      rDEdUmfang.Text := FloatToStrF(u,ffFixed,10,3);
      rDEdFlaeche.Text := FloatToStrF(Area,ffFixed,10,2);
      end
    end;
  rDEdAlpha.ReadOnly := true;
  rDEdBeta.ReadOnly := true;
  rDEdLaengea.ReadOnly := true;
  rDEdLaengeb.ReadOnly := true;
  rDEdLaengec.ReadOnly := true;
  rDBtRechnen.Enabled := false;
end;

procedure TForm1.rDBtLoeschenClick(Sender: TObject);
begin
rDEdAlpha.Text := '0';
rDEdBeta.Text := '0';
rDEdLaengea.Text := '0';
rDEdLaengeb.Text := '0';
rDEdLaengec.Text := '0';
rDEdUmfang.Text := '0';
rDEdFlaeche.Text := '0';
rDEdAlpha.ReadOnly := false;
rDEdBeta.ReadOnly := false;
rDEdLaengea.ReadOnly := false;
rDEdLaengeb.ReadOnly := false;
rDEdLaengec.ReadOnly := false;
rDBtRechnen.Enabled := true;
end;

procedure TForm1.rDEdAlphaChange(Sender: TObject);
begin
if rDEdAlpha.Text > '0' then
  rDEdBeta.ReadOnly := true else
  rDEdBeta.ReadOnly := false;
end;

procedure TForm1.rDEdBetaChange(Sender: TObject);
begin
if rDEdBeta.Text > '0' then
  rDEdAlpha.ReadOnly := true else
  rDEdAlpha.ReadOnly := false;
end;

procedure TForm1.rDEdLaengeaChange(Sender: TObject);
begin
if rDEdLaengea.Text > '0' then
  begin
  rDEdLaengeb.ReadOnly := true;
  rDEdLaengec.ReadOnly := true;
  end else
  begin
  rDEdLaengeb.ReadOnly := false;
  rDEdLaengec.ReadOnly := false;
  end
end;

procedure TForm1.rDEdLaengebChange(Sender: TObject);
begin
if rDEdLaengeb.Text > '0' then
  begin
  rDEdLaengea.ReadOnly := true;
  rDEdLaengec.ReadOnly := true;
  end else
  begin
  rDEdLaengea.ReadOnly := false;
  rDEdLaengec.ReadOnly := false;
  end
end;

procedure TForm1.rDEdLaengecChange(Sender: TObject);
begin
if rDEdLaengec.Text > '0' then
  begin
  rDEdLaengea.ReadOnly := true;
  rDEdLaengeb.ReadOnly := true;
  end else
  begin
  rDEdLaengea.ReadOnly := false;
  rDEdLaengeb.ReadOnly := false;
  end
end;

(*_____allgemeines Dreieck_____*)
procedure TForm1.aDBtRechnenClick(Sender: TObject);
var alpha,beta,gamma,a,b,c,u,Area :real;
    alpha2,beta2,gamma2,a2,b2,c2,u2,Area2 :real;
    s,s2 :real;
begin
  if aDEdLaengea.Text > '0' then
    begin
    if aDEdAlpha.Text > '0' then
      begin
      if aDEdBeta.Text > '0' then
        begin
        alpha := StrToFloat(aDEdAlpha.Text);
        beta := StrToFloat(aDEdBeta.Text);
        a := StrToFloat(aDEdLaengea.Text);
        gamma := 180-alpha-beta;
        b := a*Sin(DegtoRad(beta))/Sin(DegtoRad(alpha));
        c := sqrt(a*a + b*b - 2*a*b*cos(DegtoRad(gamma)));
        u := a+b+c;
            s := u/2;
        Area := sqrt(s*(s-a)*(s-b)*(s-c));
        aDEdAlpha.Text := FloatToStrF(alpha,ffFixed,10,2)+ '°';
        aDEdBeta.Text := FloatToStrF(beta,ffFixed,10,2)+ '°';
        aDEdGamma.Text := FloatToStrF(gamma,ffFixed,10,2)+ '°';
        aDEdLaengeb.Text := FloatToStrF(b,ffFixed,10,3);
        aDEdLaengec.Text := FloatToStrF(c,ffFixed,10,3);
        aDEdUmfang.Text := FloatToStrF(u,ffFixed,10,3);
        aDEdFlaeche.Text := FloatToStrF(Area,ffFixed,10,2);
        end else

      if aDEdGamma.Text > '0' then
        begin
        alpha := StrToFloat(aDEdAlpha.Text);
        gamma := StrToFloat(aDEdGamma.Text);
        a := StrToFloat(aDEdLaengea.Text);
        beta := 180-alpha-gamma;
        b := a*Sin(DegtoRad(beta))/Sin(DegtoRad(alpha));
        c := sqrt(a*a + b*b - 2*a*b*cos(DegtoRad(gamma)));
        u := a+b+c;
            s := u/2;
        Area := sqrt(s*(s-a)*(s-b)*(s-c));
        aDEdAlpha.Text := FloatToStrF(alpha,ffFixed,10,2)+ '°';
        aDEdBeta.Text := FloatToStrF(beta,ffFixed,10,2)+ '°';
        aDEdGamma.Text := FloatToStrF(gamma,ffFixed,10,2)+ '°';
        aDEdLaengeb.Text := FloatToStrF(b,ffFixed,10,3);
        aDEdLaengec.Text := FloatToStrF(c,ffFixed,10,3);
        aDEdUmfang.Text := FloatToStrF(u,ffFixed,10,3);
        aDEdFlaeche.Text := FloatToStrF(Area,ffFixed,10,2);
        end else

      if aDEdLaengeb.Text > '0' then
        begin
        try
          alpha := StrToFloat(aDEdAlpha.Text);
          a := StrToFloat(aDEdLaengea.Text);
          b := StrToFloat(aDEdLaengeb.Text);
          beta := RadtoDeg(arcsin(sin(DegtoRad(alpha))*b/a));              // !!
          gamma := 180-alpha-beta;
          c := sqrt(a*a + b*b - 2*a*b*cos(DegtoRad(gamma)));
          u := a+b+c;
              s := u/2;
          Area := sqrt(s*(s-a)*(s-b)*(s-c));
            beta2 := 90+(90-beta);
            if beta2 > beta then
              begin
              ShowMessage('Dreieck mehrdeutig, 2 Lösungen vorhanden.');
              gamma2 := 180-alpha-beta2;
              c2 := sqrt(a*a + b*b - 2*a*b*cos(DegtoRad(gamma2)));
              u2 := a+b+c2;
              s2 := u2/2;
              Area2 := sqrt(s2*(s2-a)*(s2-b)*(s2-c2));
              aDEdAlpha2.Text := FloatToStrF(alpha,ffFixed,10,2)+ '°';
              aDEdBeta2.Text := FloatToStrF(beta2,ffFixed,10,2)+ '°';
              aDEdGamma2.Text := FloatToStrF(gamma2,ffFixed,10,2)+ '°';
              aDEdLaengea2.Text := FloatToStr(a);
              aDEdLaengeb2.Text := FloatToStr(b);
              aDEdLaengec2.Text := FloatToStrF(c2,ffFixed,10,3);
              aDEdUmfang2.Text := FloatToStrF(u2,ffFixed,10,3);
              aDEdFlaeche2.Text := FloatToStrF(Area2,ffFixed,10,2);
              aDEdAlpha.Width := 85;
              aDEdBeta.Width := 85;
              aDEdGamma.Width := 85;
              aDEdLaengea.Width := 85;
              aDEdLaengeb.Width := 85;
              aDEdLaengec.Width := 85;
              aDEdUmfang.Width := 85;
              aDEdFlaeche.Width := 85;
              aDEdAlpha2.Visible := true;
              aDEdBeta2.Visible := true;
              aDEdGamma2.Visible := true;
              aDEdLaengea2.Visible := true;
              aDEdLaengeb2.Visible := true;
              aDEdLaengec2.Visible := true;
              aDEdUmfang2.Visible := true;
              aDEdFlaeche2.Visible := true;
              aDLbDreieck1.Visible := true;
              aDLbDreieck2.Visible := true;
              end;
          aDEdAlpha.Text := FloatToStrF(alpha,ffFixed,10,2)+ '°';
          aDEdBeta.Text := FloatToStrF(beta,ffFixed,10,2)+ '°';
          aDEdGamma.Text := FloatToStrF(gamma,ffFixed,10,2)+ '°';
          aDEdLaengec.Text := FloatToStrF(c,ffFixed,10,3);
          aDEdUmfang.Text := FloatToStrF(u,ffFixed,10,3);
          aDEdFlaeche.Text := FloatToStrF(Area,ffFixed,10,2);
        except
          on EInvalidOp
            do begin MessageDlg('Dreieck nicht lösbar!', mtWarning, [mbOK], 0);
            aDEdAlpha.Text := '';
            aDEdBeta.Text := ' Error!';
            aDEdGamma.Text := '';
            aDEdLaengea.Text := '';
            aDEdLaengeb.Text := '';
            aDEdLaengec.Text := '';
            aDEdUmfang.Text := '';
            aDEdFlaeche.Text := '';
            end
        end;
        end else

      if aDEdLaengec.Text > '0' then
        begin
        try
          alpha := StrToFloat(aDEdAlpha.Text);
          a := StrToFloat(aDEdLaengea.Text);
          c := StrToFloat(aDEdLaengec.Text);
          gamma := RadtoDeg(arcsin(sin(DegtoRad(alpha))*c/a));             // !!
          beta := 180-alpha-gamma;
          b := sqrt(a*a + c*c - 2*a*c*cos(DegtoRad(beta)));
          u := a+b+c;
              s := u/2;
          Area := sqrt(s*(s-a)*(s-b)*(s-c));
          gamma2 := 90+(90-gamma);
            if gamma2 > gamma then
              begin
              ShowMessage('Dreieck mehrdeutig, 2 Lösungen vorhanden.');
              beta2 := 180-alpha-gamma2;
              b2 := sqrt(a*a + c*c - 2*a*c*cos(DegtoRad(beta2)));
              u2 := a+b2+c;
              s2 := u2/2;
              Area2 := sqrt(s2*(s2-a)*(s2-b2)*(s2-c));
              aDEdAlpha2.Text := FloatToStrF(alpha,ffFixed,10,2)+ '°';
              aDEdBeta2.Text := FloatToStrF(beta2,ffFixed,10,2)+ '°';
              aDEdGamma2.Text := FloatToStrF(gamma2,ffFixed,10,2)+ '°';
              aDEdLaengea2.Text := FloatToStr(a);
              aDEdLaengeb2.Text := FloatToStrF(b2,ffFixed,10,3);
              aDEdLaengec2.Text := FloatToStr(c);
              aDEdUmfang2.Text := FloatToStrF(u2,ffFixed,10,3);
              aDEdFlaeche2.Text := FloatToStrF(Area2,ffFixed,10,2);
              aDEdAlpha.Width := 85;
              aDEdBeta.Width := 85;
              aDEdGamma.Width := 85;
              aDEdLaengea.Width := 85;
              aDEdLaengeb.Width := 85;
              aDEdLaengec.Width := 85;
              aDEdUmfang.Width := 85;
              aDEdFlaeche.Width := 85;
              aDEdAlpha2.Visible := true;
              aDEdBeta2.Visible := true;
              aDEdGamma2.Visible := true;
              aDEdLaengea2.Visible := true;
              aDEdLaengeb2.Visible := true;
              aDEdLaengec2.Visible := true;
              aDEdUmfang2.Visible := true;
              aDEdFlaeche2.Visible := true;
              aDLbDreieck1.Visible := true;
              aDLbDreieck2.Visible := true;
              end;
          aDEdAlpha.Text := FloatToStrF(alpha,ffFixed,10,2)+ '°';
          aDEdBeta.Text := FloatToStrF(beta,ffFixed,10,2)+ '°';
          aDEdGamma.Text := FloatToStrF(gamma,ffFixed,10,2)+ '°';
          aDEdLaengeb.Text := FloatToStrF(b,ffFixed,10,3);
          aDEdUmfang.Text := FloatToStrF(u,ffFixed,10,3);
          aDEdFlaeche.Text := FloatToStrF(Area,ffFixed,10,2);
        except
          on EInvalidOp
            do begin MessageDlg('Dreieck nicht lösbar!', mtWarning, [mbOK], 0);
            aDEdAlpha.Text := '';
            aDEdBeta.Text := '';
            aDEdGamma.Text := ' Error!';
            aDEdLaengea.Text := '';
            aDEdLaengeb.Text := '';
            aDEdLaengec.Text := '';
            aDEdUmfang.Text := '';
            aDEdFlaeche.Text := '';
            end
        end;
        end
      end else

    if aDEdBeta.Text > '0' then
      begin
      if aDEdGamma.Text > '0' then
        begin
        beta := StrToFloat(aDEdBeta.Text);
        gamma := StrToFloat(aDEdGamma.Text);
        a := StrToFloat(aDEdLaengea.Text);
        alpha := 180-beta-gamma;
        b := a*sin(DegtoRad(beta))/sin(DegtoRad(alpha));
        c := sqrt(a*a + b*b - 2*a*b*cos(DegtoRad(gamma)));
        u := a+b+c;
            s := u/2;
        Area := sqrt(s*(s-a)*(s-b)*(s-c));
        aDEdAlpha.Text := FloatToStrF(alpha,ffFixed,10,2)+ '°';
        aDEdBeta.Text := FloatToStrF(beta,ffFixed,10,2)+ '°';
        aDEdGamma.Text := FloatToStrF(gamma,ffFixed,10,2)+ '°';
        aDEdLaengeb.Text := FloatToStrF(b,ffFixed,10,3);
        aDEdLaengec.Text := FloatToStrF(c,ffFixed,10,3);
        aDEdUmfang.Text := FloatToStrF(u,ffFixed,10,3);
        aDEdFlaeche.Text := FloatToStrF(Area,ffFixed,10,2);
        end else

      if aDEdLaengeb.Text > '0' then
        begin
        try
          beta := StrToFloat(aDEdBeta.Text);
          a := StrToFloat(aDEdLaengea.Text);
          b := StrToFloat(aDEdLaengeb.Text);
          alpha := RadtoDeg(arcsin(sin(DegtoRad(beta))*a/b));              // !!
          gamma := 180-alpha-beta;
          c := sqrt(a*a + b*b - 2*a*b*cos(DegtoRad(gamma)));
          u := a+b+c;
              s := u/2;
          Area := sqrt(s*(s-a)*(s-b)*(s-c));
          alpha2 := 90+(90-alpha);
            if alpha2 > alpha then
              begin
              ShowMessage('Dreieck mehrdeutig, 2 Lösungen vorhanden.');
              gamma2 := 180-alpha2-beta;
              c2 := sqrt(a*a + b*b - 2*a*b*cos(DegtoRad(gamma2)));
              u2 := a+b+c2;
              s2 := u2/2;
              Area2 := sqrt(s2*(s2-a)*(s2-b)*(s2-c2));
              aDEdAlpha2.Text := FloatToStrF(alpha2,ffFixed,10,2)+ '°';
              aDEdBeta2.Text := FloatToStrF(beta,ffFixed,10,2)+ '°';
              aDEdGamma2.Text := FloatToStrF(gamma2,ffFixed,10,2)+ '°';
              aDEdLaengea2.Text := FloatToStr(a);
              aDEdLaengeb2.Text := FloatToStr(b);
              aDEdLaengec2.Text := FloatToStrF(c2,ffFixed,10,3);
              aDEdUmfang2.Text := FloatToStrF(u2,ffFixed,10,3);
              aDEdFlaeche2.Text := FloatToStrF(Area2,ffFixed,10,2);
              aDEdAlpha.Width := 85;
              aDEdBeta.Width := 85;
              aDEdGamma.Width := 85;
              aDEdLaengea.Width := 85;
              aDEdLaengeb.Width := 85;
              aDEdLaengec.Width := 85;
              aDEdUmfang.Width := 85;
              aDEdFlaeche.Width := 85;
              aDEdAlpha2.Visible := true;
              aDEdBeta2.Visible := true;
              aDEdGamma2.Visible := true;
              aDEdLaengea2.Visible := true;
              aDEdLaengeb2.Visible := true;
              aDEdLaengec2.Visible := true;
              aDEdUmfang2.Visible := true;
              aDEdFlaeche2.Visible := true;
              aDLbDreieck1.Visible := true;
              aDLbDreieck2.Visible := true;
              end;
          aDEdAlpha.Text := FloatToStrF(alpha,ffFixed,10,2)+ '°';
          aDEdBeta.Text := FloatToStrF(beta,ffFixed,10,2)+ '°';
          aDEdGamma.Text := FloatToStrF(gamma,ffFixed,10,2)+ '°';
          aDEdLaengec.Text := FloatToStrF(c,ffFixed,10,3);
          aDEdUmfang.Text := FloatToStrF(u,ffFixed,10,3);
          aDEdFlaeche.Text := FloatToStrF(Area,ffFixed,10,2);
        except
          on EInvalidOp
            do begin MessageDlg('Dreieck nicht lösbar!', mtWarning, [mbOK], 0);
            aDEdAlpha.Text := ' Error!';
            aDEdBeta.Text := '';
            aDEdGamma.Text := '';
            aDEdLaengea.Text := '';
            aDEdLaengeb.Text := '';
            aDEdLaengec.Text := '';
            aDEdUmfang.Text := '';
            aDEdFlaeche.Text := '';
            end
        end;
        end else

      if aDEdLaengec.Text > '0' then
        begin
        beta := StrToFloat(aDEdBeta.Text);
        a := StrToFloat(aDEdLaengea.Text);
        c := StrToFloat(aDEdLaengec.Text);
        b := sqrt(a*a + c*c - 2*a*c*cos(DegtoRad(beta)));
        alpha := RadtoDeg(arccos((b*b+c*c-a*a)/(2*b*c)));
        gamma := 180-alpha-beta;
        u := a+b+c;
            s := u/2;
        Area := sqrt(s*(s-a)*(s-b)*(s-c));
        aDEdAlpha.Text := FloatToStrF(alpha,ffFixed,10,2);
        aDEdBeta.Text := FloatToStrF(beta,ffFixed,10,2)+ '°';
        aDEdGamma.Text := FloatToStrF(gamma,ffFixed,10,2);
        aDEdLaengeb.Text := FloatToStrF(b,ffFixed,10,3);
        aDEdUmfang.Text := FloatToStrF(u,ffFixed,10,3);
        aDEdFlaeche.Text := FloatToStrF(Area,ffFixed,10,2);
        end
      end else

    if aDEdGamma.Text > '0' then
      begin
      if aDEdLaengeb.Text > '0' then
        begin
        gamma := StrToFloat(aDEdGamma.Text);
        a := StrToFloat(aDEdLaengea.Text);
        b := StrToFloat(aDEdLaengeb.Text);
        c := sqrt(a*a + b*b - 2*a*b*cos(DegtoRad(gamma)));
        alpha := RadtoDeg(arccos((b*b+c*c-a*a)/(2*b*c)));
        beta := 180-alpha-gamma;
        u := a+b+c;
            s := u/2;
        Area := sqrt(s*(s-a)*(s-b)*(s-c));
        aDEdAlpha.Text := FloatToStrF(alpha,ffFixed,10,2)+ '°';
        aDEdBeta.Text := FloatToStrF(beta,ffFixed,10,2)+ '°';
        aDEdGamma.Text := FloatToStrF(gamma,ffFixed,10,2)+ '°';
        aDEdLaengec.Text := FloatToStrF(c,ffFixed,10,3);
        aDEdUmfang.Text := FloatToStrF(u,ffFixed,10,3);
        aDEdFlaeche.Text := FloatToStrF(Area,ffFixed,10,2);
        end else

      if aDEdLaengec.Text > '0' then
        begin
        try
          gamma := StrToFloat(aDEdGamma.Text);
          a := StrToFloat(aDEdLaengea.Text);
          c := StrToFloat(aDEdLaengec.Text);
          alpha := RadtoDeg(arcsin(sin(DegtoRad(Gamma))*a/c));             // !!
          beta := 180-alpha-gamma;
          b := sqrt(a*a + c*c - 2*a*c*cos(DegtoRad(beta)));
          u := a+b+c;
              s := u/2;
          Area := sqrt(s*(s-a)*(s-b)*(s-c));
          alpha2 := 90+(90-alpha);
            if alpha2 > alpha then
              begin
              ShowMessage('Dreieck mehrdeutig, 2 Lösungen vorhanden.');
              beta2 := 180-alpha2-gamma;
              b2 := sqrt(a*a + c*c - 2*a*c*cos(DegtoRad(beta2)));
              u2 := a+b2+c;
              s2 := u2/2;
              Area2 := sqrt(s2*(s2-a)*(s2-b2)*(s2-c));
              aDEdAlpha2.Text := FloatToStrF(alpha2,ffFixed,10,2)+ '°';
              aDEdBeta2.Text := FloatToStrF(beta2,ffFixed,10,2)+ '°';
              aDEdGamma2.Text := FloatToStrF(gamma,ffFixed,10,2)+ '°';
              aDEdLaengea2.Text := FloatToStr(a);
              aDEdLaengeb2.Text := FloatToStrF(b2,ffFixed,10,3);
              aDEdLaengec2.Text := FloatToStr(c);
              aDEdUmfang2.Text := FloatToStrF(u2,ffFixed,10,3);
              aDEdFlaeche2.Text := FloatToStrF(Area2,ffFixed,10,2);
              aDEdAlpha.Width := 85;
              aDEdBeta.Width := 85;
              aDEdGamma.Width := 85;
              aDEdLaengea.Width := 85;
              aDEdLaengeb.Width := 85;
              aDEdLaengec.Width := 85;
              aDEdUmfang.Width := 85;
              aDEdFlaeche.Width := 85;
              aDEdAlpha2.Visible := true;
              aDEdBeta2.Visible := true;
              aDEdGamma2.Visible := true;
              aDEdLaengea2.Visible := true;
              aDEdLaengeb2.Visible := true;
              aDEdLaengec2.Visible := true;
              aDEdUmfang2.Visible := true;
              aDEdFlaeche2.Visible := true;
              aDLbDreieck1.Visible := true;
              aDLbDreieck2.Visible := true;
              end;
          aDEdAlpha.Text := FloatToStrF(alpha,ffFixed,10,2)+ '°';
          aDEdBeta.Text := FloatToStrF(beta,ffFixed,10,2)+ '°';
          aDEdGamma.Text := FloatToStrF(gamma,ffFixed,10,2)+ '°';
          aDEdLaengeb.Text := FloatToStrF(b,ffFixed,10,3);
          aDEdUmfang.Text := FloatToStrF(u,ffFixed,10,3);
          aDEdFlaeche.Text := FloatToStrF(Area,ffFixed,10,2);
        except
          on EInvalidOp
            do begin MessageDlg('Dreieck nicht lösbar!', mtWarning, [mbOK], 0);
            aDEdAlpha.Text := ' Error!';
            aDEdBeta.Text := '';
            aDEdGamma.Text := '';
            aDEdLaengea.Text := '';
            aDEdLaengeb.Text := '';
            aDEdLaengec.Text := '';
            aDEdUmfang.Text := '';
            aDEdFlaeche.Text := '';
            end
        end;
        end
      end else

    if aDEdLaengeb.Text > '0' then
      begin
      if aDEdLaengec.Text > '0' then
        begin
        try
          a := StrToFloat(aDEdLaengea.Text);
          b := StrToFloat(aDEdLaengeb.Text);
          c := StrToFloat(aDEdLaengec.Text);
          alpha := RadtoDeg(arccos((b*b+c*c-a*a)/(2*b*c)));
          beta := RadtoDeg(arccos((a*a+c*c-b*b)/(2*a*c)));
          gamma := 180-alpha-beta;
          u := a+b+c;
              s := u/2;
          Area := sqrt(s*(s-a)*(s-b)*(s-c));
          aDEdAlpha.Text := FloatToStrF(alpha,ffFixed,10,2)+ '°';
          aDEdBeta.Text := FloatToStrF(beta,ffFixed,10,2)+ '°';
          aDEdGamma.Text := FloatToStrF(gamma,ffFixed,10,2)+ '°';
          aDEdUmfang.Text := FloatToStrF(u,ffFixed,10,3);
          aDEdFlaeche.Text := FloatToStrF(Area,ffFixed,10,2);
        except
          on EInvalidOp
            do begin MessageDlg('Fehler!' + #13 + 'Eine Seite muss mindestens so lang sein wie die Summe der anderen beiden.', mtWarning, [mbOK], 0);
            aDEdAlpha.Text := '';
            aDEdBeta.Text := '';
            aDEdGamma.Text := '';
            aDEdLaengea.Text := ' Error!';
            aDEdLaengeb.Text := ' Error!';
            aDEdLaengec.Text := ' Error!';
            aDEdUmfang.Text := '';
            aDEdFlaeche.Text := '';
            end
        end;
        end
      end
    end else

  if aDEdLaengeb.Text > '0' then
    begin
    if aDEdAlpha.Text > '0' then
      begin
      if aDEdBeta.Text > '0' then
        begin
        alpha := StrToFloat(aDEdAlpha.Text);
        beta := StrToFloat(aDEdBeta.Text);
        b := StrToFloat(aDEdLaengeb.Text);
        gamma := 180-alpha-beta;
        a := b*Sin(DegtoRad(alpha))/Sin(DegtoRad(beta));
        c := sqrt(a*a + b*b - 2*a*b*cos(DegtoRad(gamma)));
        u := a+b+c;
            s := u/2;
        Area := sqrt(s*(s-a)*(s-b)*(s-c));
        aDEdLaengea.Text := FloatToStrF(a,ffFixed,10,3);
        aDEdLaengec.Text := FloatToStrF(c,ffFixed,10,3);
        aDEdAlpha.Text := FloatToStrF(alpha,ffFixed,10,2)+ '°';
        aDEdBeta.Text := FloatToStrF(beta,ffFixed,10,2)+ '°';
        aDEdGamma.Text := FloatToStrF(gamma,ffFixed,10,2)+ '°';
        aDEdUmfang.Text := FloatToStrF(u,ffFixed,10,3);
        aDEdFlaeche.Text := FloatToStrF(Area,ffFixed,10,2);
        end else

      if aDEdGamma.Text > '0' then
        begin
        alpha := StrToFloat(aDEdAlpha.Text);
        gamma := StrToFloat(aDEdGamma.Text);
        b := StrToFloat(aDEdLaengeb.Text);
        beta := 180-alpha-gamma;
        a := b*Sin(DegtoRad(alpha))/Sin(DegtoRad(beta));
        c := sqrt(a*a + b*b - 2*a*b*cos(DegtoRad(gamma)));
        u := a+b+c;
            s := u/2;
        Area := sqrt(s*(s-a)*(s-b)*(s-c));
        aDEdLaengea.Text := FloatToStrF(a,ffFixed,10,3);
        aDEdLaengec.Text := FloatToStrF(c,ffFixed,10,3);
        aDEdAlpha.Text := FloatToStrF(alpha,ffFixed,10,2)+ '°';
        aDEdBeta.Text := FloatToStrF(beta,ffFixed,10,2)+ '°';
        aDEdGamma.Text := FloatToStrF(gamma,ffFixed,10,2)+ '°';
        aDEdUmfang.Text := FloatToStrF(u,ffFixed,10,3);
        aDEdFlaeche.Text := FloatToStrF(Area,ffFixed,10,2);
        end else

      if aDEdLaengec.Text > '0' then
        begin
        alpha := StrToFloat(aDEdAlpha.Text);
        b := StrToFloat(aDEdLaengeb.Text);
        c := StrToFloat(aDEdLaengec.Text);
        a := sqrt(b*b + c*c - 2*b*c*cos(DegtoRad(alpha)));
        beta := RadtoDeg(arccos((a*a+c*c-b*b)/(2*a*c)));
        gamma := 180-alpha-beta;
        u := a+b+c;
            s := u/2;
        Area := sqrt(s*(s-a)*(s-b)*(s-c));
        aDEdLaengea.Text := FloatToStrF(a,ffFixed,10,3);
        aDEdAlpha.Text := FloatToStrF(alpha,ffFixed,10,2)+ '°';
        aDEdBeta.Text := FloatToStrF(beta,ffFixed,10,2)+ '°';
        aDEdGamma.Text := FloatToStrF(gamma,ffFixed,10,2)+ '°';
        aDEdUmfang.Text := FloatToStrF(u,ffFixed,10,3);
        aDEdFlaeche.Text := FloatToStrF(Area,ffFixed,10,2);
        end
      end else

    if aDEdBeta.Text > '0' then
      begin
      if aDEdGamma.Text > '0' then
        begin
        beta := StrToFloat(aDEdBeta.Text);
        b := StrToFloat(aDEdLaengeb.Text);
        gamma := StrToFloat(aDEdGamma.Text);
        alpha := 180-beta-gamma;
        a := b*Sin(DegtoRad(alpha))/Sin(DegtoRad(beta));
        c := sqrt(a*a + b*b - 2*a*b*cos(DegtoRad(gamma)));
        u := a+b+c;
            s := u/2;
        Area := sqrt(s*(s-a)*(s-b)*(s-c));
        aDEdLaengea.Text := FloatToStrF(a,ffFixed,10,3);
        aDEdLaengec.Text := FloatToStrF(c,ffFixed,10,3);
        aDEdAlpha.Text := FloatToStrF(alpha,ffFixed,10,2)+ '°';
        aDEdBeta.Text := FloatToStrF(beta,ffFixed,10,2)+ '°';
        aDEdGamma.Text := FloatToStrF(gamma,ffFixed,10,2)+ '°';
        aDEdUmfang.Text := FloatToStrF(u,ffFixed,10,3);
        aDEdFlaeche.Text := FloatToStrF(Area,ffFixed,10,2);
        end else

      if aDEdLaengec.Text > '0' then
        begin
        try
          beta := StrToFloat(aDEdBeta.Text);
          b := StrToFloat(aDEdLaengeb.Text);
          c := StrToFloat(aDEdLaengec.Text);
          gamma := RadtoDeg(arcsin(sin(DegtoRad(beta))*c/b));             // !!
          alpha := 180-beta-gamma;
          a := sqrt(b*b + c*c - 2*b*c*cos(DegtoRad(alpha)));
          u := a+b+c;
              s := u/2;
          Area := sqrt(s*(s-a)*(s-b)*(s-c));
          gamma2 := 90+(90-gamma);
            if gamma2 > gamma then
              begin
              ShowMessage('Dreieck mehrdeutig, 2 Lösungen vorhanden.');
              alpha2 := 180-beta-gamma2;
              a2 := sqrt(b*b + c*c - 2*b*c*cos(DegtoRad(alpha2)));
              u2 := a2+b+c;
              s2 := u2/2;
              Area2 := sqrt(s2*(s2-a2)*(s2-b)*(s2-c));
              aDEdAlpha2.Text := FloatToStrF(alpha2,ffFixed,10,2)+ '°';
              aDEdBeta2.Text := FloatToStrF(beta,ffFixed,10,2)+ '°';
              aDEdGamma2.Text := FloatToStrF(gamma2,ffFixed,10,2)+ '°';
              aDEdLaengea2.Text := FloatToStrF(a2,ffFixed,10,3);
              aDEdLaengeb2.Text := FloatToStr(b);
              aDEdLaengec2.Text := FloatToStr(c);
              aDEdUmfang2.Text := FloatToStrF(u2,ffFixed,10,3);
              aDEdFlaeche2.Text := FloatToStrF(Area2,ffFixed,10,2);
              aDEdAlpha.Width := 85;
              aDEdBeta.Width := 85;
              aDEdGamma.Width := 85;
              aDEdLaengea.Width := 85;
              aDEdLaengeb.Width := 85;
              aDEdLaengec.Width := 85;
              aDEdUmfang.Width := 85;
              aDEdFlaeche.Width := 85;
              aDEdAlpha2.Visible := true;
              aDEdBeta2.Visible := true;
              aDEdGamma2.Visible := true;
              aDEdLaengea2.Visible := true;
              aDEdLaengeb2.Visible := true;
              aDEdLaengec2.Visible := true;
              aDEdUmfang2.Visible := true;
              aDEdFlaeche2.Visible := true;
              aDLbDreieck1.Visible := true;
              aDLbDreieck2.Visible := true;
              end;
          aDEdLaengea.Text := FloatToStrF(a,ffFixed,10,3);
          aDEdAlpha.Text := FloatToStrF(alpha,ffFixed,10,2)+ '°';
          aDEdBeta.Text := FloatToStrF(beta,ffFixed,10,2)+ '°';
          aDEdGamma.Text := FloatToStrF(gamma,ffFixed,10,2)+ '°';
          aDEdUmfang.Text := FloatToStrF(u,ffFixed,10,3);
          aDEdFlaeche.Text := FloatToStrF(Area,ffFixed,10,2);
        except
          on EInvalidOp
            do begin MessageDlg('Dreieck nicht lösbar!', mtWarning, [mbOK], 0);
            aDEdAlpha.Text := '';
            aDEdBeta.Text := '';
            aDEdGamma.Text := ' Error!';
            aDEdLaengea.Text := '';
            aDEdLaengeb.Text := '';
            aDEdLaengec.Text := '';
            aDEdUmfang.Text := '';
            aDEdFlaeche.Text := '';
            end
        end;
        end
      end else

    if aDEdGamma.Text > '0' then
      begin
      if aDEdLaengec.Text > '0' then
        begin
        try
          gamma := StrToFloat(aDEdGamma.Text);
          b := StrToFloat(aDEdLaengeb.Text);
          c := StrToFloat(aDEdLaengec.Text);
          beta := RadtoDeg(arcsin(sin(DegtoRad(gamma))*b/c));             // !!
          alpha := 180-beta-gamma;
          a := sqrt(b*b + c*c - 2*b*c*cos(DegtoRad(alpha)));
          u := a+b+c;
              s := u/2;
          Area := sqrt(s*(s-a)*(s-b)*(s-c));
          beta2 := 90+(90-beta);
            if beta2 > beta then
              begin
              ShowMessage('Dreieck mehrdeutig, 2 Lösungen vorhanden.');
              alpha2 := 180-beta2-gamma;
              a2 := sqrt(b*b + c*c - 2*b*c*cos(DegtoRad(alpha2)));
              u2 := a2+b+c;
              s2 := u2/2;
              Area2 := sqrt(s2*(s2-a2)*(s2-b)*(s2-c));
              aDEdAlpha2.Text := FloatToStrF(alpha2,ffFixed,10,2)+ '°';
              aDEdBeta2.Text := FloatToStrF(beta2,ffFixed,10,2)+ '°';
              aDEdGamma2.Text := FloatToStrF(gamma,ffFixed,10,2)+ '°';
              aDEdLaengea2.Text := FloatToStrF(a2,ffFixed,10,3);
              aDEdLaengeb2.Text := FloatToStr(b);
              aDEdLaengec2.Text := FloatToStr(c);
              aDEdUmfang2.Text := FloatToStrF(u2,ffFixed,10,3);
              aDEdFlaeche2.Text := FloatToStrF(Area2,ffFixed,10,2);
              aDEdAlpha.Width := 85;
              aDEdBeta.Width := 85;
              aDEdGamma.Width := 85;
              aDEdLaengea.Width := 85;
              aDEdLaengeb.Width := 85;
              aDEdLaengec.Width := 85;
              aDEdUmfang.Width := 85;
              aDEdFlaeche.Width := 85;
              aDEdAlpha2.Visible := true;
              aDEdBeta2.Visible := true;
              aDEdGamma2.Visible := true;
              aDEdLaengea2.Visible := true;
              aDEdLaengeb2.Visible := true;
              aDEdLaengec2.Visible := true;
              aDEdUmfang2.Visible := true;
              aDEdFlaeche2.Visible := true;
              aDLbDreieck1.Visible := true;
              aDLbDreieck2.Visible := true;
              end;
          aDEdLaengea.Text := FloatToStrF(a,ffFixed,10,3);
          aDEdAlpha.Text := FloatToStrF(alpha,ffFixed,10,2)+ '°';
          aDEdBeta.Text := FloatToStrF(beta,ffFixed,10,2)+ '°';
          aDEdGamma.Text := FloatToStrF(gamma,ffFixed,10,2)+ '°';
          aDEdUmfang.Text := FloatToStrF(u,ffFixed,10,3);
          aDEdFlaeche.Text := FloatToStrF(Area,ffFixed,10,2);
        except
          on EInvalidOp
            do begin MessageDlg('Dreieck nicht lösbar!', mtWarning, [mbOK], 0);
            aDEdAlpha.Text := '';
            aDEdBeta.Text := ' Error!';
            aDEdGamma.Text := '';
            aDEdLaengea.Text := '';
            aDEdLaengeb.Text := '';
            aDEdLaengec.Text := '';
            aDEdUmfang.Text := '';
            aDEdFlaeche.Text := '';
            end
        end;
        end
      end
    end else

  if aDEdLaengec.Text > '0' then
    begin
    if aDEdAlpha.Text > '0' then
      begin
      if aDEdBeta.Text > '0' then
        begin
        alpha := StrToFloat(aDEdAlpha.Text);
        beta := StrToFloat(aDEdBeta.Text);
        c := StrToFloat(aDEdLaengec.Text);
        gamma := 180-alpha-beta;
        a := c*Sin(DegtoRad(alpha))/Sin(DegtoRad(gamma));
        b := sqrt(a*a + c*c - 2*a*c*cos(DegtoRad(beta)));
        u := a+b+c;
            s := u/2;
        Area := sqrt(s*(s-a)*(s-b)*(s-c));
        aDEdLaengea.Text := FloatToStrF(a,ffFixed,10,3);
        aDEdLaengeb.Text := FloatToStrF(b,ffFixed,10,3);
        aDEdAlpha.Text := FloatToStrF(alpha,ffFixed,10,2)+ '°';
        aDEdBeta.Text := FloatToStrF(beta,ffFixed,10,2)+ '°';
        aDEdGamma.Text := FloatToStrF(gamma,ffFixed,10,2)+ '°';
        aDEdUmfang.Text := FloatToStrF(u,ffFixed,10,3);
        aDEdFlaeche.Text := FloatToStrF(Area,ffFixed,10,2);
        end else

      if aDEdGamma.Text > '0' then
        begin
        alpha := StrToFloat(aDEdAlpha.Text);
        gamma := StrToFloat(aDEdGamma.Text);
        c := StrToFloat(aDEdLaengec.Text);
        beta := 180-alpha-gamma;
        a := c*Sin(DegtoRad(alpha))/Sin(DegtoRad(gamma));
        b := sqrt(a*a + c*c - 2*a*c*cos(DegtoRad(beta)));
        u := a+b+c;
            s := u/2;
        Area := sqrt(s*(s-a)*(s-b)*(s-c));
        aDEdLaengea.Text := FloatToStrF(a,ffFixed,10,3);
        aDEdLaengeb.Text := FloatToStrF(b,ffFixed,10,3);
        aDEdAlpha.Text := FloatToStrF(alpha,ffFixed,10,2)+ '°';
        aDEdBeta.Text := FloatToStrF(beta,ffFixed,10,2)+ '°';
        aDEdGamma.Text := FloatToStrF(gamma,ffFixed,10,2)+ '°';
        aDEdUmfang.Text := FloatToStrF(u,ffFixed,10,3);
        aDEdFlaeche.Text := FloatToStrF(Area,ffFixed,10,2);
        end
      end else

    if aDEdBeta.Text > '0' then
      begin
      if aDEdGamma.Text > '0' then
        begin
        beta := StrToFloat(aDEdBeta.Text);
        c := StrToFloat(aDEdLaengec.Text);
        gamma := StrToFloat(aDEdGamma.Text);
        alpha := 180-beta-gamma;
        a := c*Sin(DegtoRad(alpha))/Sin(DegtoRad(gamma));
        b := sqrt(a*a + c*c - 2*a*c*cos(DegtoRad(beta)));
        u := a+b+c;
            s := u/2;
        Area := sqrt(s*(s-a)*(s-b)*(s-c));
        aDEdLaengea.Text := FloatToStrF(a,ffFixed,10,3);
        aDEdLaengeb.Text := FloatToStrF(b,ffFixed,10,3);
        aDEdAlpha.Text := FloatToStrF(alpha,ffFixed,10,2)+ '°';
        aDEdBeta.Text := FloatToStrF(beta,ffFixed,10,2)+ '°';
        aDEdGamma.Text := FloatToStrF(gamma,ffFixed,10,2)+ '°';
        aDEdUmfang.Text := FloatToStrF(u,ffFixed,10,3);
        aDEdFlaeche.Text := FloatToStrF(Area,ffFixed,10,2);
        end
      end
    end;
  aDEdAlpha.ReadOnly := true;
  aDEdBeta.ReadOnly := true;
  aDEdGamma.ReadOnly := true;
  aDEdLaengea.ReadOnly := true;
  aDEdLaengeb.ReadOnly := true;
  aDEdLaengec.ReadOnly := true;
  aDBtRechnen.Enabled := false;
end;

procedure TForm1.aDBtLoeschenClick(Sender: TObject);
begin
 aDEdAlpha.Text := '0';
aDEdBeta.Text := '0';
aDEdGamma.Text := '0';
aDEdLaengea.Text := '0';
aDEdLaengeb.Text := '0';
aDEdLaengec.Text := '0';
aDEdUmfang.Text := '0';
aDEdFlaeche.Text := '0';
aDEdAlpha2.Text := '0';
aDEdBeta2.Text := '0';
aDEdGamma2.Text := '0';
aDEdLaengea2.Text := '0';
aDEdLaengeb2.Text := '0';
aDEdLaengec2.Text := '0';
aDEdUmfang2.Text := '0';
aDEdFlaeche2.Text := '0';
aDEdAlpha.ReadOnly := false;
aDEdBeta.ReadOnly := false;
aDEdGamma.ReadOnly := false;
aDEdLaengea.ReadOnly := false;
aDEdLaengeb.ReadOnly := false;
aDEdLaengec.ReadOnly := false;
aDBtRechnen.Enabled := true;
aDLbDreieck1.Visible := false;
aDLbDreieck2.Visible := false;
aDEdAlpha2.Visible := false;
aDEdBeta2.Visible := false;
aDEdGamma2.Visible := false;
aDEdLaengea2.Visible := false;
aDEdLaengeb2.Visible := false;
aDEdLaengec2.Visible := false;
aDEdUmfang2.Visible := false;
aDEdFlaeche2.Visible := false;
aDEdAlpha.Width := 177;
aDEdBeta.Width := 177;
aDEdGamma.Width := 177;
aDEdLaengea.Width := 177;
aDEdLaengeb.Width := 177;
aDEdLaengec.Width := 177;
aDEdUmfang.Width := 177;
aDEdFlaeche.Width := 177;
end;                                                                  //SPERRLISTE FÜR EDITFELDER

(*----------------------------------Körper----------------------------------*)

(*_____Würfel_____*)
procedure TForm1.WBtRechnenClick(Sender: TObject);
var a,d,k,O,V :real;
begin
  if WEdKanten.Text > '0' then
    begin
    a := StrToFloat(WEdKanten.Text);
    d := a*sqrt(3);
    k := 12*a;
    O := 6 * (a*a);
    V := a*a*a;
    WEdDiagonale.Text := FloatToStrF(d,ffFixed,10,3);
    WEdGesamtkanten.Text := FloatToStrF(k,ffFixed,10,3);
    WEdOberflaeche.Text := FloatToStrF(O,ffFixed,10,3);
    WEdVolumen.Text := FloatToStrF(V,ffFixed,10,2);
    end else

  if WEdDiagonale.Text > '0' then
    begin
    d := StrToFloat(WEdDiagonale.Text);
    a := sqrt((d*d)/3);
    k := 12*a;
    O := 6 * (a*a);
    V := a*a*a;
    WEdKanten.Text := FloatToStrF(a,ffFixed,10,3);
    WEdGesamtkanten.Text := FloatToStrF(k,ffFixed,10,3);
    WEdOberflaeche.Text := FloatToStrF(O,ffFixed,10,3);
    WEdVolumen.Text := FloatToStrF(V,ffFixed,10,2);
    end else

  if WEdGesamtkanten.Text > '0' then
    begin
    k := StrToFloat(WEdGesamtkanten.Text);
    a := k/12;
    d := a*sqrt(3);
    O := 6*(a*a);
    V := a*a*a;
    WEdKanten.Text := FloatToStrF(a,ffFixed,10,3);
    WEdDiagonale.Text := FloatToStrF(d,ffFixed,10,3);
    WEdOberflaeche.Text := FloatToStrF(O,ffFixed,10,3);
    WEdVolumen.Text := FloatToStrF(V,ffFixed,10,2);
    end;
  WEdKanten.ReadOnly := true;
  WEdDiagonale.ReadOnly := true;
  WEdGesamtkanten.ReadOnly := true;
  WBtRechnen.Enabled := false;
end;

procedure TForm1.WBtLoeschenClick(Sender: TObject);
begin
WEdKanten.Text := '0';
WEdDiagonale.Text := '0';
WEdGesamtkanten.Text := '0';
WEdOberflaeche.Text := '0';
WEdVolumen.Text := '0';
WEdKanten.ReadOnly := false;
WEdDiagonale.ReadOnly := false;
WEdGesamtkanten.ReadOnly := false;
WBtRechnen.Enabled := true;
end;

procedure TForm1.WEdKantenChange(Sender: TObject);
begin
if WEdKanten.Text > '0' then
  begin
  WEdDiagonale.ReadOnly := true;
  WEdGesamtkanten.ReadOnly := true;
  end else
  begin
  WEdDiagonale.ReadOnly := false;
  WEdGesamtkanten.ReadOnly := false;
  end;
end;

procedure TForm1.WEdDiagonaleChange(Sender: TObject);
begin
if WEdDiagonale.Text > '0' then
  begin
  WEdKanten.ReadOnly := true;
  WEdGesamtkanten.ReadOnly := true;
  end else
  begin
  WEdKanten.ReadOnly := false;
  WEdGesamtkanten.ReadOnly := false;
  end;
end;

procedure TForm1.WEdGesamtkantenChange(Sender: TObject);
begin
if WEdGesamtkanten.Text > '0' then
  begin
  WEdKanten.ReadOnly := true;
  WEdDiagonale.ReadOnly := true;
  end else
  begin
  WEdKanten.ReadOnly := false;
  WEdDiagonale.ReadOnly := false;
  end;
end;

(*_____Quader_____*)
procedure TForm1.QuBtRechnenClick(Sender: TObject);
var a,b,c,d,k,O,V :real;
begin
  if QuEdKantea.Text > '0' then
   if QuEdKanteb.Text > '0' then
    if QuEdKantec.Text > '0' then
    begin
    a := StrToFloat(QuEdKantea.Text);
    b := StrToFloat(QuEdKanteb.Text);
    c := StrToFloat(QuEdKantec.Text);
    d := sqrt(a*a + b*b + c*c);
    k := 4*(a+b+c);
    O := 2*(a*b + b*c + a*c);
    V := a*b*c;
    QuEdDiagonale.Text := FloatToStrF(d,ffFixed,10,3);
    QuEdGesamtkanten.Text := FloatToStr(k);
    QuEdOberflaeche.Text := FloatToStr(O);
    QuEdVolumen.Text := FloatToStr(V);

  QuEdKantea.ReadOnly := true;
  QuEdKanteb.ReadOnly := true;
  QuEdKantec.ReadOnly := true;
  QuBtRechnen.Enabled := false;
  end;
end;

procedure TForm1.QuBtLoeschenClick(Sender: TObject);
begin
QuEdKantea.Text := '0';
QuEdKanteb.Text := '0';
QuEdKantec.Text := '0';
QuEdDiagonale.Text := '0';
QuEdGesamtkanten.Text := '0';
QuEdOberflaeche.Text := '0';
QuEdVolumen.Text := '0';
QuEdKantea.ReadOnly := false;
QuEdKanteb.ReadOnly := false;
QuEdKantec.ReadOnly := false;
QuBtRechnen.Enabled := true;
end;

(*_____Kugel_____*)
procedure TForm1.KuBtRechnenClick(Sender: TObject);
var r,d,O,V :real;
begin
  if KuEdRadius.Text > '0' then
    begin
    r := StrToFloat(KuEdRadius.Text);
    d := 2*r;
    O := pi*d*d;
    V := 4*pi*(r*r*r)/3;
    KuEdDurchmesser.Text := FloatToStr(d);
    KuEdOberflaeche.Text := FloatToStrF(O,ffFixed,10,3);
    KuEdVolumen.Text := FloatToStrF(V,ffFixed,10,2);
    end else

  if KuEdDurchmesser.Text > '0' then
    begin
    d := StrToFloat(KuEdDurchmesser.Text);
    r := d/2;
    O := pi*d*d;
    V := 4*pi*(r*r*r)/3;
    KuEdRadius.Text := FloatToStr(r);
    KuEdOberflaeche.Text := FloatToStrF(O,ffFixed,10,3);
    KuEdVolumen.Text := FloatToStrF(V,ffFixed,10,2);
    end;

  KuEdRadius.ReadOnly := true;
  KuEdDurchmesser.ReadOnly := true;
  KuBtRechnen.Enabled := false;
end;

procedure TForm1.KuBtLoeschenClick(Sender: TObject);
begin
KuEdRadius.Text := '0';
KuEdDurchmesser.Text := '0';
KuEdOberflaeche.Text := '0';
KuEdVolumen.Text := '0';
KuEdRadius.ReadOnly := false;
KuEdDurchmesser.ReadOnly := false;
KuBtRechnen.Enabled := true;
end;

procedure TForm1.KuEdRadiusChange(Sender: TObject);
begin
if KuEdRadius.Text > '0' then
  KuEdDurchmesser.ReadOnly := true else
  KuEdDurchmesser.ReadOnly := false;
end;

procedure TForm1.KuEdDurchmesserChange(Sender: TObject);
begin
if KuEdDurchmesser.Text > '0' then
  KuEdRadius.ReadOnly := true else
  KuEdRadius.ReadOnly := false;
end;

(*_____Zylinder_____*)
procedure TForm1.ZBtRechnenClick(Sender: TObject);
var r,h,u,O,V,M,A :real;
begin
  if ZEdRadius.Text > '0' then
    begin
    r := StrToFloat(ZEdRadius.Text);
    h := StrToFloat(ZEdHoehe.Text);
    u := 2*Pi*r;
    O := 2*Pi*r*(h+r);
    V := Pi*r*r*h;
    M := 2*Pi*r*h;
    A := 2*(Pi*r*r);
    ZEdUmfang.Text := FloatToStrF(u,ffFixed,10,3);
    ZEdOberflaeche.Text := FloatToStrF(O,ffFixed,10,3);
    ZEdVolumen.Text := FloatToStrF(V,ffFixed,10,2);
    ZEdMantel.Text := FloatToStrF(M,ffFixed,10,2);
    ZEdGrundflaechen.Text := FloatToStrF(A,ffFixed,10,2);
    end else

  if ZEdUmfang.Text > '0' then
    begin
    u := StrToFloat(ZEdUmfang.Text);
    h := StrToFloat(ZEdHoehe.Text);
    r := u/(2*pi);
    O := 2*Pi*r*(h+r);
    V := Pi*r*r*h;
    M := 2*Pi*r*h;
    A := 2*(Pi*r*r);
    ZEdRadius.Text := FloatToStrF(r,ffFixed,10,3);
    ZEdOberflaeche.Text := FloatToStrF(O,ffFixed,10,3);
    ZEdVolumen.Text := FloatToStrF(V,ffFixed,10,2);
    ZEdMantel.Text := FloatToStrF(M,ffFixed,10,2);
    ZEdGrundflaechen.Text := FloatToStrF(A,ffFixed,10,2);
    end;

  ZEdRadius.ReadOnly := true;
  ZEdHoehe.ReadOnly := true;
  ZEdUmfang.ReadOnly := true;
  ZBtRechnen.Enabled := false;
end;

procedure TForm1.ZBtLoeschenClick(Sender: TObject);
begin
ZEdRadius.Text := '0';
ZEdHoehe.Text := '0';
ZEDUmfang.Text := '0';
ZEdOberflaeche.Text := '0';
ZEdVolumen.Text := '0';
ZEdMantel.Text := '0';
ZEdGrundflaechen.Text := '0';
ZEdRadius.ReadOnly := false;
ZEdHoehe.ReadOnly := false;
ZEdUmfang.ReadOnly := false;
ZBtRechnen.Enabled := true;
end;

procedure TForm1.ZEdRadiusChange(Sender: TObject);
begin
if ZEdRadius.Text > '0' then
  ZEdUmfang.ReadOnly := true else
  ZEdUmfang.ReadOnly := false;
end;

procedure TForm1.ZEdUmfangChange(Sender: TObject);
begin
if ZEdUmfang.Text > '0' then
  ZEdRadius.ReadOnly := true else
  ZEdRadius.ReadOnly := false;
end;

(*_____Kegel_____*)
procedure TForm1.KeBtRechnenClick(Sender: TObject);
var r,h,u,s,O,V,M,A :real;
begin
  if KeEdRadius.Text > '0' then
    begin
    if KeEdHoehe.Text > '0' then
      begin
      r := StrToFloat(KeEdRadius.Text);
      h := StrToFloat(KeEdHoehe.Text);
      u := 2*Pi*r;
      s := sqrt(r*r+h*h);
      O := pi*r*(r+s);
      V := Pi*r*r*h/3;
      M := pi*s*r;
      A := pi*r*r;
      KeEdUmfang.Text := FloatToStrF(u,ffFixed,10,3);
      KeEdMantellinie.Text := FloatToStrF(s,ffFixed,10,2);
      KeEdOberflaeche.Text := FloatToStrF(O,ffFixed,10,3);
      KeEdVolumen.Text := FloatToStrF(V,ffFixed,10,2);
      KeEdMantel.Text := FloatToStrF(M,ffFixed,10,2);
      KeEdGrundflaeche.Text := FloatToStrF(A,ffFixed,10,2);
      end else

    if KeEdMantellinie.Text > '0' then
      begin
      r := StrToFloat(KeEdRadius.Text);
      s := StrToFloat(KeEdMantellinie.Text);
      u := 2*Pi*r;
      h := sqrt(s*s-r*r);
      O := pi*r*(r+s);
      V := Pi*r*r*h/3;
      M := pi*s*r;
      A := pi*r*r;
      KeEdUmfang.Text := FloatToStrF(u,ffFixed,10,3);
      KeEdHoehe.Text := FloatToStrF(h,ffFixed,10,2);
      KeEdOberflaeche.Text := FloatToStrF(O,ffFixed,10,3);
      KeEdVolumen.Text := FloatToStrF(V,ffFixed,10,2);
      KeEdMantel.Text := FloatToStrF(M,ffFixed,10,2);
      KeEdGrundflaeche.Text := FloatToStrF(A,ffFixed,10,2);
      end;
    end else

  if KeEdUmfang.Text > '0' then
    begin
    if KeEdHoehe.Text > '0' then
      begin
      u := StrToFloat(KeEdUmfang.Text);
      h := StrToFloat(KeEdHoehe.Text);
      r := u/(2*Pi);
      s := sqrt(r*r+h*h);
      O := pi*r*(r+s);
      V := Pi*r*r*h/3;
      M := pi*s*r;
      A := pi*r*r;
      KeEdRadius.Text := FloatToStrF(r,ffFixed,10,3);
      KeEdMantellinie.Text := FloatToStrF(s,ffFixed,10,2);
      KeEdOberflaeche.Text := FloatToStrF(O,ffFixed,10,3);
      KeEdVolumen.Text := FloatToStrF(V,ffFixed,10,2);
      KeEdMantel.Text := FloatToStrF(M,ffFixed,10,2);
      KeEdGrundflaeche.Text := FloatToStrF(A,ffFixed,10,2);
      end else

    if KeEdMantellinie.Text > '0' then
      begin
      u := StrToFloat(KeEdUmfang.Text);
      s := StrToFloat(KeEdMantellinie.Text);
      r := u/(2*Pi);
      h := sqrt(s*s-r*r);
      O := pi*r*(r+s);
      V := Pi*r*r*h/3;
      M := pi*s*r;
      A := pi*r*r;
      KeEdRadius.Text := FloatToStrF(r,ffFixed,10,3);
      KeEdHoehe.Text := FloatToStrF(h,ffFixed,10,2);
      KeEdOberflaeche.Text := FloatToStrF(O,ffFixed,10,3);
      KeEdVolumen.Text := FloatToStrF(V,ffFixed,10,2);
      KeEdMantel.Text := FloatToStrF(M,ffFixed,10,2);
      KeEdGrundflaeche.Text := FloatToStrF(A,ffFixed,10,2);
      end;
    end;

  KeEdRadius.ReadOnly := true;
  KeEdHoehe.ReadOnly := true;
  KeEdUmfang.ReadOnly := true;
  KeEdMantellinie.ReadOnly := true;
  KeBtRechnen.Enabled := false;
end;


procedure TForm1.KeBtLoeschenClick(Sender: TObject);
begin
KeEdRadius.Text := '0';
KeEdHoehe.Text := '0';
KeEdUmfang.Text := '0';
KeEdMantellinie.Text := '0';
KeEdOberflaeche.Text := '0';
KeEdVolumen.Text := '0';
KeEdMantel.Text := '0';
KeEdGrundflaeche.Text := '0';
KeEdRadius.ReadOnly := false;
KeEdHoehe.ReadOnly := false;
KeEdUmfang.ReadOnly := false;
KeEdMantellinie.ReadOnly := false;
KeBtRechnen.Enabled := true;
end;

procedure TForm1.KeEdRadiusChange(Sender: TObject);
begin
if KeEdRadius.Text > '0' then
  KeEdUmfang.ReadOnly := true else
  KeEdUmfang.ReadOnly := false;
end;

procedure TForm1.KeEdHoeheChange(Sender: TObject);
begin
if KeEdHoehe.Text > '0' then
  KeEdMantellinie.ReadOnly := true else
  KeEdMantellinie.ReadOnly := false;
end;

procedure TForm1.KeEdUmfangChange(Sender: TObject);
begin
if KeEdUmfang.Text > '0' then
  KeEdRadius.ReadOnly := true else
  KeEdRadius.ReadOnly := false;
end;

procedure TForm1.KeEdMantellinieChange(Sender: TObject);
begin
if KeEdMantellinie.Text > '0' then
  KeEdHoehe.ReadOnly := true else
  KeEdHoehe.ReadOnly := false;
end;

(*_____Pyramide_____*)
procedure TForm1.PBtRechnenClick(Sender: TObject);
var a,h,s,O,V,M,G :real;
    d,hs,x :real;
begin
  if PEdKantenlaenge.Text > '0' then
    begin
    if PEdHoehe.Text > '0' then
      begin
      a := StrToFloat(PEdKantenlaenge.Text);
      h := StrToFloat(PEdHoehe.Text);
        d := a*sqrt(2);
      s := sqrt(h*h+(d/2)*(d/2));
        hs := sqrt(h*h+(a/2)*(a/2));
      O := a*a+2*a*hs;
      V := (1/3)*a*a*h;
      G := a*a;
      M := O - G;
      PEdSeitenkante.Text := FloatToStrF(s,ffFixed,10,2);
      PEdOberflaeche.Text := FloatToStrF(O,ffFixed,10,3);
      PEdVolumen.Text := FloatToStrF(V,ffFixed,10,2);
      PEdMantel.Text := FloatToStrF(M,ffFixed,10,2);
      PEdGrundflaeche.Text := FloatToStrF(G,ffFixed,10,2);
      end else

    if PEdSeitenkante.Text > '0' then
      begin
      try
        a := StrToFloat(PEdKantenlaenge.Text);
        s := StrToFloat(PEdSeitenkante.Text);    
          d := a*sqrt(2);
        h := sqrt(s*s-(d/2)*(d/2));
          hs := sqrt(h*h+(a/2)*(a/2));
        O := a*a+2*a*hs;
        V := (1/3)*a*a*h;
        G := a*a;
        M := O - G;
        PEdHoehe.Text := FloatToStrF(h,ffFixed,10,2);
        PEdOberflaeche.Text := FloatToStrF(O,ffFixed,10,3);
        PEdVolumen.Text := FloatToStrF(V,ffFixed,10,2);
        PEdMantel.Text := FloatToStrF(M,ffFixed,10,2);
        PEdGrundflaeche.Text := FloatToStrF(G,ffFixed,10,2);
  PEdKantenlaenge.ReadOnly := true;
  PEdHoehe.ReadOnly := true;
  PEdSeitenkante.ReadOnly := true;
  PBtRechnen.Enabled := false;
      except
      on EInvalidOp
            do begin x := (a*sqrt(2))/2;
            MessageDlg('Berechnung nicht möglich!' +#13+ 'Bitte als Seitenkantenlänge min. ' + FloatToStr(x) + ' nehmen', mtWarning, [mbOK], 0);
            PEdKantenlaenge.ReadOnly := false;
            PEdSeitenkante.ReadOnly := false;
            PEdSeitenkante.Text := FloatToStr(x);
            end
      end;
    end;
 
end;
end;

procedure TForm1.PBtLoeschenClick(Sender: TObject);
begin
PEdKantenlaenge.Text := '0';
PEdHoehe.Text := '0';
PEdSeitenkante.Text := '0';
PEdOberflaeche.Text := '0';
PEdVolumen.Text := '0';
PEdMantel.Text := '0';
PEdGrundflaeche.Text := '0';
PEdKantenlaenge.ReadOnly := false;
PEdHoehe.ReadOnly := false;
PEdSeitenkante.ReadOnly := false;
PBtRechnen.Enabled := true;
end;

procedure TForm1.PEdHoeheChange(Sender: TObject);
begin
if PEdHoehe.Text > '0' then
  PEdSeitenkante.ReadOnly := true else
  PEdSeitenkante.ReadOnly := false;
end;

procedure TForm1.PEdSeitenkanteChange(Sender: TObject);
begin
if PEdSeitenkante.Text > '0' then
  PEdHoehe.ReadOnly := true else
  PEdHoehe.ReadOnly := false;
end;

(*_____Tetraeder_____*)
procedure TForm1.TBtRechnenClick(Sender: TObject);
var a,h,O,V,M,G :real;
begin
  if TEdKantenlaenge.Text > '0' then
    begin
    a := StrToFloat(TEdKantenlaenge.Text);
    h := sqrt(2/3)*a;                
    O := a*a*sqrt(3);
    V := a*a*a/12*sqrt(2);
    G := O/4;
    M := O-G;
    TEdHoehe.Text := FloatToStrF(h,ffFixed,10,2);
    TEdOberflaeche.Text := FloatToStrF(O,ffFixed,10,3);
    TEdVolumen.Text := FloatToStrF(V,ffFixed,10,2);
    TEdMantel.Text := FloatToStrF(M,ffFixed,10,2);
    TEdGrundflaeche.Text := FloatToStrF(G,ffFixed,10,2);
    end else

  if TEdHoehe.Text > '0' then
    begin
    h := StrToFloat(TEdHoehe.Text);
    a := sqrt(3/2)*h;
    O := a*a*sqrt(3);
    V := a*a*a/12*sqrt(2);
    G := O/4;
    M := O-G;
    TEdKantenlaenge.Text := FloatToStrF(a,ffFixed,10,2);
    TEdOberflaeche.Text := FloatToStrF(O,ffFixed,10,3);
    TEdVolumen.Text := FloatToStrF(V,ffFixed,10,2);
    TEdMantel.Text := FloatToStrF(M,ffFixed,10,2);
    TEdGrundflaeche.Text := FloatToStrF(G,ffFixed,10,2);
    end;
  TEdKantenlaenge.ReadOnly := true;
  TEdHoehe.ReadOnly := true;
  TBtRechnen.Enabled := false;
end;

procedure TForm1.TBtLoeschenClick(Sender: TObject);
begin
TEdKantenlaenge.Text := '0';
TEdHoehe.Text := '0';
TEdOberflaeche.Text := '0';
TEdVolumen.Text := '0';
TEdMantel.Text := '0';
TEdGrundflaeche.Text := '0';
TEdKantenlaenge.ReadOnly := false;
TEdHoehe.ReadOnly := false;
TBtRechnen.Enabled := true;
end;

procedure TForm1.TEdKantenlaengeChange(Sender: TObject);
begin
if TEdKantenlaenge.Text > '0' then
  TEdHoehe.ReadOnly := true else
  TEdHoehe.ReadOnly := false;
end;

procedure TForm1.TEdHoeheChange(Sender: TObject);
begin
if TEdHoehe.Text > '0' then
  TEdKantenlaenge.ReadOnly := true else
  TEdKantenlaenge.ReadOnly := false;
end;

procedure TForm1.aDEdAlphaChange(Sender: TObject);
begin
if aDEdLaengea.Text > '0' then
  begin
  if aDEdAlpha.Text > '0' then
    begin
    if aDEdBeta.Text > '0' then
      begin
      aDEdGamma.ReadOnly := true;
      aDEdLaengeb.ReadOnly := true;
      aDEdLaengec.ReadOnly := true;
      end else
        begin
        aDEdGamma.ReadOnly := false;
        aDEdLaengeb.ReadOnly := false;
        aDEdLaengec.ReadOnly := false;
        end;
    if aDEdGamma.Text > '0' then
      begin
      aDEdBeta.ReadOnly := true;
      aDEdLaengeb.ReadOnly := true;
      aDEdLaengec.ReadOnly := true;
      end else
        begin
        aDEdBeta.ReadOnly := false;
        aDEdLaengeb.ReadOnly := false;
        aDEdLaengec.ReadOnly := false;
        end;
    if aDEdLaengeb.Text > '0' then
      begin
      aDEdBeta.ReadOnly := true;
      aDEdGamma.ReadOnly := true;
      aDEdLaengec.ReadOnly := true;
      end else
        begin
        aDEdBeta.ReadOnly := false;
        aDEdGamma.ReadOnly := false;
        aDEdLaengec.ReadOnly := false;
        end;
    if aDEdLaengec.Text > '0' then
      begin
      aDEdBeta.ReadOnly := true;
      aDEdGamma.ReadOnly := true;
      aDEdLaengeb.ReadOnly := true;
      end else
        begin
        aDEdBeta.ReadOnly := false;
        aDEdGamma.ReadOnly := false;
        aDEdLaengeb.ReadOnly := false;
        end
    end;
  end else

if aDEdLaengeb.Text > '0' then
  begin
  if aDEdAlpha.Text > '0' then
    begin
    if aDEdBeta.Text > '0' then
      begin
      aDEdGamma.ReadOnly := true;
      aDEdLaengea.ReadOnly := true;
      aDEdLaengec.ReadOnly := true;
      end else
        begin
        aDEdGamma.ReadOnly := false;
        aDEdLaengea.ReadOnly := false;
        aDEdLaengec.ReadOnly := false;
        end;
    if aDEdGamma.Text > '0' then
      begin
      aDEdBeta.ReadOnly := true;
      aDEdLaengea.ReadOnly := true;
      aDEdLaengec.ReadOnly := true;
      end else
        begin
        aDEdBeta.ReadOnly := false;
        aDEdLaengea.ReadOnly := false;
        aDEdLaengec.ReadOnly := false;
        end;
    if aDEdLaengec.Text > '0' then
      begin
      aDEdBeta.ReadOnly := true;
      aDEdGamma.ReadOnly := true;
      aDEdLaengea.ReadOnly := true;
      end else
        begin
        aDEdBeta.ReadOnly := false;
        aDEdGamma.ReadOnly := false;
        aDEdLaengea.ReadOnly := false;
        end
    end;
  end else

if aDEdLaengec.Text > '0' then
  begin
  if aDEdAlpha.Text > '0' then
    begin
    if aDEdBeta.Text > '0' then
      begin
      aDEdGamma.ReadOnly := true;
      aDEdLaengea.ReadOnly := true;
      aDEdLaengeb.ReadOnly := true;
      end else
       begin
       aDEdGamma.ReadOnly := false;
       aDEdLaengea.ReadOnly := false;
       aDEdLaengeb.ReadOnly := false;
       end;
    if aDEdGamma.Text > '0' then
      begin
      aDEdBeta.ReadOnly := true;
      aDEdLaengea.ReadOnly := true;
      aDEdLaengeb.ReadOnly := true;
      end else
       begin
       aDEdBeta.ReadOnly := false;
       aDEdLaengea.ReadOnly := false;
       aDEdLaengeb.ReadOnly := false;
       end
    end;
  end;
end;

procedure TForm1.aDEdBetaChange(Sender: TObject);
begin
if aDEdLaengea.Text > '0' then
  begin
  if aDEdAlpha.Text > '0' then
    begin
    if aDEdBeta.Text > '0' then
      begin
      aDEdGamma.ReadOnly := true;
      aDEdLaengeb.ReadOnly := true;
      aDEdLaengec.ReadOnly := true;
      end else
        begin
        aDEdGamma.ReadOnly := false;
        aDEdLaengeb.ReadOnly := false;
        aDEdLaengec.ReadOnly := false;
        end;
    end else
  if aDEdBeta.Text > '0' then
    begin
    if aDEdGamma.Text > '0' then
      begin
      aDEdAlpha.ReadOnly := true;
      aDEdLaengeb.ReadOnly := true;
      aDEdLaengec.ReadOnly := true;
      end else
        begin
        aDEdAlpha.ReadOnly := false;
        aDEdLaengeb.ReadOnly := false;
        aDEdLaengec.ReadOnly := false;
        end;
    if aDEdLaengeb.Text > '0' then
      begin
      aDEdAlpha.ReadOnly := true;
      aDEdGamma.ReadOnly := true;
      aDEdLaengec.ReadOnly := true;
      end else
        begin
        aDEdAlpha.ReadOnly := false;
        aDEdGamma.ReadOnly := false;
        aDEdLaengec.ReadOnly := false;
        end;
    if aDEdLaengec.Text > '0' then
      begin
      aDEdAlpha.ReadOnly := true;
      aDEdGamma.ReadOnly := true;
      aDEdLaengeb.ReadOnly := true;
      end else
        begin
        aDEdAlpha.ReadOnly := false;
        aDEdGamma.ReadOnly := false;
        aDEdLaengeb.ReadOnly := false;
        end
    end;
  end else

if aDEdLaengeb.Text > '0' then
  begin
  if aDEdAlpha.Text > '0' then
    begin
    if aDEdBeta.Text > '0' then
      begin
      aDEdGamma.ReadOnly := true;
      aDEdLaengea.ReadOnly := true;
      aDEdLaengec.ReadOnly := true;
      end else
        begin
        aDEdGamma.ReadOnly := false;
        aDEdLaengea.ReadOnly := false;
        aDEdLaengec.ReadOnly := false;
        end;
    end else
  if aDEdBeta.Text > '0' then
    begin
    if aDEdGamma.Text > '0' then
      begin
      aDEdAlpha.ReadOnly := true;
      aDEdLaengea.ReadOnly := true;
      aDEdLaengec.ReadOnly := true;
      end else
         begin
          aDEdAlpha.ReadOnly := false;
         aDEdLaengea.ReadOnly := false;
         aDEdLaengec.ReadOnly := false;
          end;
    if aDEdLaengec.Text > '0' then
      begin
      aDEdAlpha.ReadOnly := true;
      aDEdGamma.ReadOnly := true;
      aDEdLaengea.ReadOnly := true;
      end else
        begin
        aDEdAlpha.ReadOnly := false;
        aDEdGamma.ReadOnly := false;
        aDEdLaengea.ReadOnly := false;
        end
    end;
  end else

if aDEdLaengec.Text > '0' then
  begin
  if aDEdAlpha.Text > '0' then
    begin
    if aDEdBeta.Text > '0' then
      begin
      aDEdGamma.ReadOnly := true;
      aDEdLaengea.ReadOnly := true;
      aDEdLaengeb.ReadOnly := true;
      end else
       begin
       aDEdGamma.ReadOnly := false;
       aDEdLaengea.ReadOnly := false;
       aDEdLaengeb.ReadOnly := false;
       end;
    end else
  if aDEdBeta.Text > '0' then
    begin
      if aDEdGamma.Text > '0' then
      begin
      aDEdAlpha.ReadOnly := true;
      aDEdLaengea.ReadOnly := true;
      aDEdLaengeb.ReadOnly := true;
      end else
        begin
        aDEdAlpha.ReadOnly := false;
        aDEdLaengea.ReadOnly := false;
        aDEdLaengeb.ReadOnly := false;
        end
    end;
  end;
end;

procedure TForm1.aDEdGammaChange(Sender: TObject);
begin
if aDEdLaengea.Text > '0' then
  begin
  if aDEdAlpha.Text > '0' then
    begin
    if aDEdGamma.Text > '0' then
      begin
      aDEdBeta.ReadOnly := true;
      aDEdLaengeb.ReadOnly := true;
      aDEdLaengec.ReadOnly := true;
      end else
        begin
        aDEdBeta.ReadOnly := false;
        aDEdLaengeb.ReadOnly := false;
        aDEdLaengec.ReadOnly := false;
        end;
    end else
  if aDEdBeta.Text > '0' then
    begin
    if aDEdGamma.Text > '0' then
      begin
      aDEdAlpha.ReadOnly := true;
      aDEdLaengeb.ReadOnly := true;
      aDEdLaengec.ReadOnly := true;
      end else
        begin
        aDEdAlpha.ReadOnly := false;
        aDEdLaengeb.ReadOnly := false;
        aDEdLaengec.ReadOnly := false;
        end;
    end else
  if aDEdGamma.Text > '0' then
    begin
    if aDEdLaengeb.Text > '0' then
      begin
      aDEdAlpha.ReadOnly := true;
      aDEdBeta.ReadOnly := true;
      aDEdLaengec.ReadOnly := true;
      end else
        begin
        aDEdAlpha.ReadOnly := false;
        aDEdBeta.ReadOnly := false;
        aDEdLaengec.ReadOnly := false;
        end;
    if aDEdLaengec.Text > '0' then
      begin
      aDEdAlpha.ReadOnly := true;
      aDEdBeta.ReadOnly := true;
      aDEdLaengeb.ReadOnly := true;
      end else
        begin
        aDEdAlpha.ReadOnly := false;
        aDEdBeta.ReadOnly := false;
        aDEdLaengeb.ReadOnly := false;
        end
    end;
  end else

if aDEdLaengeb.Text > '0' then
  begin
  if aDEdAlpha.Text > '0' then
    begin
    if aDEdGamma.Text > '0' then
      begin
      aDEdBeta.ReadOnly := true;
      aDEdLaengea.ReadOnly := true;
      aDEdLaengec.ReadOnly := true;
      end else
        begin
        aDEdBeta.ReadOnly := false;
        aDEdLaengea.ReadOnly := false;
        aDEdLaengec.ReadOnly := false;
        end;
    end else
  if aDEdBeta.Text > '0' then
    begin
    if aDEdGamma.Text > '0' then
      begin
      aDEdAlpha.ReadOnly := true;
      aDEdLaengea.ReadOnly := true;
      aDEdLaengec.ReadOnly := true;
      end else
         begin
          aDEdAlpha.ReadOnly := false;
         aDEdLaengea.ReadOnly := false;
         aDEdLaengec.ReadOnly := false;
          end;
    end else
  if aDEdGamma.Text > '0' then
    begin
    if aDEdLaengec.Text > '0' then
      begin
      aDEdAlpha.ReadOnly := true;
      aDEdBeta.ReadOnly := true;
      aDEdLaengea.ReadOnly := true;
      end else
        begin
        aDEdAlpha.ReadOnly := false;
        aDEdBeta.ReadOnly := false;
        aDEdLaengea.ReadOnly := false;
        end
    end;
  end else

if aDEdLaengec.Text > '0' then
  begin
  if aDEdAlpha.Text > '0' then
    begin
    if aDEdGamma.Text > '0' then
      begin
      aDEdBeta.ReadOnly := true;
      aDEdLaengea.ReadOnly := true;
      aDEdLaengeb.ReadOnly := true;
      end else
       begin
       aDEdBeta.ReadOnly := false;
       aDEdLaengea.ReadOnly := false;
       aDEdLaengeb.ReadOnly := false;
       end
    end else
  if aDEdBeta.Text > '0' then
    begin
      if aDEdGamma.Text > '0' then
      begin
      aDEdAlpha.ReadOnly := true;
      aDEdLaengea.ReadOnly := true;
      aDEdLaengeb.ReadOnly := true;
      end else
        begin
        aDEdAlpha.ReadOnly := false;
        aDEdLaengea.ReadOnly := false;
        aDEdLaengeb.ReadOnly := false;
        end
    end;
  end;
end;

procedure TForm1.aDEdLaengeaChange(Sender: TObject);
begin
if aDEdLaengea.Text > '0' then
  begin
  if aDEdAlpha.Text > '0' then
    begin
    if aDEdBeta.Text > '0' then
      begin
      aDEdGamma.ReadOnly := true;
      aDEdLaengeb.ReadOnly := true;
      aDEdLaengec.ReadOnly := true;
      end else
        begin
        aDEdGamma.ReadOnly := false;
        aDEdLaengeb.ReadOnly := false;
        aDEdLaengec.ReadOnly := false;
        end;
    if aDEdGamma.Text > '0' then
      begin
      aDEdBeta.ReadOnly := true;
      aDEdLaengeb.ReadOnly := true;
      aDEdLaengec.ReadOnly := true;
      end else
        begin
        aDEdBeta.ReadOnly := false;
        aDEdLaengeb.ReadOnly := false;
        aDEdLaengec.ReadOnly := false;
        end;
    if aDEdLaengeb.Text > '0' then
      begin
      aDEdBeta.ReadOnly := true;
      aDEdGamma.ReadOnly := true;
      aDEdLaengec.ReadOnly := true;
      end else
        begin
        aDEdBeta.ReadOnly := false;
        aDEdGamma.ReadOnly := false;
        aDEdLaengec.ReadOnly := false;
        end;
    if aDEdLaengec.Text > '0' then
      begin
      aDEdBeta.ReadOnly := true;
      aDEdGamma.ReadOnly := true;
      aDEdLaengeb.ReadOnly := true;
      end else
        begin
        aDEdBeta.ReadOnly := false;
        aDEdGamma.ReadOnly := false;
        aDEdLaengeb.ReadOnly := false;
        end
    end else
  if aDEdBeta.Text > '0' then
    begin
    if aDEdGamma.Text > '0' then
      begin
      aDEdAlpha.ReadOnly := true;
      aDEdLaengeb.ReadOnly := true;
      aDEdLaengec.ReadOnly := true;
      end else
        begin
        aDEdAlpha.ReadOnly := false;
        aDEdLaengeb.ReadOnly := false;
        aDEdLaengec.ReadOnly := false;
        end;
    if aDEdLaengeb.Text > '0' then
      begin
      aDEdAlpha.ReadOnly := true;
      aDEdGamma.ReadOnly := true;
      aDEdLaengec.ReadOnly := true;
      end else
        begin
        aDEdAlpha.ReadOnly := false;
        aDEdGamma.ReadOnly := false;
        aDEdLaengec.ReadOnly := false;
        end;
    if aDEdLaengec.Text > '0' then
      begin
      aDEdAlpha.ReadOnly := true;
      aDEdGamma.ReadOnly := true;
      aDEdLaengeb.ReadOnly := true;
      end else
        begin
        aDEdAlpha.ReadOnly := false;
        aDEdGamma.ReadOnly := false;
        aDEdLaengeb.ReadOnly := false;
        end
    end else
  if aDEdGamma.Text > '0' then
    begin
    if aDEdLaengeb.Text > '0' then
      begin
      aDEdAlpha.ReadOnly := true;
      aDEdBeta.ReadOnly := true;
      aDEdLaengec.ReadOnly := true;
      end else
        begin
        aDEdAlpha.ReadOnly := false;
        aDEdBeta.ReadOnly := false;
        aDEdLaengec.ReadOnly := false;
        end;
    if aDEdLaengec.Text > '0' then
      begin
      aDEdAlpha.ReadOnly := true;
      aDEdBeta.ReadOnly := true;
      aDEdLaengeb.ReadOnly := true;
      end else
        begin
        aDEdAlpha.ReadOnly := false;
        aDEdBeta.ReadOnly := false;
        aDEdLaengeb.ReadOnly := false;
        end
    end;
  end;
end;

procedure TForm1.aDEdLaengebChange(Sender: TObject);
begin
if aDEdLaengea.Text > '0' then
  begin
  if aDEdAlpha.Text > '0' then
    begin
    if aDEdLaengeb.Text > '0' then
      begin
      aDEdBeta.ReadOnly := true;
      aDEdGamma.ReadOnly := true;
      aDEdLaengec.ReadOnly := true;
      end else
        begin
        aDEdBeta.ReadOnly := false;
        aDEdGamma.ReadOnly := false;
        aDEdLaengec.ReadOnly := false;
        end;
    end else
  if aDEdBeta.Text > '0' then
    begin
    if aDEdLaengeb.Text > '0' then
      begin
      aDEdAlpha.ReadOnly := true;
      aDEdGamma.ReadOnly := true;
      aDEdLaengec.ReadOnly := true;
      end else
        begin
        aDEdAlpha.ReadOnly := false;
        aDEdGamma.ReadOnly := false;
        aDEdLaengec.ReadOnly := false;
        end;
    end else
  if aDEdGamma.Text > '0' then
    begin
    if aDEdLaengeb.Text > '0' then
      begin
      aDEdAlpha.ReadOnly := true;
      aDEdBeta.ReadOnly := true;
      aDEdLaengec.ReadOnly := true;
      end else
        begin
        aDEdAlpha.ReadOnly := false;
        aDEdBeta.ReadOnly := false;
        aDEdLaengec.ReadOnly := false;
        end;
    end else
  if aDEdLaengeb.Text > '0' then
    begin
    if aDEdLaengec.Text > '0' then
      begin
      aDEdAlpha.ReadOnly := true;
      aDEdBeta.ReadOnly := true;
      aDEdGamma.ReadOnly := true;
      end else
        begin
        aDEdAlpha.ReadOnly := false;
        aDEdBeta.ReadOnly := false;
        aDEdGamma.ReadOnly := false;
        end
    end;
  end else
 
if aDEdLaengeb.Text > '0' then
  begin
  if aDEdAlpha.Text > '0' then
    begin
    if aDEdBeta.Text > '0' then
      begin
      aDEdGamma.ReadOnly := true;
      aDEdLaengea.ReadOnly := true;
      aDEdLaengec.ReadOnly := true;
      end else
        begin
        aDEdGamma.ReadOnly := false;
        aDEdLaengea.ReadOnly := false;
        aDEdLaengec.ReadOnly := false;
        end;
    if aDEdGamma.Text > '0' then
      begin
      aDEdBeta.ReadOnly := true;
      aDEdLaengea.ReadOnly := true;
      aDEdLaengec.ReadOnly := true;
      end else
        begin
        aDEdBeta.ReadOnly := false;
        aDEdLaengea.ReadOnly := false;
        aDEdLaengec.ReadOnly := false;
        end;
    if aDEdLaengec.Text > '0' then
      begin
      aDEdBeta.ReadOnly := true;
      aDEdGamma.ReadOnly := true;
      aDEdLaengea.ReadOnly := true;
      end else
        begin
        aDEdBeta.ReadOnly := false;
        aDEdGamma.ReadOnly := false;
        aDEdLaengea.ReadOnly := false;
        end
    end else
  if aDEdBeta.Text > '0' then
    begin
    if aDEdGamma.Text > '0' then
      begin
      aDEdAlpha.ReadOnly := true;
      aDEdLaengea.ReadOnly := true;
      aDEdLaengec.ReadOnly := true;
      end else
         begin
          aDEdAlpha.ReadOnly := false;
         aDEdLaengea.ReadOnly := false;
         aDEdLaengec.ReadOnly := false;
          end;
    if aDEdLaengec.Text > '0' then
      begin
      aDEdAlpha.ReadOnly := true;
      aDEdGamma.ReadOnly := true;
      aDEdLaengea.ReadOnly := true;
      end else
        begin
        aDEdAlpha.ReadOnly := false;
        aDEdGamma.ReadOnly := false;
        aDEdLaengea.ReadOnly := false;
        end
    end else
  if aDEdGamma.Text > '0' then
    begin
    if aDEdLaengec.Text > '0' then
      begin
      aDEdAlpha.ReadOnly := true;
      aDEdBeta.ReadOnly := true;
      aDEdLaengea.ReadOnly := true;
      end else
        begin
        aDEdAlpha.ReadOnly := false;
        aDEdBeta.ReadOnly := false;
        aDEdLaengea.ReadOnly := false;
        end
    end;
  end;
end;

procedure TForm1.aDEdLaengecChange(Sender: TObject);
begin
if aDEdLaengea.Text > '0' then
  begin
  if aDEdAlpha.Text > '0' then
    begin
    if aDEdLaengec.Text > '0' then
      begin
      aDEdBeta.ReadOnly := true;
      aDEdGamma.ReadOnly := true;
      aDEdLaengeb.ReadOnly := true;
      end else
        begin
        aDEdBeta.ReadOnly := false;
        aDEdGamma.ReadOnly := false;
        aDEdLaengeb.ReadOnly := false;
        end
    end else
  if aDEdBeta.Text > '0' then
    begin
    if aDEdLaengec.Text > '0' then
      begin
      aDEdAlpha.ReadOnly := true;
      aDEdGamma.ReadOnly := true;
      aDEdLaengeb.ReadOnly := true;
      end else
        begin
        aDEdAlpha.ReadOnly := false;
        aDEdGamma.ReadOnly := false;
        aDEdLaengeb.ReadOnly := false;
        end
    end else
  if aDEdGamma.Text > '0' then
    begin
    if aDEdLaengec.Text > '0' then
      begin
      aDEdAlpha.ReadOnly := true;
      aDEdBeta.ReadOnly := true;
      aDEdLaengeb.ReadOnly := true;
      end else
        begin
        aDEdAlpha.ReadOnly := false;
        aDEdBeta.ReadOnly := false;
        aDEdLaengeb.ReadOnly := false;
        end
    end else
  if aDEdLaengeb.Text > '0' then
    begin
    if aDEdLaengec.Text > '0' then
      begin
      aDEdAlpha.ReadOnly := true;
      aDEdBeta.ReadOnly := true;
      aDEdGamma.ReadOnly := true;
      end else
        begin
        aDEdAlpha.ReadOnly := false;
        aDEdBeta.ReadOnly := false;
        aDEdGamma.ReadOnly := false;
        end
    end;
  end else

if aDEdLaengec.Text > '0' then
  begin
  if aDEdAlpha.Text > '0' then
    begin
    if aDEdBeta.Text > '0' then
      begin
      aDEdGamma.ReadOnly := true;
      aDEdLaengea.ReadOnly := true;
      aDEdLaengeb.ReadOnly := true;
      end else
       begin
       aDEdGamma.ReadOnly := false;
       aDEdLaengea.ReadOnly := false;
       aDEdLaengeb.ReadOnly := false;
       end;
    if aDEdGamma.Text > '0' then
      begin
      aDEdBeta.ReadOnly := true;
      aDEdLaengea.ReadOnly := true;
      aDEdLaengeb.ReadOnly := true;
      end else
       begin
       aDEdBeta.ReadOnly := false;
       aDEdLaengea.ReadOnly := false;
       aDEdLaengeb.ReadOnly := false;
       end
    end else
  if aDEdBeta.Text > '0' then
    begin
      if aDEdGamma.Text > '0' then
      begin
      aDEdAlpha.ReadOnly := true;
      aDEdLaengea.ReadOnly := true;
      aDEdLaengeb.ReadOnly := true;
      end else
        begin
        aDEdAlpha.ReadOnly := false;
        aDEdLaengea.ReadOnly := false;
        aDEdLaengeb.ReadOnly := false;
        end
    end;
  end;
end;

end.
InfoBox Formular
Delphi-Quellcode:
unit UnitInfoBox;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, Buttons;

type
  TForm2 = class(TForm)
    Panel1: TPanel;
    ProgramIcon: TImage;
    ProductName: TLabel;
    Version: TLabel;
    Copyright: TLabel;
    Comments: TLabel;
    OKButton: TButton;
    procedure FormCreate(Sender: TObject);
    procedure FormPaint(Sender: TObject);
    procedure OKButtonClick(Sender: TObject);
    procedure BitBtn1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form2: TForm2;

implementation

uses UnitBerechnen;

{$R *.dfm}

procedure TForm2.FormCreate(Sender: TObject);
var
  formregion, beakregion: HRGN;
  beak: Array [0..2] of TPoint;
begin
  inherited;
  formregion := CreateRoundRectRgn(
                  0, 50, clientwidth, clientheight,
                  40, 40 );
  beak[0] := Point( 50, 50 );
  beak[1] := Point( 55, 0 );
  beak[2] := Point( 80, 50 );
  beakregion := CreatePolygonRgn( beak, 3, WINDING );
  CombineRgn( formregion, formregion, beakregion, RGN_OR );

  DeleteObject( beakregion );
  SetWindowRgn( handle, formregion, true );

  Form2.Left := Form1.Left +145;
  Form2.Top := Form1.Top +45;
end;

procedure TForm2.FormPaint(Sender: TObject);
var
  temprgn: HRGN;
begin
  inherited;
  With Canvas.Brush Do Begin
    Color := clBlack;
    Style := bsSolid;
  End;
  temprgn := CreateRectRgn(0,0,1,1);
  GetWindowRgn( Handle, temprgn );
  FrameRgn( Canvas.Handle, temprgn,
            Canvas.Brush.handle, 1, 1 );
  DeleteObject( temprgn );
end;

procedure TForm2.OKButtonClick(Sender: TObject);
begin
  inherited;
close
end;

end.
Danke schon mal
Grüße Anoymouserver

Sir Rufo 19. Aug 2012 01:21

AW: Zugriffsverletzung bei Adresse 0045976B ...
 
Und in welcher Zeile taucht der Fehler auf?

btw. war ne ganz schöne Tipp/Kopierarbeit ;)

Ab dem nächsten Projekt solltest du dich mit DRY, KISS und der Codeformatierung beschäftigen ;)

himitsu 19. Aug 2012 01:25

AW: Zugriffsverletzung bei Adresse 0045976B ...
 
Es wäre natürlich praktisch gewesen, wenn man nur die Codezeilen postet, welche einem der Debugger als vermutliche Fehlerstelle anzeigt.
Aber bei ganzen Dateien, da macht es sich als Dateianhang bestimmt nicht schlecht. :stupid:

Zitat:

Lesen von Adresse 00000000
Adresse $000000** = nil + eventuelles Offset

Du willst also irgendwo auf was zugreifen, was nicht "existiert", meißt ein Objekt oder Pointer, welches auf NIL steht.

Was du falsch machst:
Ich empfehle ein Tutorial zum Thema Debugging.

Haltepunkt(e) an den Anfang deiner Methoden setzen, welche zu dem Zeitpunkt ausgeführt werden und dann so lange mit F7, bzw. F8 weiter, bis es knallt und nebenbei immer fleißig auf die Werte der Variablen schauen (ddas NIL wird sich da bestimmt nicht übersehen lassen).
Wenn du die Codezeile gefunden hast, wo es knallt und du keine Variablen mehr ansehn kannst, dann Haltepunkt auf die Zeile, das Programm neu starten und wenn's da anhält, dann die Vablen ansehn und schon hast du den Fehler.

anoymouserver 19. Aug 2012 01:29

AW: Zugriffsverletzung bei Adresse 0045976B ...
 
Zitat:

Zitat von Sir Rufo (Beitrag 1178728)
Und in welcher Zeile taucht der Fehler auf?

nach der Meldung ist immer diese Zeile markiert:

Delphi-Quellcode:
Form2.ShowModal; {Infobox öffnen}
wenn du mir zur Codeformatierung gute Tipps geben kannst bin ich immer dafür offen :D (wie gesagt ist mein erstes Programm)

anoymouserver 19. Aug 2012 01:31

AW: Zugriffsverletzung bei Adresse 0045976B ...
 
naja das problem ist ich habe den Debugger laufen lassen aber er sag nirgenwo 'Fehler'

himitsu 19. Aug 2012 01:33

AW: Zugriffsverletzung bei Adresse 0045976B ...
 
Tja, wie gesagt.
Haltepnkt drauf, Mauszeger über "Form2" halten und staunen ... da wird dann doch nicht etwa NIL angezeigt?

Zitat:

Zitat von Sir Rufo (Beitrag 1178728)
btw. war ne ganz schöne Tipp/Kopierarbeit ;)

Ab dem nächsten Projekt solltest du dich mit DRY, KISS und der Codeformatierung beschäftigen ;)

Was er damit meint ist, daß sich Methoden wie aDEdLaengecChange, locker in nur kurzen 3 Zeilen Quellcode schreiben lassen, falls man sich nicht so viel Arbeit machen will. :angle2:

Sir Rufo 19. Aug 2012 01:34

AW: Zugriffsverletzung bei Adresse 0045976B ...
 
Ok, das bedeutet, dass es noch keine Instanz für die Form gibt ;)

Die Form2 hast du aus der Liste der automatisch zu erstellenden Formulare entfernt.
Das ist schon soweit ok, aber dann musst du dich auch um die Erzeugug einer Instanz kümmern.

Für so eine billige Form-ShowModal Instanz kann man folgendes benutzen:
Delphi-Quellcode:
with TForm2.Create do
  try
    ShowModal;
  finally
    Free;
  end;

himitsu 19. Aug 2012 01:35

AW: Zugriffsverletzung bei Adresse 0045976B ...
 
Zitat:

Zitat von anoymouserver (Beitrag 1178731)
naja das problem ist ich habe den Debugger laufen lassen aber er sag nirgenwo 'Fehler'

Komisch, ich denke er sagt dir daß dort ein Fehler ist? :roll:

Zitat:

Meldung: 'Zugriffsverletzung bei Adresse 0045976B in Modul 'ProjektBerechnen.exe'. Lesen von Adresse 00000000'. Prozess wurde angehalten. Mit Einzelne Anweisung oder Start fortsetzen.

Sir Rufo 19. Aug 2012 01:37

AW: Zugriffsverletzung bei Adresse 0045976B ...
 
Zitat:

Zitat von anoymouserver (Beitrag 1178731)
naja das problem ist ich habe den Debugger laufen lassen aber er sag nirgenwo 'Fehler'

Na logo sagt er das, denn
Zitat:

Zitat von anoymouserver (Beitrag 1178730)
Zitat:

Zitat von Sir Rufo (Beitrag 1178728)
Und in welcher Zeile taucht der Fehler auf?

nach der Meldung ist immer diese Zeile markiert:

Delphi-Quellcode:
Form2.ShowModal; {Infobox öffnen}


anoymouserver 19. Aug 2012 01:41

AW: Zugriffsverletzung bei Adresse 0045976B ...
 
Zitat:

Zitat von Sir Rufo (Beitrag 1178733)
Für so eine billige Form-ShowModal Instanz kann man folgendes benutzen:
Delphi-Quellcode:
with TForm2.Create do
  try
    ShowModal;
  finally
    Free;
  end;

wenn ich das übernehme kommt die Meldung 'Nicht genügend wirkliche Parameter'?




Zitat:

Zitat von himitsu (Beitrag 1178732)
Ab dem nächsten Projekt solltest du dich mit DRY, KISS und der Codeformatierung beschäftigen ;)

Was er damit meint ist, daß sich Methoden wie aDEdLaengecChange, locker in nur kurzen 3 Zeilen Quellcode schreiben lassen, falls man sich nicht so viel Arbeit machen will. :angle2:[/QUOTE]
das dacht ich mir :D aber ich habe bis jetzt leider noch keine Ahnung wie ... aber Tipps nehm ich gerne an :)

anoymouserver 19. Aug 2012 01:44

AW: Zugriffsverletzung bei Adresse 0045976B ...
 
Zitat:

Zitat von Sir Rufo (Beitrag 1178735)
Zitat:

Zitat von anoymouserver (Beitrag 1178731)
naja das problem ist ich habe den Debugger laufen lassen aber er sag nirgenwo 'Fehler'

Na logo sagt er das, denn
Zitat:

Zitat von anoymouserver (Beitrag 1178730)
Zitat:

Zitat von Sir Rufo (Beitrag 1178728)
Und in welcher Zeile taucht der Fehler auf?

nach der Meldung ist immer diese Zeile markiert:

Delphi-Quellcode:
Form2.ShowModal; {Infobox öffnen}


ja schon aber das sagt er erst wenn ich das Prog. starte und versuche die Infobox zu öffnen nicht wenn ich mich mit F7 durcharbeite ...

und dann markiert er sie Zeile auch blau und nicht wie sonst bei fehlern rot

Sir Rufo 19. Aug 2012 01:46

AW: Zugriffsverletzung bei Adresse 0045976B ...
 
Upps, jo, das muss
Delphi-Quellcode:
TForm2.Create( nil )
heißen, da muss ja ein Owner angegeben werden (bzw. keiner -> nil, weil wir das Freigeben selber übernehmen)

Sir Rufo 19. Aug 2012 01:49

AW: Zugriffsverletzung bei Adresse 0045976B ...
 
Zitat:

Zitat von anoymouserver (Beitrag 1178737)
Zitat:

Zitat von Sir Rufo (Beitrag 1178735)
Zitat:

Zitat von anoymouserver (Beitrag 1178731)
naja das problem ist ich habe den Debugger laufen lassen aber er sag nirgenwo 'Fehler'

Na logo sagt er das, denn
Zitat:

Zitat von anoymouserver (Beitrag 1178730)
Zitat:

Zitat von Sir Rufo (Beitrag 1178728)
Und in welcher Zeile taucht der Fehler auf?

nach der Meldung ist immer diese Zeile markiert:

Delphi-Quellcode:
Form2.ShowModal; {Infobox öffnen}


ja schon aber das sagt er erst wenn ich das Prog. starte und versuche die Infobox zu öffnen nicht wenn ich mich mit F7 durcharbeite ...

und dann markiert er sie Zeile auch blau und nicht wie sonst bei fehlern rot

Debugger <> Compiler
Der Compiler sagt dir beim Erzeugen, ob es syntaktische Fehler gibt, weil die eben nicht zu übersetzen sind.
Der Debugger schlägt erst dann an, wenn das Programm an eine Stelle kommt, wo z.B. so ein Zugriff nicht funktioniert.

anoymouserver 19. Aug 2012 01:51

AW: Zugriffsverletzung bei Adresse 0045976B ...
 
ich hab das jetzt hier eingefügt:
Delphi-Quellcode:
procedure TForm1.Info1Click(Sender: TObject);
begin
with TForm2.Create( nil ) do
  try
    ShowModal;
  finally
    Free;
  end; {Infobox öffnen}
end;
aber jetzt bekomm ich eine ähnliche fehlermeldung

Sir Rufo 19. Aug 2012 01:53

AW: Zugriffsverletzung bei Adresse 0045976B ...
 
Zitat:

Zitat von anoymouserver (Beitrag 1178740)
ich hab das jetzt hier eingefügt:
Delphi-Quellcode:
procedure TForm1.Info1Click(Sender: TObject);
begin
with TForm2.Create( nil ) do
  try
    ShowModal;
  finally
    Free;
  end; {Infobox öffnen}
end;
aber jetzt bekomm ich eine ähnliche fehlermeldung

Die da lautet und an welcher Stelle?

anoymouserver 19. Aug 2012 02:00

AW: Zugriffsverletzung bei Adresse 0045976B ...
 
jetzt lautet die Meldung: 'Zugriffsverletzung bei Adresse 004379B8 in Modul 'ProjektBerechnen.exe'. Lesen von Adresse 00000048'. Prozess wurde angehalten. Mit Einzelne Anweisung oder Start fortsetzen.

aber nach wiederholtem OK drücken tauch immerhin schonmal die Infobox auf

Medium 19. Aug 2012 03:00

AW: Zugriffsverletzung bei Adresse 0045976B ...
 
Dann passiert etwas beim Erzeugen oder OnShow des TForm2 ein Zugriff ins Nichts. Haltepunkt auf die Zeile mit dem Create(), und mit F7 durchsteppen. Wenn das so weit geht, Haltepunkt auf die Zeile mit OnShow, mit F7 durchsteppen. Spätestens dort sollte die genaue Methode/Zeile klar werden, an der du ins Leere greifst.
Hier in der DP gibt's übrigens ein Tutorial zur Benutzung des Debuggers!

Bummi 19. Aug 2012 06:22

AW: Zugriffsverletzung bei Adresse 0045976B ...
 
Du erzeugst so:
Delphi-Quellcode:
with TForm2.Create( nil ) do
  try
    ShowModal;
  finally
    Free;
  end;
und greifst dann so zu ...
Delphi-Quellcode:
  Form2.Left := Form1.Left +145;
  Form2.Top := Form1.Top +45;
Form1 zeigt hier ins Nirvana, entweder Du verwendest
Delphi-Quellcode:
Form2 := TForm2.Create( nil );

with Form2 do
  try
    ShowModal;
  finally
    Free;
  end;
oder besser, lass den Bezug auf die Instanz weg
Delphi-Quellcode:
  Left := Application.Mainform.Left +145;
  Top := Application.Mainform.Top +45;

mkinzler 19. Aug 2012 09:45

AW: Zugriffsverletzung bei Adresse 0045976B ...
 
Zitat:

Zitat von Sir Rufo (Beitrag 1178733)
Ok, das bedeutet, dass es noch keine Instanz für die Form gibt ;)

Die Form2 hast du aus der Liste der automatisch zu erstellenden Formulare entfernt.
Das ist schon soweit ok, aber dann musst du dich auch um die Erzeugug einer Instanz kümmern.

Für so eine billige Form-ShowModal Instanz kann man folgendes benutzen:
Delphi-Quellcode:
with TForm2.Create do
  try
    ShowModal;
  finally
    Free;
  end;

Am Besten aber ohne with. Sonst handelt man sich u.U. weitere Ungereimtheiten im Verhalten ein.

anoymouserver 19. Aug 2012 11:03

AW: Zugriffsverletzung bei Adresse 0045976B ...
 
Zitat:

Zitat von Bummi (Beitrag 1178746)
oder besser, lass den Bezug auf die Instanz weg
Delphi-Quellcode:
  Left := Application.Mainform.Left +145;
  Top := Application.Mainform.Top +45;

damit funktoniert es bestens, vielen Dank

P.S.: wenn aber noch jemand verraten kann wie ich wie geschrieben quelltext spare währe ich sehr erfreut ... denn langsam mach mir die Länge ein wenig zu schaffen :D
Zitat:

Was er damit meint ist, daß sich Methoden wie aDEdLaengecChange, locker in nur kurzen 3 Zeilen Quellcode schreiben lassen, falls man sich nicht so viel Arbeit machen will. :angle2:

himitsu 19. Aug 2012 12:12

AW: Zugriffsverletzung bei Adresse 0045976B ...
 
Zitat:

Zitat von anoymouserver (Beitrag 1178736)
wenn ich das übernehme kommt die Meldung 'Nicht genügend wirkliche Parameter'?

Bei sowas schaut man einfach nach, was für Parameter fehlen.
> OH (Delphi-Referenz durchsuchenTForm.Create)
> Quellcodevervollständigung, aber hier eher das CodeInsight (halte mal die Maus über das "Create" und warte ein Sekündchen)

Was aber noch "sehr schlecht" ist, die radikale Verwendung der bösen globalen Variablen.
Wenn du Code innerhalb der Mothoden von TForm1 hast, dann verwende darin niemals Variablen wie Form1.
Du bist da schon in TForm1 drin, dann muß man doch nicht den gewählichen Umweg über die Klippe "Form1" nehmen, um am Ende wieder auf sich selber zuzugreifen.
Das ist ja so, als wenn du Gott sagst er solle dich was fragen. (schneller geht's du fragst dich selber)

Wie hieß nochmal das Spiel, wo Einer dem Anderem was zuflüstert, das dann immer so weitergeht und nach einer Weile kommt was ganz Anderes raus?

Zitat:

aber ich habe bis jetzt leider noch keine Ahnung wie ... aber Tipps nehm ich gerne an
Zitat:

Zitat von anoymouserver
Hi sorry falls ich störe aber du sagtest
...
kannst du mir bitte sagen wie, denn langsam bekomm ich Probleme weil es unübersichtlich wird ... :D

Es gibt ja eigentlich genügent Delphitutorials. :angle:

Und für den Anfang:
Delphi-Quellcode:
if B then
  A := True
else
  A := False;

A := B;
Delphi-Quellcode:
if B then
  A := False
else
  A := True;

A := not B;
Delphi-Quellcode:
if C then begin
  if B then
    A := True
  else
    A := False;
end else begin
  if B then
    A := False
  else
    A := False;
end;

A := B and C;
Delphi-Quellcode:
if C then begin
  if B then
    A := True
  else
    A := True;
end else begin
  if B then
    A := True
  else
    A := False;
end;

A := B or C;


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:57 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz