![]() |
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:
Schiebe ich die Deklarationen der eigenen Prozeduren hoch in Private oder Public geht garnichts mehr ... warum ka !
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 Hilfe Hilfe ich weiss nicht weiter ... und Ja es fehlen auch die Grundlagen ;) LG Philip |
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. |
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 |
Re: ListBox1 unbekannt in eigener prozedur
Ist aber sehr unsauber die Lösung.
|
Re: ListBox1 unbekannt in eigener prozedur
Zitat:
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. |
Re: ListBox1 unbekannt in eigener prozedur
Zitat:
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. |
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. |
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:
Der Aufruf erfolgt so (ohne Ausgabe auf die ListBox ... weil ja nicht bekannt)
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
Delphi-Quellcode:
oder so, mit Ausgabe in der ListBox
RS232Send( BefehlNr, Befehl );
Delphi-Quellcode:
procedure TForm1.TuWas;
begin RS232Send( BefehlNr, Befehl, ListBox1 ); end; |
AW: Re: ListBox1 unbekannt in eigener prozedur
Zitat:
Was die Umbenennung des Formulares anbetrifft: Sicher hagelt es dann Fehlermeldungen beim Compilieren, doch wozu gibt es die Such- und Ersetzfunktion? |
AW: Re: ListBox1 unbekannt in eigener prozedur
Zitat:
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:36 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