Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Denkfehler? Erste Gehversuche nach langer Auszeit (https://www.delphipraxis.net/97504-denkfehler-erste-gehversuche-nach-langer-auszeit.html)

Yourhighness 11. Aug 2007 21:52


Denkfehler? Erste Gehversuche nach langer Auszeit
 
Guten Abend!

Habe dieses Forum empfohlen bekommen und schon etwas als "Gast" mitgelesen. Habe vor Jahren mit Delphi programmiert (an der Uni) und wollte jetzt wieder rein kommen, da ich beruflich so gar nichts mehr mit programmieren zu tun habe (in voellig anderem Feld gelandet :shock: ). Habe auch beim "rumspielen" viele Kleinigkeiten wieder in Erinnerung rufen koennen und einen Texteditor als "Uebung" gebastelt. Jetzt wollte ich mein "eigenes" Programm entwickeln und stolpere schon ueber den Start :coder2: .

Programm: Soll Textstring einlesen und dann (spaeter) diesen String in einer Textdatei wiederfinden.

Um zu sehen ob es funktioniert hab ich dies Versucht:

Delphi-Quellcode:
unit BSG;

interface

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

type
  TfrmMain = class(TForm)
    Label1: TLabel;

  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  frmMain: TfrmMain;
  SearchString: String;
  lblSearchTxt: TLabel;
  EdtSearchTxt: TEdit;
  BtnGo: TButton;
  BtnUpdate: TButton;
  Label1 : TLabel;
  procedure SearchText;

implementation

{$R *.dfm}

procedure SearchText;
begin

  SearchString := EdtSearchTxt.Text;
  SearchString := Label1.Caption;

end;

end.
Irgendwas mach ich doch total falsch. Heh, ich hab das Debugging schon immer geliebt :roteyes: Wie ich es liebe, wenn der Start schon in die Hose geht :tongue: .

Vielen Dank im Voraus.

- edit - Tiel etwas abgeaendert. Allerdings hab ich k.A. wie ich o.g. Problem am besten beschreiben sollte (ich weiss ausschlaggebende Titel waeren von Vorteil, sorry http://www.extremefunnypictures.com/.../sad_smile.gif)

Jürgen Thomas 12. Aug 2007 10:06

Re: Denkfehler? Erste Gehversuche nach langer Auszeit
 
Hallo,

was Dein Code machen soll, ist mir völlig unklar. Klar ist aber, dass Du offensichtlich Bestandteile des Formulars und des Programms wild durcheinander schmeißt. Vernünftig wäre etwa so etwas (ohne Überlegung, ob das Deinem Ziel entspricht):
Delphi-Quellcode:
unit BSG;

interface

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

type
  TfrmMain = class(TForm)
    Label1: TLabel;
    SearchString: String;
    lblSearchTxt: TLabel;
    EdtSearchTxt: TEdit;
    BtnGo: TButton;
    BtnUpdate: TButton;

  private
    { Private declarations }
    procedure SearchText;
    procedure BtnGoClick(...);
  public
    { Public declarations }
  end;

var
  frmMain: TfrmMain;

implementation

{$R *.dfm}

procedure TfrmMain.SearchText;
begin
  //  das Folgende wäre eine doppelte Zuordnung
  SearchString := EdtSearchTxt.Text;
  SearchString := Label1.Caption;
end;

procedure TfrmMain.BtnGoClick(...);

end.
Empfehlung: Erzeuge mit Delphi zunächst eine neue Windows-Anwendung, also mit Formular. Gestalte dann dieses Formular (welche Controls kommen rein und wohin). Erst danach kommt die eigentliche Funktionalität, indem die passenden Ereignisse erzeugt und mit Inhalt gefüllt werden.

Gruß Jürgen

Yourhighness 12. Aug 2007 10:18

Re: Denkfehler? Erste Gehversuche nach langer Auszeit
 
Hallo Juergen,

vielen Dank fuer die Antwort. Die doppelte Zuordnung habe ich nur gemacht um pruefen zu koennen, ob ich die Variabel "SearchString" richtig definiert habe, da es etwas laenger her ist das ich mit Delphirumgespielt habe.

Generell ist es so, das ich regelmaeßig Dateien durchsuchen muss, die sich staendig aendern. Um dies zu vereinfachen, wollte ich mir ein Tool basteln, welches die Textdateien nach diesem String durchsucht. Ich habe hier auch schon ein paar Codebeispiele fuer Funktionalitaeten die ich spaeter einbauen moechte, aber ich will ja erst wieder das Gehen lernen :???: .

Hier mal ein Screenshot von dem was ich bis jetzt hatte:

http://i94.photobucket.com/albums/l8...BSG_delphi.png


Hoffe das erklaert es ein wenig besser. Werd gleich mal den o.g. Code ausprobieren.

Danke nochmal.

Johannes

- edit -

Hab das jetzt nochmal gemacht mit folgendem Code:

Delphi-Quellcode:
unit BSG;

interface

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

type
  TfrmMain = class(TForm)
    Label1: TLabel;
    SearchString: String;
    LblSearchTxt: TLabel;
    EdtSearchTxt: TEdit;
    BtnGo: TButton;

  private
    { Private declarations }
    procedure SearchText;
    procedure BtnGoClick(...);

  public
    { Public declarations }
  end;

var
  frmMain: TfrmMain;

implementation

{$R *.dfm}

procedure TfrmMain.SearchText;
begin
  //  das Folgende wäre eine doppelte Zuordnung
  SearchString := EdtSearchTxt.Text;
  SearchString := Label1.Caption;
end;

procedure TfrmMain.BtnGoClick(...);

end.
Und bekomme immer die Fehlermeldung "expected an identifier but String found." Heißt das, das ich irgendwo ein ";" vergessen habe?

Apollonius 12. Aug 2007 12:53

Re: Denkfehler? Erste Gehversuche nach langer Auszeit
 
Deklariere Searchstring unter private, alles, was ohne Zugriffsbezeichner (private, public...) steht, ist für die interne Arbeit wichtig.

grenzgaenger 12. Aug 2007 13:05

Re: Denkfehler? Erste Gehversuche nach langer Auszeit
 
du überschreibst deinen search string sollte doch wohl so heissen
Delphi-Quellcode:
searchstr := edit.text;
label1.caption := searchstr;
damit du siehst, nach was du suchen möchtest, oder?

wie gross ist denn deine textdatei und wer bearbeitet diese? falls sie sich häufiger ändert und immer 'n paar leute/prozesse auf der datei rumhängen so solltest du die datei mit assign im lesemodus öffnen und über readln alles lesen.. da lohnt es sich nicht, die ganze datei in den speicher zu laden....

grüsse und noch 'n schönen sonntag.

Yourhighness 12. Aug 2007 13:28

Re: Denkfehler? Erste Gehversuche nach langer Auszeit
 
Hallo Ihr,

hab das jetzt mal umgesetzt und meinen eigenen Fehler gefunden (hatte ausversehen den String unter type anstelle von var. Allerdings hadere ich jetzt an der Button procedure.

Bei o.g. Beispiel ging es nicht, also hatte ich den Button ganz geloescht und neu gemacht. Jetzt sagt es immer, das kein BtnGo onclick oder so vorhanden ist.

Delphi-Quellcode:
unit BSG;

interface

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

type
  TfrmMain = class(TForm)
    Label1: TLabel;
    LblSearchTxt: TLabel;
    EdtSearchTxt: TEdit;
    BtnGo: TButton;
    procedure BtnGoClick(Sender: TObject);
    procedure BtnGoClick(TButton);

  private
    { Private declarations }
    procedure SearchText;

  public
    { Public declarations }
  end;

var
  frmMain: TfrmMain;
  SearchString: String;

implementation

{$R *.dfm}

procedure TfrmMain.SearchText;
begin
  //  das Folgende wäre eine doppelte Zuordnung
  SearchString := EdtSearchTxt.Text;
  Label1.Caption := SearchString;

end;

procedure BtnGoClick(TButton);
begin

end;

end
Merci und schoenen Sonntag noch.

grenzgaenger 12. Aug 2007 13:33

Re: Denkfehler? Erste Gehversuche nach langer Auszeit
 
dann einfach deinen button rausschemeissen, auch die proceduren und header, abspreichern und alles ist wieder in ordnung :-)

sehe gerade, du hast zwei proceduren mit den selben nahmen drin. schmeiss beide raus (wie oben beschrieben) und lass sie dann von delphi selbst erzeugen (durch d-click oder durch klick im ereignisinspektor). der legt dir dann die header schon passend an :-)

Yourhighness 12. Aug 2007 20:04

Re: Denkfehler? Erste Gehversuche nach langer Auszeit
 
Hallo Ihr,

danke fuer die Antworten. Hab das jetzt mal geloescht und neu gemacht.
So schauts jetzt aus:

Delphi-Quellcode:
unit BSG;

interface

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

type
  TfrmMain = class(TForm)
    Label1: TLabel;
    LblSearchTxt: TLabel;
    EdtSearchTxt: TEdit;
    BtnGo: TButton;
    procedure BtnGoClick(Sender: TObject);

  private
    { Private declarations }
    procedure SearchTxt;

  public
    { Public declarations }
  end;

var
  frmMain: TfrmMain;
  SearchString: String;

implementation

{$R *.dfm}

procedure TfrmMain.SearchTxt;
begin
  //  das Folgende wäre eine doppelte Zuordnung
  SearchString := EdtSearchTxt.Text;
  Label1.Hide;
end;

procedure TfrmMain.BtnGoClick(Sender: TObject);
begin
  Label1.Caption := SearchString;
  Label1.Show;
end;

end
Folgende Fehlermeldungen bekomme ich:
Zitat:

[Error] BSG.pas(50): '.' expected but end of file found
[Hint] BSG.pas(18): Private symbol 'SearchTxt' declared but never used
[Fatal Error] BSG_Project.dpr(5): Could not compile used unit 'BSG.pas'
Hatte auch versucht:

private
{ Private declarations }
procedure SearchTxt;

mit TfrmMain.SearchTxt; aber das half auch nicht. Irgendwie stelle ich mich Doof an http://www.comicguide.net/images/smilies/doof.gif

Yourhighness 12. Aug 2007 20:11

Re: Denkfehler? Erste Gehversuche nach langer Auszeit
 
Zitat:

Zitat von Apollonius
Deklariere Searchstring unter private, alles, was ohne Zugriffsbezeichner (private, public...) steht, ist für die interne Arbeit wichtig.

Sorry das verstehe ich nicht ganz. Private heisst doch das man nur innerhalb einer unit. Soweit ich weiß, ist nur eine Unit notwendig? Den zweiten Teil hab ich auch nicht ganz verstanden. Sorry und Danke!

grenzgaenger 12. Aug 2007 20:21

Re: Denkfehler? Erste Gehversuche nach langer Auszeit
 
Zitat:

Zitat von Yourhighness
Hallo Ihr,

danke fuer die Antworten. Hab das jetzt mal geloescht und neu gemacht.
So schauts jetzt aus:

Delphi-Quellcode:
unit BSG;

interface

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

type
  TfrmMain = class(TForm)
    Label1: TLabel;
    LblSearchTxt: TLabel;
    EdtSearchTxt: TEdit;
    BtnGo: TButton;
    procedure BtnGoClick(Sender: TObject);

  private
    { Private declarations }
    SearchString: String;
//    procedure SearchTxt;

  public
    { Public declarations }
  end;

var
  frmMain: TfrmMain;
 

implementation

{$R *.dfm}

{procedure TfrmMain.SearchTxt;
begin
  //  das Folgende wäre eine doppelte Zuordnung
  SearchString := EdtSearchTxt.Text;
  Label1.Hide;
end;}

procedure TfrmMain.BtnGoClick(Sender: TObject);
begin
 SearchString  := EdtSearchTxt.Text;
 Label1.Caption := SearchString;
//  Label1.Show;
end;

end.

kurz mal korrigiert. jetzt sollte es kompiliert werden können.


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