Unit2 benutzt Prozedur von Unit1

    Unit2 benutzt Prozedur von Unit1

    Hallo,

    als erstes möchte ich anmerken, dass ich noch nicht sehr lange mit Delphi arbeite und ich normalerweise alle Probleme mit Google löse.
    Jedoch steh ich vor einem Problem:

    Man kann ja mehrere Units erstellen, bei der Unit2 Unit1 in den uses hat. Unit1 soll zudem eine Form haben, die einen Knopf besitzt. Nun möchte ich mit Unit2 auf die Prozedur von Unit1 zugreifen.

    Probiert habe ich bisher das hier:


    unit Unit2;

    interface

    uses
    Classes, Unit1;

    type
    TEmpfangen = class(TThread)
    public
    procedure Execute; override;
    end;

    implementation

    procedure TEmpfangen.Execute;
    begin
    data := Form1.TCPClient.IOHandler.ReadLn();
    end;

    procedure cmdVerbindenClick(Sender: TObject);
    begin

    end;

    end.

    Bei dem Rot markierten Bereich mäckert der Compiler immer rum.
    Was soll ich tun? Oder habe ich den Rot markierten Bereich falsch?

    Ich würde mich sehr über eine Antwort freuen.
    Hallo!
    Der Compiler meckert? Dann hat das sicher einen Grund.
    Teile doch mal mit, was er anmeckert ... das könnte helfen :D

    Im Allgemeinen:
    Ich vermute mal, "Form1" ist eine Klasse aus Unit1, oder?
    So wie Du das hier darstellst, macht man das nicht !!!
    Du greift hier direkt auf Member der Klasse zu.
    Erstelle in Deiner Klasse eine öffentliche (public) Methode (function), die Dir genau das liefert was Du benötigst.

    Warum?
    Die Implementierungsdetails der Klasse aus Unit1 haben keinen zu interessieren.
    Was, wenn Du später mal etwas anderes verwendest als einen "TCPClient"?
    Dann musst Du alle Stellen im Code anpassen.
    Mit einer passenden Methode für den Zugriff brauchst Du nur deren Implementierung in der Unit1 anpassen ... die "Konsumenten" dieser Methode kriegen davon nichts mit und arbeiten wie gewohnt.

    P.S.: Multithreading per Google? Sportlich =O

    Gruß
    Bernd
    "After three days without programming, life becomes meaningless." (The Tao of Programming, Book 2)
    "Any fool can write code that a computer can understand. Good programmers write code that humans can understand" (Martin Fowler, 'Refactoring')

    N3THUNT3R schrieb:

    procedure cmdVerbindenClick(Sender: TObject);

    öhhh... Die Methode gehört keiner Klasse, d.h. vermutlich meinst du

    Quellcode

    1. procedure TForm1.cmdVerbindenClick(Sender: TObject);​


    Du greifst vom Thread aus auf eine Komponente auf einer Form zu.
    Es ist prinzipiell "verboten" (d.h. es kann zu seltenen und unkontrollierten Fehlern kommen), dass man aus einem Thread auf eine Form zugreift!
    Das ist ganz wichtig zu verstehen, dann es fliegt dir nicht gleich, sondern erst später um die Ohren.

    Hier ein Tutorial:
    delphi-treff.de/tutorials/objectpascal/threads/

    Und wenn du aus einem Thread auf ein Form zugreifen willst, dann google das Stichwort "Delphi Synchronize" :D