Delphi-PRAXiS
Seite 3 von 4     123 4      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Buttonabhängiges Schließen des Programms (https://www.delphipraxis.net/155352-buttonabhaengiges-schliessen-des-programms.html)

hans ditter 23. Okt 2010 14:46

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

Sir Rufo 23. Okt 2010 14:57

AW: Buttonabhängiges Schließen des Programms
 
Bei Google suchenTortoiseSVN Bei Google suchenTortoiseHg

DeddyH 24. Okt 2010 11:58

AW: Buttonabhängiges Schließen des Programms
 
Und zum Datenmodul: das kann ich auch nicht besser beschreiben als die Hilfe selbst: http://docwiki.embarcadero.com/VCL/d...es.TDataModule

hans ditter 25. Okt 2010 17:56

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:
Unit3.DataModule3.{...}
schreiben muss, um auf Komponenten zugreifen zu können. Geht das nicht einfacher? Das man irgendwie definieren kann, dass
Delphi-Quellcode:
var Unit3.DataModule3: DataModule;
ist?

Das wär noch ganz nett, aber erstmal vielen Dank dafür soweit!

hans ditter

DeddyH 25. Okt 2010 18:23

AW: Buttonabhängiges Schließen des Programms
 
Es steht Dir doch frei, eine entsprechende Variable zu deklarieren und zu belegen.

hans ditter 26. Okt 2010 19:48

AW: Buttonabhängiges Schließen des Programms
 
Ja, das dachte ich auch. Ich poste mal den Anfang vom Quellcode...
Delphi-Quellcode:
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;
Während der Entwicklungszeit geht das auch alles ohne Fehler. Der Fehler tritt aber auf, wenn
Delphi-Quellcode:
DataModule.ClientSocket.Port:=MY_PORT;
aufgerufen wird.
Dann sagt er, dass eine EAccessViolation aufgetreten ist. Wie hab ich das dann denn zu verstehen?

lg, hans ditter

hans ditter 26. Okt 2010 20:19

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:

DeddyH 27. Okt 2010 08:10

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.

Sir Rufo 27. Okt 2010 09:21

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:
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;
Mit einem Beispiel aus dem Leben gegriffen, könnte man es so erklären:
Zitat:

Du planst in deinem Zimmer ein Regal aufzustellen. Das Regal soll rot, 1.5m hoch und 1m breit werden.

Wenn du jetzt in dieses Regal ein Buch stellst, fällt das auf den Boden (ein Absturz), weil du hast das Regal noch nicht gekauft (Instanz)

DeddyH 27. Okt 2010 09:24

AW: Buttonabhängiges Schließen des Programms
 
Wieso, die Ursache hat er doch schon selbst erkannt.
Zitat:

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.


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:23 Uhr.
Seite 3 von 4     123 4      

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