Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Komponenten in Prozedur nicht erkannt (https://www.delphipraxis.net/199050-komponenten-prozedur-nicht-erkannt.html)

IckyWolf 20. Dez 2018 17:44

Komponenten in Prozedur nicht erkannt
 
Ich versuche mich an dem Spiel Kniffel mit mehreren Spielern.
Dabei dachte ich daran, den Spielzug nach dem Würfeln über einen Button auswählen zu können, welcher nur erscheint, wenn das entsprechende Feld noch frei ist.
Bei der Umsetzung habe ich die Information in einem record pro Spieler gespeichert, wobei am Anfang jeder Runde ausgelesen wird, welche Spielzüge noch frei sind(siehe Quelltext).
Befindet sich die Prozedur innerhalb eines Ereignisses, funktioniert alles so weit, um jedoch nicht extra klicken zu müssen, wollte ich diese am Ende der Auswahl automatisch ausführen lassen.
Nutze ich hierfür eine eigene Prozedur, damit der Quelltext nicht zu lang wird, welche bei jedem Auswahlbutton aufgerufen wird, werden die Komponenten in der prozedur jedoch nicht erkannt (z.B. Error: Identifier not found "BitBtn_eins").

Delphi-Quellcode:
procedure neu;
    if Spieler=1 then
    begin
      BitBtn_eins.visible:=SpielerA.eins;
      BitBtn_zwei.visible:=SpielerA.Zwei;
      BitBtn_drei.visible:=SpielerA.drei;
      BitBtn_vier.visible:=SpielerA.vier;
      BitBtn_fuenf.visible:=SpielerA.fuenf;
      BitBtn_sechs.visible:=SpielerA.sechs;
      BitBtn_d.visible:=SpielerA.d;
      BitBtn_v.visible:=SpielerA.v;
      BitBtn_fh.visible:=SpielerA.fh;
      BitBtn_ks.visible:=SpielerA.ks;
      BitBtn_gs.visible:=SpielerA.gs;
      BitBtn_k.visible:=SpielerA.k;
      BitBtn_c.visible:=SpielerA.c;
    end;

    if Spieler=2 then
    begin
      BitBtn_eins.visible:=Spielerb.eins;
      BitBtn_zwei.visible:=Spielerb.Zwei;
      BitBtn_drei.visible:=Spielerb.drei;
      BitBtn_vier.visible:=Spielerb.vier;
      BitBtn_fuenf.visible:=Spielerb.fuenf;
      BitBtn_sechs.visible:=Spielerb.sechs;
      BitBtn_d.visible:=Spielerb.d;
      BitBtn_v.visible:=Spielerb.v;
      BitBtn_fh.visible:=Spielerb.fh;
      BitBtn_ks.visible:=Spielerb.ks;
      BitBtn_gs.visible:=Spielerb.gs;
      BitBtn_k.visible:=Spielerb.k;
      BitBtn_c.visible:=Spielerb.c;
  end;

hoika 20. Dez 2018 17:48

AW: Komponenten in Prozedur nicht erkannt
 
Hallo,
du muss Neu im Formular definieren.

Delphi-Quellcode:
Type
  TForm1 = class(TForm)
  private
    procedure Neu;
  end;

implementation

procedure TForm1.Neu;
begin
end;

Und herzlich willkommen im Forum!

IckyWolf 20. Dez 2018 18:38

AW: Komponenten in Prozedur nicht erkannt
 
Vielen Dank,das nächste Mal weiß ich bescheid :)

Nochwas:
Habe mich wahrscheinlich irgentwo vertippt
Fehler: project1.lpr(18,34) Error: Identifier not found "Form1"

Delphi-Quellcode:
begin
  RequireDerivedFormResource:=True;
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.

Delphi.Narium 20. Dez 2018 18:48

AW: Komponenten in Prozedur nicht erkannt
 
Ob er Form1 kennt oder nicht, ergibt sich irgendwo aus dem Quelltext oberhalb des begin. Ohne den vollständigen Quelltext der Datei, können wir nicht helfen, da alle wesentlichen Informationen fehlen.

IckyWolf 20. Dez 2018 19:11

AW: Komponenten in Prozedur nicht erkannt
 
Vielen Dank, dass ihr euch die Zeit nehmt mir zu helfen

Delphi-Quellcode:
program project1;

{$mode objfpc}{$H+}

uses
  {$IFDEF UNIX}{$IFDEF UseCThreads}
  cthreads,
  {$ENDIF}{$ENDIF}
  Interfaces, // this includes the LCL widgetset
  Forms, Unit1
  { you can add units after this };

{$R *.res}

begin
  RequireDerivedFormResource:=True;
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.
}

Delphi.Narium 20. Dez 2018 19:18

AW: Komponenten in Prozedur nicht erkannt
 
Form1 ist dann wohl vermutlich in Unit1 definiert.

Schau dort bitte mal nach, ob dem wirklich so ist. Ggfls. poste mal den Quelltext der Unit1, denn eventuell ist dadrinne irgendwas nicht so, wie erwartet.

Hast Du dort (eventuell unbeabischtigt) beim Erstellen / Ändern Deine
Delphi-Quellcode:
prozedure neu;
etwas verändert?

hoika 20. Dez 2018 19:26

AW: Komponenten in Prozedur nicht erkannt
 
Hallo,
noch mal zur Unit Form1.

Delphi-Quellcode:
var
  Form1: TForm1; // das hast du wohl rausgeworfen

implementation

IckyWolf 21. Dez 2018 12:17

AW: Komponenten in Prozedur nicht erkannt
 
Delphi-Quellcode:
unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, Grids,
  StdCtrls, ExtCtrls, Menus, Buttons, ActnList,
  test;

type

  { TForm1 }

  TForm1 = class(TForm)
    BitBtn_c: TBitBtn;
    BitBtn10: TBitBtn;
    BitBtn9: TBitBtn;
    BitBtn_d: TBitBtn;
    BitBtn_v: TBitBtn;
    BitBtn_fh: TBitBtn;
    BitBtn_ks: TBitBtn;
    BitBtn_gs: TBitBtn;
    BitBtn_k: TBitBtn;
    BitBtn_eins: TBitBtn;
    BitBtn_zwei: TBitBtn;
    BitBtn_drei: TBitBtn;
    BitBtn_vier: TBitBtn;
    BitBtn_fuenf: TBitBtn;
    BitBtn_sechs: TBitBtn;
    BitBtn_Versuche: TBitBtn;
    BitBtn2: TBitBtn;
    CheckBox1: TCheckBox;
    CheckBox2: TCheckBox;
    CheckBox3: TCheckBox;
    CheckBox4: TCheckBox;
    CheckBox5: TCheckBox;
    Edit_d: TEdit;
    Edit_v: TEdit;
    Edit_fh: TEdit;
    Edit4: TEdit;
    Edit5: TEdit;
    Edit6: TEdit;
    GroupBox1: TGroupBox;
    Image1: TImage;
    Image2: TImage;
    Image3: TImage;
    Image4: TImage;
    Image5: TImage;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    MainMenu1: TMainMenu;
    MenuItem1: TMenuItem;
    MenuItem10: TMenuItem;
    MenuItem11: TMenuItem;
    MenuItem12: TMenuItem;
    MenuItem13: TMenuItem;
    MenuItem14: TMenuItem;
    MenuItem15: TMenuItem;
    MenuItem2: TMenuItem;
    MenuItem3: TMenuItem;
    MenuItem4: TMenuItem;
    MenuItem5: TMenuItem;
    MenuItem6: TMenuItem;
    MenuItem7: TMenuItem;
    MenuItem8: TMenuItem;
    MenuItem9: TMenuItem;
    Panel1: TPanel;
    StringGrid1: TStringGrid;
    procedure BitBtn10Click(Sender: TObject);
    procedure BitBtn2Click(Sender: TObject);
    procedure BitBtn9Click(Sender: TObject);
    procedure BitBtn_dClick(Sender: TObject);
    procedure BitBtn_VersucheClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);

  private
    procedure Neu;

  public



  var
  Form1: TForm1;

  end;
ist das "end;" vielleicht an der falschen stelle?...ohne funktioniert es jedenfalls nicht

Delphi.Narium 21. Dez 2018 12:29

AW: Komponenten in Prozedur nicht erkannt
 
Das ist so niemals vollständig.

Am Ende einer Unit müsste eigentlich ein
Delphi-Quellcode:
end.
stehen.

Es fehlt die komplette Implementierung, also alles ab dem
Delphi-Quellcode:
implementation
welches unter dem
Delphi-Quellcode:
  Form1: TForm1;
stehen muss.

Hast Du die vollständige Unit1 gespostete?

Wenn nein, dann hole das bitte nach, es ist so unmöglich einen Fehler zu finden.

Ist es die vollständige Unit? Dann wurde da was ganz massiv versemmelt, weil der wesentliche Implementierungsteil fehlt und damit ein Kompilieren dieses Quelltextes kaum gelingen dürfte.

IckyWolf 21. Dez 2018 12:57

AW: Komponenten in Prozedur nicht erkannt
 
Delphi-Quellcode:
unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, Grids,
  StdCtrls, ExtCtrls, Menus, Buttons, ActnList,
  test;

type

  { TForm1 }

  TForm1 = class(TForm)
    BitBtn_c: TBitBtn;
    BitBtn10: TBitBtn;
    BitBtn9: TBitBtn;
    BitBtn_d: TBitBtn;
    BitBtn_v: TBitBtn;
    BitBtn_fh: TBitBtn;
    BitBtn_ks: TBitBtn;
    BitBtn_gs: TBitBtn;
    BitBtn_k: TBitBtn;
    BitBtn_eins: TBitBtn;
    BitBtn_zwei: TBitBtn;
    BitBtn_drei: TBitBtn;
    BitBtn_vier: TBitBtn;
    BitBtn_fuenf: TBitBtn;
    BitBtn_sechs: TBitBtn;
    BitBtn_Versuche: TBitBtn;
    BitBtn2: TBitBtn;
    CheckBox1: TCheckBox;
    CheckBox2: TCheckBox;
    CheckBox3: TCheckBox;
    CheckBox4: TCheckBox;
    CheckBox5: TCheckBox;
    Edit_d: TEdit;
    Edit_v: TEdit;
    Edit_fh: TEdit;
    Edit4: TEdit;
    Edit5: TEdit;
    Edit6: TEdit;
    GroupBox1: TGroupBox;
    Image1: TImage;
    Image2: TImage;
    Image3: TImage;
    Image4: TImage;
    Image5: TImage;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    MainMenu1: TMainMenu;
    MenuItem1: TMenuItem;
    MenuItem10: TMenuItem;
    MenuItem11: TMenuItem;
    MenuItem12: TMenuItem;
    MenuItem13: TMenuItem;
    MenuItem14: TMenuItem;
    MenuItem15: TMenuItem;
    MenuItem2: TMenuItem;
    MenuItem3: TMenuItem;
    MenuItem4: TMenuItem;
    MenuItem5: TMenuItem;
    MenuItem6: TMenuItem;
    MenuItem7: TMenuItem;
    MenuItem8: TMenuItem;
    MenuItem9: TMenuItem;
    Panel1: TPanel;
    StringGrid1: TStringGrid;
    procedure BitBtn10Click(Sender: TObject);
    procedure BitBtn2Click(Sender: TObject);
    procedure BitBtn9Click(Sender: TObject);
    procedure BitBtn_dClick(Sender: TObject);
    procedure BitBtn_VersucheClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);

  private
    procedure Neu;

  public



  var
  Form1: TForm1;

  end;




implementation

{$R *.lfm}

{ TForm1 }

var Spieler,Versuche,Runde,Schritt: Integer;
    SpielerA,SpielerB,SpielerC:record
      eins,zwei,drei,vier,fuenf,sechs,d,v,fh,ks,gs,k,c:boolean;
    end;
    Wuerfel:array [1..5]of Integer;

function Wurf:Integer;
begin
  Wurf:=Random(6)+1;
end;

//Neue Runde
procedure TForm1.Neu;
begin
  Schritt:=1;
  Spieler:=Spieler+1;
  if Spieler>3 then
  begin
    Spieler:=Spieler-3;
    Runde:=Runde+1;
  end;

  if Runde>13 then Abort//ShowMessage:='Spiel beendet'
  else
  begin
    if Spieler=1 then
    begin
      BitBtn_eins.visible:=SpielerA.eins;
      BitBtn_zwei.visible:=SpielerA.Zwei;
      BitBtn_drei.visible:=SpielerA.drei;
      BitBtn_vier.visible:=SpielerA.vier;
      BitBtn_fuenf.visible:=SpielerA.fuenf;
      BitBtn_sechs.visible:=SpielerA.sechs;
      BitBtn_d.visible:=SpielerA.d;
      BitBtn_v.visible:=SpielerA.v;
      BitBtn_fh.visible:=SpielerA.fh;
      BitBtn_ks.visible:=SpielerA.ks;
      BitBtn_gs.visible:=SpielerA.gs;
      BitBtn_k.visible:=SpielerA.k;
      BitBtn_c.visible:=SpielerA.c;
    end;

    if Spieler=2 then
    begin
      BitBtn_eins.visible:=Spielerb.eins;
      BitBtn_zwei.visible:=Spielerb.Zwei;
      BitBtn_drei.visible:=Spielerb.drei;
      BitBtn_vier.visible:=Spielerb.vier;
      BitBtn_fuenf.visible:=Spielerb.fuenf;
      BitBtn_sechs.visible:=Spielerb.sechs;
      BitBtn_d.visible:=Spielerb.d;
      BitBtn_v.visible:=Spielerb.v;
      BitBtn_fh.visible:=Spielerb.fh;
      BitBtn_ks.visible:=Spielerb.ks;
      BitBtn_gs.visible:=Spielerb.gs;
      BitBtn_k.visible:=Spielerb.k;
      BitBtn_c.visible:=Spielerb.c;
  end;

  if Spieler=3 then
  begin
    BitBtn_eins.visible:=Spielerc.eins;
    BitBtn_zwei.visible:=Spielerc.Zwei;
    BitBtn_drei.visible:=Spielerc.drei;
    BitBtn_vier.visible:=Spielerc.vier;
    BitBtn_fuenf.visible:=Spielerc.fuenf;
    BitBtn_sechs.visible:=Spielerc.sechs;
    BitBtn_d.visible:=Spielerc.d;
    BitBtn_v.visible:=Spielerc.v;
    BitBtn_fh.visible:=Spielerc.fh;
    BitBtn_ks.visible:=Spielerc.ks;
    BitBtn_gs.visible:=Spielerc.gs;
    BitBtn_k.visible:=Spielerc.k;
    BitBtn_c.visible:=Spielerc.c;
  end;

  Versuche:=3;
  BitBtn_Versuche.caption:='3';
  BitBtn_Versuche.Visible:=true;

  Checkbox1.caption:='';
  Checkbox2.caption:='';
  Checkbox3.caption:='';
  Checkbox4.caption:='';
  Checkbox5.caption:='';
  end;
end;


//Start
procedure TForm1.FormCreate(Sender: TObject);
begin
  Versuche:=3;
  Spieler:=1;
  Runde:=1;
  with spielerA do
  begin
    eins:=true;
    zwei:=true;
    drei:=true;
    vier:=true;
    fuenf:=true;
    sechs:=true;
    d:=true;
    v:=true;
    fh:=true;
    ks:=true;
    gs:=true;
    k:=true;
    c:=true;
  end;

  with spielerb do
  begin
    eins:=true;
    zwei:=true;
    drei:=true;
    vier:=true;
    fuenf:=true;
    sechs:=true;
    d:=true;
    v:=true;
    fh:=true;
    ks:=true;
    gs:=true;
    k:=true;
    c:=true;
  end;

  with spielerc do
  begin
    eins:=true;
    zwei:=true;
    drei:=true;
    vier:=true;
    fuenf:=true;
    sechs:=true;
    d:=true;
    v:=true;
    fh:=true;
    ks:=true;
    gs:=true;
    k:=true;
    c:=true;
  end;

  Versuche:=3;
  BitBtn_Versuche.caption:='3';
  BitBtn_Versuche.Visible:=true;

  Checkbox1.caption:='';
  Checkbox2.caption:='';
  Checkbox3.caption:='';
  Checkbox4.caption:='';
  Checkbox5.caption:='';
end;


procedure TForm1.BitBtn10Click(Sender: TObject);
begin
   FormCreate(Sender);
end;


//Würfeln
procedure TForm1.BitBtn_VersucheClick(Sender: TObject);
begin
  if Checkbox1.State=cbchecked then
  begin
    Wuerfel[1]:=Wurf;
    Checkbox1.caption:=IntToStr(Wuerfel[1]);
    {Image1.Picture.LoadfromFile;}
  end;

  if Checkbox2.State=cbchecked then
  begin
    Wuerfel[2]:=Wurf;
    Checkbox2.caption:=IntToStr(Wuerfel[2]);
  end;

  if Checkbox3.State=cbchecked then
  begin
    Wuerfel[3]:=Wurf;
    Checkbox3.caption:=IntToStr(Wuerfel[3]);
  end;

  if Checkbox4.State=cbchecked then
  begin
    Wuerfel[4]:=Wurf;
    Checkbox4.caption:=IntToStr(Wuerfel[4]);
  end;

  if Checkbox5.State=cbchecked then
  begin
    Wuerfel[5]:=Wurf;
    Checkbox5.caption:=IntToStr(Wuerfel[5]);
  end;

  Versuche:=Versuche-1;
  BitBtn_Versuche.caption:=IntToStr(Versuche);
  If Versuche<1 then
  begin
    BitBtn_Versuche.Visible:=false;
    Schritt:=2;
  end;
end;



// Wahrscheinlichkeit
procedure TForm1.BitBtn9Click(Sender: TObject);

begin
  //Berechnung der Wahrscheinlichkeit für das erzielen der erforderten Folge
  {Edit_d.text:=FloatToStr((nd/x)*w);
  Edit_.text:=FloatToStr((nv/x)*w);
  Edit_.text:=FloatToStr((nfh/x)*w);
  Edit_.text:=FloatToStr((nks/x)*w);
  Edit_.text:=FloatToStr((ngs/x)*w);
  Edit_.text:=FloatToStr((nk/x)*w);}
end;

procedure TForm1.BitBtn2Click(Sender: TObject);
begin
  close;
end;





//Eintragen
procedure TForm1.BitBtn_dClick(Sender: TObject);
var dr:boolean;
    p:integer;
begin
  if Schritt=2 then
  begin
    {ueberpruefen(Wuerfel);}
    sort(Wuerfel);
    if Wuerfel[1]=Wuerfel[2] {and W[1]=W[3]} then
      if Wuerfel[1]=Wuerfel[3] then
      dr:=true else dr:=false;
    if Wuerfel[2]=Wuerfel[3]then
      if Wuerfel[2]=Wuerfel[4] then
      dr:=true else dr:=false;
    if Wuerfel[3]=Wuerfel[4]then
      if Wuerfel[3]=Wuerfel[5] then
      dr:=true else dr:=false;
      if dr=true then p:=25 else
      {showmessage}
      p:=0;
      StringGrid1.Cells[Spieler,8]:=IntToStr(p);

    if Spieler=1 then
    SpielerA.d:=false;
    if Spieler=2 then
    SpielerB.d:=false;
    if Spieler=3 then
    SpielerC.d:=false;

    neu;
  end;

end;




end.
Das wär mir schon aufgefallen:)
dachte nur der Rest wäre nicht so wichtig, ist ja nicht gerade wenig


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:12 Uhr.
Seite 1 von 2  1 2      

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