![]() |
AW: Buttonabhängiges Schließen des Programms
Also, ich hab das Probelm mit den Fehlern wieder hinbekommen. Aus irgendeinem kühlen Grund, bestand die Zuweisung der Ereignisroutine zu dem ClientSocket nicht mehr. Konnte ich wieder durch Dplklicken im OI herstellen. Das funktioniert wieder! :) Tut mir nochmal Leid für meinen Wutanfall... :oops:
@DeddyH: Vielleicht könntest du trotzdem mal posten, wie genau man das jetzt macht, ohne das Programm neu zu schreiben. Vielen Dank! hans ditter |
AW: Buttonabhängiges Schließen des Programms
|
AW: Buttonabhängiges Schließen des Programms
Und zum Datenmodul: das kann ich auch nicht besser beschreiben als die Hilfe selbst:
![]() |
AW: Buttonabhängiges Schließen des Programms
Wow, cool! Das hat funktioniert! Danke für den Link! Sollte häufiger mal auf diese Seite schauen... :oops:
Mir ist aber aufgefallen, dass man immer
Code:
schreiben muss, um auf Komponenten zugreifen zu können. Geht das nicht einfacher? Das man irgendwie definieren kann, dass
Unit3.DataModule3.{...}
Delphi-Quellcode:
ist?
var Unit3.DataModule3: DataModule;
Das wär noch ganz nett, aber erstmal vielen Dank dafür soweit! hans ditter |
AW: Buttonabhängiges Schließen des Programms
Es steht Dir doch frei, eine entsprechende Variable zu deklarieren und zu belegen.
|
AW: Buttonabhängiges Schließen des Programms
Ja, das dachte ich auch. Ich poste mal den Anfang vom Quellcode...
Delphi-Quellcode:
Während der Entwicklungszeit geht das auch alles ohne Fehler. Der Fehler tritt aber auf, wenn
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ScktComp, StdCtrls, ComCtrls, StrUtils, superobject, ExtCtrls; const MY_PORT = 30000; // an diesem Port wartet der Server auf Clients type TForm1 = class(TForm) ServerAdress: TEdit; Online: TCheckBox; Input: TEdit; BtnSend: TButton; Label1: TLabel; Label2: TLabel; Label3: TLabel; log: TRichEdit; lstUsers: TListBox; edtOwnUserNick: TEdit; Shape1: TShape; Shape2: TShape; Shape3: TShape; combContentSize: TComboBox; combContentColor: TComboBox; combContentStyle: TComboBox; ClientSocket: TClientSocket; procedure FormCreate(Sender: TObject); procedure OnlineClick(Sender: TObject); procedure BtnSendClick(Sender: TObject); procedure ClientSocketRead(Sender: TObject; Socket: TCustomWinSocket); procedure FormDestroy(Sender: TObject); procedure InputKeyPress(Sender: TObject; var Key: Char); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation uses Unit3; var DataModule: Unit3.TDataModule3;
Delphi-Quellcode:
aufgerufen wird.
DataModule.ClientSocket.Port:=MY_PORT;
Dann sagt er, dass eine EAccessViolation aufgetreten ist. Wie hab ich das dann denn zu verstehen? lg, hans ditter |
AW: Buttonabhängiges Schließen des Programms
Ok, Problem hat sich gerade erledigt. Es reicht wenn ich DataModule3.{...} schreibe. Das reicht mir, ist kurz genug... ;)
Zur Funktion hab ich noch eine Frage. Ich möchte ja ein Anmeldefenster anzeigen lassen, in dem man Nick und Passwort eingibt. Wenn diese vom Server authentifiziert werden, dann soll ja die Form1 aufgerufen werden. Vom Prinzip kein Problem, aber wenn der Client sich mit dem Server connected hat, wird (im Moment noch) im Verlaufsfenster (des noch nicht erzeugten Form1) einige Informationen angezeigt. Da kommte natürlich eine Fehlermeldung, dass ein AccessFehler aufgetreten ist. Doch wie umgehe ich das? Ich dachte schon einen zweiten Clienten dynamisch erzeugen, der nur dafür da ist, die Authentifizierung vorzunehmen, find ich persöhnlich aber nicht so schick. Habt ihr noch andere Ideen? (Habt ihr überhaupt mein Problem verstanden, manchmal umschreibe ich das wirklich etwas wirr... :roll: :mrgreen: |
AW: Buttonabhängiges Schließen des Programms
Entweder Form1 vorher erzeugen oder die Daten zwischenspeichern (beispielsweise in einer eigenen Klasse oder einem Record) und in Form1 dann wieder auslesen.
|
AW: Buttonabhängiges Schließen des Programms
Das Problem liegt tiefer im Fehlen von Grundlagen.
Ein AccessFehler kommt immer dann, wenn man auf eine Struktur (Klasse) zugreifen möchte, wo es aber keine gültige Instanz gibt.
Delphi-Quellcode:
Mit einem Beispiel aus dem Leben gegriffen, könnte man es so erklären:
type
TFoo = class Data : string; end; var foo : TFoo; begin foo.Data := 'Hallo'; // <- AccessFehler foo := TFoo.Create; foo.Data := 'Hallo'; // Alles ok foo.Free; foo.Data := 'Hallo'; // <- AccessFehler foo := TFoo.Create; foo.Data := 'Hallo'; // Alles ok foo := nil; // <- Upps, ein Speicherleck erzeugt foo.Data := 'Hallo'; // <- AccessFehler end; Zitat:
|
AW: Buttonabhängiges Schließen des Programms
Wieso, die Ursache hat er doch schon selbst erkannt.
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:23 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