Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Record, Objekt oder Klassentyp erforderlich (https://www.delphipraxis.net/79804-record-objekt-oder-klassentyp-erforderlich.html)

Tumor666m 28. Okt 2006 23:40


Record, Objekt oder Klassentyp erforderlich
 
Hallo Zusammen

Ich bin noch ein Blutiger Anfänger was das programmieren angeht und habe mir ein Buch besorgt womit ich meine ersten anfänge mache, und habe schon das erste Problem. :cry:
Ich habe eine mit dem Buch ein kleines programm erstellt was auch bis dato lief, bis ich ein menü einbauen sollte über dem ich öffnen und speichern kann. (Bitte net Lachen)
Ich habe den Übungscode aus dem Buch übernommen und sollte das dann starten um zu schauen wie es funzt. Hmmmmmm ja ok nur gibt es jetzt ein Problem wo ich net weiterkomme. ich habe das folgendermaßen eingegeben.
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
begin
  Nr := random (Max) + 1;
  Panel1.Caption := Diagnose[Nr];
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Panel1.Caption := '';
  Edit1.Text    := '';
  Edit1.SetFocus;
end;

procedure TForm1.ScrollBar1Change(Sender: TObject);
begin
  Panel1.Caption := Diagnose[ScrollBar1.Position];
  ScrollBar1.Min := 1;
  ScrollBar1.Max := Max;
end;

procedure TForm1.Oeffnen1Click(Sender: TObject);
begin
  try
    if OpenDialog1.Execute then
      Diagnose.LoadFromFile := (OpenDialog1.FileName)';
    ScrollBar1.Max = Diagnose.Count - 1;
   except
      ShowMessage ('Fehler beim Öffnen der Datei!');
  end;
end;

procedure TForm1.Speichern1Click(Sender: TObject);
begin
  try
    if SaveDialog1.Execute then
      Psycho.SaveToFile (SaveDialog1.FileName);
   except
      ShowMessage ('Fehler beim Speichern der Datei!');
end;

end.
wenn ich jetzt das Programm starten möchte makiert er mir eine Zeile, Diagnose.LoadFromFile := (OpenDialog1.FileName)';
Rot und schreibt mir als Fehlermeldung, Record, Objekt oder Klassentyp erforderlich
und ich habe das genau nach den angaben aus dem Buch übernommen nu steh ich da und weiß net weiter.
Ich hoffe mal das ich hier richtig bin?

Für Hilfe bin ich seh dankbar.

Und sorry für diese bestimmt blöde frage oder so.

Gruß Tumor

[edit=SirThornberry]Delphi-Tags gesetzt - Mfg, SirThornberry[/edit]

3_of_8 28. Okt 2006 23:42

Re: Record, Objekt oder Klassentyp erforderlich
 
Was ist denn "Diagnose"?

Balu der Bär 28. Okt 2006 23:49

Re: Record, Objekt oder Klassentyp erforderlich
 
Delphi-Quellcode:
 Diagnose.LoadFromFile(OpenDialog1.FileName)';
So muss das aussehen, eventuell auch
Delphi-Quellcode:
 Diagnose.Lines.LoadFromFile(OpenDialog1.FileName)';
je nachdem was für eine Komponente Diagnose ist. ;)

Und benutze doch in Zukubft bitte die [delphi ] [/ delphi ] - Tags. ;)

3_of_8 28. Okt 2006 23:53

Re: Record, Objekt oder Klassentyp erforderlich
 
Delphi-Quellcode:
 Panel1.Caption := Diagnose[Nr];
Daraus schließe ich, dass Diagnose eine TStringList ist.

Balu der Bär 28. Okt 2006 23:54

Re: Record, Objekt oder Klassentyp erforderlich
 
Und? Der Aufruf gestaltet sich trotzdem a'la StringList.LoadFromFile('datei.txt');.

3_of_8 29. Okt 2006 00:06

Re: Record, Objekt oder Klassentyp erforderlich
 
:wall:

Denkfehler...

Egal, das einfache Anführungszeichen vor dem Semikolon muss noch weg. ;)

EDIT: Das steht in deinem 1. Beitrag drin, im 2. nicht mehr.

Tumor666m 29. Okt 2006 22:25

Re: Record, Objekt oder Klassentyp erforderlich
 
Danke für die schnellen antworten nur will das immer noch net funzen :(

3_of_8 29. Okt 2006 22:26

Re: Record, Objekt oder Klassentyp erforderlich
 
Aktueller Code, Fehlermeldung, Zeile?

Tumor666m 29. Okt 2006 22:46

Re: Record, Objekt oder Klassentyp erforderlich
 
ich habe die oben angegebenen tips versucht und habe aus Diagnose.LoadFromFile := (OpenDialog1.FileName)'; Diagnose.LoadFromFile(OpenDialog1.FileName); gemacht und bekamm die fehlermeldungen:[89] <:=> erwartet, aber <=> gefunden << warum auch immer , dann stand da noch "[89]Operator oder Semikolon fehlt" und ganz oben in der fehlerliste kommt wieder [99]Record, Objekt oder Klassentyp erforderlich :( :?

3_of_8 29. Okt 2006 22:56

Re: Record, Objekt oder Klassentyp erforderlich
 
Schick am besten nochmal deinen gesamten momentanen Code und kopiere das ganze Log.

Tumor666m 29. Okt 2006 23:14

Re: Record, Objekt oder Klassentyp erforderlich
 
Delphi-Quellcode:
unit Sprechstunde;

interface

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

type
  TForm1 = class(TForm)
    GroupBox1: TGroupBox;
    GroupBox2: TGroupBox;
    GroupBox3: TGroupBox;
    Button1: TButton;
    Button2: TButton;
    Edit1: TEdit;
    Panel1: TPanel;
    ScrollBar1: TScrollBar;
    MainMenu1: TMainMenu;
    Datei1: TMenuItem;
    Oeffnen1: TMenuItem;
    Speichern1: TMenuItem;
    Drucken1: TMenuItem;
    Ende1: TMenuItem;
    OpenDialog1: TOpenDialog;
    SaveDialog1: TSaveDialog;
    procedure FormCreate(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure ScrollBar1Change(Sender: TObject);
    procedure Oeffnen1Click(Sender: TObject);
    procedure Speichern1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;
const
  Max = 10;
var
  Form1: TForm1;
  Diagnose: Array[1..Max] of String;
  Nr: Integer;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  randomize;
  Diagnose[1] := 'Him...';
  Diagnose[2] := 'Das ist ein Ding!';
  Diagnose[3] := 'Siehmal an!';
  Diagnose[4] := 'Was soll ich sagen?';
  Diagnose[5] := 'Tatsächlich?';
  Diagnose[6] := 'So geht es dir aso.';
  Diagnose[7] := 'Du hast Probleme.';
  Diagnose[8] := 'Das kann ich verstehen.';
  Diagnose[9] := 'Ich bin Sprachlos';
  Diagnose[10]:= 'Na Ja...';
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  Nr := random (Max) + 1;
  Panel1.Caption := Diagnose[Nr];
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Panel1.Caption := '';
  Edit1.Text    := '';
  Edit1.SetFocus;
end;

procedure TForm1.ScrollBar1Change(Sender: TObject);
begin
  Panel1.Caption := Diagnose[ScrollBar1.Position];
  ScrollBar1.Min := 1;
  ScrollBar1.Max := Max;
end;

procedure TForm1.Oeffnen1Click(Sender: TObject);
begin
  try
    if OpenDialog1.Execute then
      Diagnose.LoadFromFile(OpenDialog1.FileName);
    ScrollBar1.Max = Diagnose.Count - 1;
   except
      ShowMessage ('Fehler beim Öffnen der Datei!');
  end;
end;

procedure TForm1.Speichern1Click(Sender: TObject);
begin
  try
    if SaveDialog1.Execute then
      Psycho.SaveToFile (SaveDialog1.FileName);
   except
      ShowMessage ('Fehler beim Speichern der Datei!');
end;

end.

Fehlermeldungen:
[Fehler]Sprechstunde.pas[88]Record, Objekt oder Klassentyp erforderlich
[Fehler]Sprechstunde.pas[89]':=' erwartet aber '=' gefunden
[Fehler]Sprechstunde.pas[89]Operator oder Semikolon fehlt
[Fehler]Sprechstunde.pas[104] ";" erwartet aber "." gefunden
[Fehler]Sprechstunde.pas[106]Deklaration erwartet, aber Dateiende gefunden
[Fataler Fehler]Project2.dpr[5] Verwendete Unit 'Sprechstunde.pas`kann nicht compiliert werden


Das ist alles was da steht . :(

Für Hilfe bedanke ich mich schon im voraus

3_of_8 29. Okt 2006 23:28

Re: Record, Objekt oder Klassentyp erforderlich
 
Kein Wunder: Diagnose ist auch ein array of String. Das kannst du nicht aus einer Datei laden. Jedenfalls nicht so, wie du denkst.

Mache es einfach zu einer TStringList und füge ins OnCreate der Form ein:

Delphi-Quellcode:
Diagnose:=TStringList.Create;
Und ins OnDestroy:

Delphi-Quellcode:
Diagnose.Free;
EDIT: Achja, und eine StringList ist dann auch nullbasiert, das heißt das erste Element hat den Index 0. Was ist das denn eigentlich für ein komisches Buch, in dem so ein (entschuldigung) Mist steht?

Tumor666m 29. Okt 2006 23:35

Re: Record, Objekt oder Klassentyp erforderlich
 
Danke dir

Nur wo schreibe ich das hin ? <<< Blöde is *denk

3_of_8 29. Okt 2006 23:36

Re: Record, Objekt oder Klassentyp erforderlich
 
Aaalso...

Auf die Form klicken, im Objektinspektor auf "Ereignisse", "OnCreate", den Code einfügen, "OnDestroy" klicken, den anderen Code einfügen, fertig.

Tumor666m 29. Okt 2006 23:47

Re: Record, Objekt oder Klassentyp erforderlich
 
Habe ich bei beiden gemacht nur kommt wenn ich nach dem eintragen das nächste auswählen möchte nen fehler der Lautet Diagnose:=TStringList.Create; ist kein gültiger bezeichner. Das gleiche wenn ich auf OnDestroy geh

3_of_8 29. Okt 2006 23:49

Re: Record, Objekt oder Klassentyp erforderlich
 
Hast du die Deklaration von Diagnose von array of String auf TStringList geändert?

Tumor666m 29. Okt 2006 23:51

Re: Record, Objekt oder Klassentyp erforderlich
 
nein :oops:

Also schreib ich da jetzt Diagnose: Array[1..Max] TStringList; hin ?

3_of_8 29. Okt 2006 23:58

Re: Record, Objekt oder Klassentyp erforderlich
 
Nein.

Du schreibst hin:
Delphi-Quellcode:
Diagnose: TStringList;
EDIT: Nicht böse gemeint, aber am besten wäre es wohl, du schaust dir nochmal die Grundlagen von Delphi an. Ich habe stark das Gefühl, dass du in der Mitte anfängst, und nicht am Anfang. Ich spreche aus Erfahrung, ich habe den gleichen Fehler gemacht.

xaromz 29. Okt 2006 23:58

Re: Record, Objekt oder Klassentyp erforderlich
 
Hallo,
Zitat:

Zitat von Tumor666m
Also schreib ich da jetzt Diagnose: Array[1..Max] TStringList; hin ?

Nein, TStringList ist eine Klasse, die intern eine Liste verwaltet. Du musst also nur noch
Delphi-Quellcode:
Diagnose: TStringList;
schreiben.

Bei der Gelegenheit solltest Du auch gleich mal in der Hilfe nachsehen und Dir die ganzen Methoden dieser Klasse ansehen. Da kannst Du sicher was lernen. Überhaupt ist die Hilfe eine unschätzbare... nun ja, Hilfe :wink: .

Gruß
xaromz


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:46 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