Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi ListBox1 unbekannt in eigener prozedur (https://www.delphipraxis.net/151856-listbox1-unbekannt-eigener-prozedur.html)

Simatix 3. Jun 2010 21:45


ListBox1 unbekannt in eigener prozedur
 
Hallo Zusammen,

ich habe ein Problem, bzw. evtl mehrere..... Ich habe eine eigene Prozedur in der ich eine ListBox1 beschreiben will.
Dort ist diese aber nicht bekannt ? Warum ist mir nicht klar. Der Momentane Quellcode sieht so aus:

Delphi-Quellcode:
unit RS232Main;

interface

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

type
  TForm1 = class(TForm)
    ListBox1: TListBox;
    EdtSend1: TEdit;
    BtnSend1: TButton;
    EdtSend2: TEdit;
    BtnSend2: TButton;
    EdtSend3: TEdit;
    BtnSend3: TButton;
    EdtSend4: TEdit;
    BtnSend4: TButton;
    EdtSend5: TEdit;
    BtnSend5: TButton;
    EdtSend6: TEdit;
    BtnSend6: TButton;
    GroupBox1: TGroupBox;
    Image1: TImage;
    StaticText1: TStaticText;
    MainMenu1: TMainMenu;
    Datei1: TMenuItem;
    Extras1: TMenuItem;
    N1: TMenuItem;
    Parameterdateisichern1: TMenuItem;
    Parameterdateiladen1: TMenuItem;
    Schnittstelle1: TMenuItem;
    Info1: TMenuItem;
    Speichern1: TMenuItem;
    N2: TMenuItem;
    Beenden1: TMenuItem;
    ImageListMenu: TImageList;
    GroupBox2: TGroupBox;
    LabelStatusEdit: TLabel;
    ClearKonsole1: TMenuItem;
    RS2321: TMenuItem;
    Ethernet1: TMenuItem;
    N3: TMenuItem;
    Parameter1: TMenuItem;
    OpenDialog1: TOpenDialog;
    SaveDialog1: TSaveDialog;
    procedure Beenden1Click(Sender: TObject);
    procedure Info1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure ClearKonsole1Click(Sender: TObject);
    procedure Parameterdateiladen1Click(Sender: TObject);
    procedure Speichern1Click(Sender: TObject);
    procedure Parameterdateisichern1Click(Sender: TObject);
    procedure BtnSend1Click(Sender: TObject);
    procedure BtnSend2Click(Sender: TObject);
    procedure BtnSend3Click(Sender: TObject);
    procedure BtnSend4Click(Sender: TObject);
    procedure BtnSend5Click(Sender: TObject);
    procedure BtnSend6Click(Sender: TObject);
    procedure RS2321Click(Sender: TObject);
    procedure Ethernet1Click(Sender: TObject);
private
    { Private-Deklarationen }

  public
    { Public-Deklarationen }

  end;

  //Deklarationen
  procedure BtnSend(BefehlNr: Integer; Befehl:String);
  procedure RS232Send(BefehlNr: Integer; Befehl:String);


     .....


//*************************
// RS232: Senden BefehlNr()
//*************************
procedure RS232Send(BefehlNr: Integer; Befehl:String);
begin
  ListBox1.xxxxxx //Hier ist die ListBox unbekannt
  Exit;

End; //RS232Send
Schiebe ich die Deklarationen der eigenen Prozeduren hoch in Private oder Public geht garnichts mehr ... warum ka !
Hilfe Hilfe ich weiss nicht weiter ... und Ja es fehlen auch die Grundlagen ;)

LG Philip

Luckie 3. Jun 2010 21:49

Re: ListBox1 unbekannt in eigener prozedur
 
Deine Prozedur ist keine Methode deiner Formklasse und somit ist das Listboxobjekt unbekannt. Entweder übergibst du die Listbox als Parameter oder du machst sie zu einer Methode deiner Formklasse.

Noch besser wäre allerdings eine ganz eigene Klasse für das Senden und verarbeiten der Daten.

idefix2 3. Jun 2010 21:59

Re: ListBox1 unbekannt in eigener prozedur
 
Delphi-Quellcode:
procedure RS232Send(BefehlNr: Integer; Befehl:String);
begin
  form1.ListBox1.xxxxxx //Hier ist die ListBox bekannt
  Exit;

End; //RS232Send

Luckie 3. Jun 2010 22:18

Re: ListBox1 unbekannt in eigener prozedur
 
Ist aber sehr unsauber die Lösung.

Delphi-Laie 3. Jun 2010 22:49

Re: ListBox1 unbekannt in eigener prozedur
 
Zitat:

Zitat von Luckie
Ist aber sehr unsauber die Lösung.

Inwiefern?

Ich mache es im Quellcode auch fast immer so, und es funktioniert stets zuverlässig. Es erscheint mir als die schnellste Lösung dieses Problems. Den Formularklassen fremde Unterprogramme unterzuschieben ist zwar möglich, doch ist das etwa sauber(er)? Sind die Formklassen nicht Domäne des Editors bzw. der IDE? Und die Parameterübergabe ist mir viel zu fehleranfällig.

Neutral General 3. Jun 2010 23:16

Re: ListBox1 unbekannt in eigener prozedur
 
Zitat:

Zitat von Delphi-Laie
Zitat:

Zitat von Luckie
Ist aber sehr unsauber die Lösung.

Inwiefern?

Ich mache es im Quellcode auch fast immer so, und es funktioniert stets zuverlässig. Es erscheint mir als die schnellste Lösung dieses Problems. Den Formularklassen fremde Unterprogramme unterzuschieben ist zwar möglich, doch ist das etwa sauber(er)? Sind die Formklassen nicht Domäne des Editors bzw. der IDE? Und die Parameterübergabe ist mir viel zu fehleranfällig.

Nein, das ist um EINIGES sauberer und auch die übliche und beste Lösung. Von welcher fehleranfälligen Parameterübergabe redest du da? :shock:

Es funktioniert halt NICHT zuverlässig wenn du grad eine Instanz von TForm1 hast, die NICHT über die Form1-Variable referenziert werden kann. Weil dann knallts oder es passiert nichts.

Luckie 3. Jun 2010 23:26

Re: ListBox1 unbekannt in eigener prozedur
 
Na, dann warte mal ab, was passiert, wenn der Kunde aufeinmal ein Konsolenprogramm will. Da du den Code für die Datenverarbeitung und -haltung so wunderschön einfach mit der Oberfläche verschmolzen hast, kannst du wahrscheinlich alles noch mal schreiben. Des weiteren kann es dir passieren, dass Änderungen an der Oberfläche auch Auswirkungen auf die Datenverarbeitung haben. Ersetz einfach mal eine Listbox durch einen Listview. Viel Spaß.

Trennst du die Datenverarbeitung von der Oberfläche, kannst du zum einem später jede beliebige Oberfläche "drüberstülpen" und du kannst am Code für die Datenverarbeitung arbeiten ohne, die Oberfläche zu kennen. Stichwort Arbeitsteilung. Weitere Vorteile: Einfachheres Refactoring, Erhöhung der Wartbarkeit, einfachheres erweitern möglich, fest definierte Schnittstellen.

Das es funktioniert und, dass es eine schnell und unkomplizierte Lösung ist, bestreitet auch keiner.

Aber wegen seiner eigenen Unzulänglichkeit eine unsaubere Lösung vorzuziehen, zeugt nicht von Professionalität. Dann lernt man es und macht es richtig.

Sir Rufo 4. Jun 2010 00:49

Re: ListBox1 unbekannt in eigener prozedur
 
@luckie
Wieso soll er so lange warten? :mrgreen:

Der soll einfach mal sein Formular umbenennen und schon knallt es ;)

Ansonsten halt so versuchen
Delphi-Quellcode:
procedure RS232Send(BefehlNr: Integer; Befehl:String; ListBox : TListBox = nil );
begin
  if Assigned( ListBox ) then
    begin
      ListBox.xxxxxx //Hier ist die ListBox bekannt
    end;
  Exit;

End; //RS232Send
Der Aufruf erfolgt so (ohne Ausgabe auf die ListBox ... weil ja nicht bekannt)
Delphi-Quellcode:
RS232Send( BefehlNr, Befehl );
oder so, mit Ausgabe in der ListBox
Delphi-Quellcode:
procedure TForm1.TuWas;
  begin
    RS232Send( BefehlNr, Befehl, ListBox1 );
  end;

Delphi-Laie 8. Jun 2010 05:55

AW: Re: ListBox1 unbekannt in eigener prozedur
 
Zitat:

Zitat von Neutral General (Beitrag 1025728)
Zitat:

Zitat von Delphi-Laie
Zitat:

Zitat von Luckie
Ist aber sehr unsauber die Lösung.

Inwiefern?

Ich mache es im Quellcode auch fast immer so, und es funktioniert stets zuverlässig. Es erscheint mir als die schnellste Lösung dieses Problems. Den Formularklassen fremde Unterprogramme unterzuschieben ist zwar möglich, doch ist das etwa sauber(er)? Sind die Formklassen nicht Domäne des Editors bzw. der IDE? Und die Parameterübergabe ist mir viel zu fehleranfällig.

Nein, das ist um EINIGES sauberer und auch die übliche und beste Lösung. Von welcher fehleranfälligen Parameterübergabe redest du da? :shock:

Parameterübergabe zwischen Unterprogrammen und den Stellen des (Haupt-)Programmes, die sie aufrufen. Muß - möglichst vollständig - übereinstimmen, worum man sich kümmern muß -> Fehlerpotential, und Morphy schlägt bekanntlich meistens zu.

Was die Umbenennung des Formulares anbetrifft: Sicher hagelt es dann Fehlermeldungen beim Compilieren, doch wozu gibt es die Such- und Ersetzfunktion?

RWarnecke 8. Jun 2010 06:31

AW: Re: ListBox1 unbekannt in eigener prozedur
 
Zitat:

Zitat von Delphi-Laie (Beitrag 1026690)
Parameterübergabe zwischen Unterprogrammen und den Stellen des (Haupt-)Programmes, die sie aufrufen. Muß - möglichst vollständig - übereinstimmen, worum man sich kümmern muß -> Fehlerpotential, und Morphy schlägt bekanntlich meistens zu.

Aber nur, wenn Du den Quelltext schreibst. Nachher nichtmehr.

Zitat:

Zitat von Delphi-Laie (Beitrag 1026690)
Was die Umbenennung des Formulares anbetrifft: Sicher hagelt es dann Fehlermeldungen beim Compilieren, doch wozu gibt es die Such- und Ersetzfunktion?

Das kannste Dir dann bei einer Umbenennung zum Beispiel sparen.


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