Idftp1 Problem (Bug?)

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
reiter
Beiträge: 217
Registriert: Sa 18. Nov 2017, 16:58

Idftp1 Problem (Bug?)

Beitrag von reiter »

Ich bräuchte das Ereignis getafterput im idftp1

Nur wenn ich dieses anklicke bringt er mir sofort einen Fehler das ich das nicht auswählen kann
Und Fehler in der idglobal

Kann das jemand nachvollziehen?
Und wie kann ich das getafterput irgendwie nutzen?

Danke
Reiter

Warf
Beiträge: 1908
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: Idftp1 Problem (Bug?)

Beitrag von Warf »

Setz das Event einfach im Code

Code: Alles auswählen

DeinControl.EventName := @EventHandleFunktion;

Dann mit dem textcursor auf EventHandlerFunktion gehen und Strg+Shift+C drücken und Lazarus erstellt den eventhandler für dich (oder du schreibst die Funktion selbst)

Den fehle in der idglobal behebst du indem du Indy neu kompilierst (Package öffnen und kompilieren drücken) das muss man ab und an mal machen, keine Ahnung warum.

Der aktuelle Trunk von Indy ist aber sowieso etwas kaputt für Lazarus, ich musste als ich es demletzt neu installiert hab 2 Zeilen per Hand fixen (eine typdefinition und ein ifdef deprecated)

reiter
Beiträge: 217
Registriert: Sa 18. Nov 2017, 16:58

Re: Idftp1 Problem (Bug?)

Beitrag von reiter »

Werde das indy mal neu compilieren... Mal sehen
Aber was mich viel mehr interessiert
Kannst mir das mit dem Event bitte etwas näher erklären?
Wäre ich dir sehr dankbar drüber

Eventhandlerfunktion usw
Wie würde die Syntax dazu aussehen

Warf
Beiträge: 1908
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: Idftp1 Problem (Bug?)

Beitrag von Warf »

Ein Event ist ein funktionspointer, z.b. Ein OnClick Event ist vom Typ TNotifyEvent

Code: Alles auswählen

type
  TNotifyEvent = procedure (Sender:TObject) of object;


Das heißt der eventhandler muss eine Methode (also die Funktion einer Klasse sein) die 1 argument annimmt das vom Typ TObject sein.
Ohne das of object würde es eine normalen procedure und keine Methode sein
Geht natürlich auch mit Funktionen:

Code: Alles auswählen

TTestFunc = function (AIndex: Integer): Boolean; // eine Funktion, keine Methode, die einen Boolean zurückgibt und einen Integer als Argument nimmt


Den funktionspointer einer Funktion bekommst du über @:

Code: Alles auswählen

function test(AIndex: Integer): Boolean;
Begin
  Result := AIndex > 0;
End;
 
...
Var t: TTestFunc;
...
  t := @test;
  If t(42) then ...


Schau dir einfach die Definition der property an und Bau die Methode selbst

reiter
Beiträge: 217
Registriert: Sa 18. Nov 2017, 16:58

Re: Idftp1 Problem (Bug?)

Beitrag von reiter »

danke...
im grunde muss die funktion nur eine andere form aufrufen was nach dem upload auf den ftp passieren sollte weil in der anderen form ein telnet befehl ausgelöst wird..
darum wollte ich die methode afterput verwenden weil woher soll den telnet wissen wann die datei vollständig hochgeladen wurde

oder kann man das anders und einfacher lösen?

Dann mit dem textcursor auf EventHandlerFunktion gehen und Strg+Shift+C drücken und Lazarus erstellt den eventhandler für dich (oder du schreibst die Funktion selbst)


kannst mir das dann nochmal erläutern ?

danke

Warf
Beiträge: 1908
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: Idftp1 Problem (Bug?)

Beitrag von Warf »

Strg+Shift+C ist der Lazarus Shortcuts um Code automatisch zu erzeugen. Z.B. Wenn du einen eventhandler zuweist der noch nicht existiert kann Lazarus die Funktion damit automatisier erzeugen. Dafür muss der textcoursor (der blinkende strich) nur irgendwo auf dem Unbekannten bezeichnet liegen.

Andere Anwendungsmöglichkeiten ist das erstellen von properties oder das erzeugen lokaler Variablen.
Z.b. Bei i:=5; erzeugt Lazarus wenn man bei i Strg+Shift +C drückt die lokale Variable i als Integer (echt praktisch da man dann nicht extra zum Funktionsumfang scrollen muss) funktioniert auch für For Zähler Variablen

reiter
Beiträge: 217
Registriert: Sa 18. Nov 2017, 16:58

Re: Idftp1 Problem (Bug?)

Beitrag von reiter »

Vielen Dank für die Erklärung...
Werde ich mal probieren

Gruß
Reiter

reiter
Beiträge: 217
Registriert: Sa 18. Nov 2017, 16:58

Re: Idftp1 Problem (Bug?)

Beitrag von reiter »

um nochmal auf den fehler in der idglobal zu kommen

kann mir da vielleicht mal jemand helfen oder umschreiben? hab ich vergessen was hinzuzufügen?
da ich auf den mac und linux das mache
wenn ich auf ereignisse afterput klicke steigt er hier in der idglobal aus

// For linux the user needs to set this variable to be accurate where used (mail, etc)
GOffsetFromUTC: TDateTime = 0{$IFDEF HAS_DEPRECATED}{$IFDEF USE_SEMICOLON_BEFORE_DEPRECATED};{$ENDIF} deprecated{$ENDIF};

fehlermeldung

IdGlobal.pas(1889,105) Error: ; erwartet aber deprecated gefunden

hab auch versucht mich hier einzulesen.. TNotifyEvent
da steig ich aber noch nicht durch
obwohl das eigentlich besser wäre weil man da unabhängig eine methode erstellen kann

bzw vielleicht könnte mir hier jemand mit einer methode helfen?
was ich mit afterput auslösen wollte ist eine form2.show zu erreichen also wenn die datei fertig auf den ftp geladen ist,soll er form2 aufrufen

danke schon mal

Warf
Beiträge: 1908
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: Idftp1 Problem (Bug?)

Beitrag von Warf »

Quick and dirty: Ersetz den ganzen Ausdruck hinter der 0 einfach mit ;
Richtig: definiere das Use_semicolon_before_deprecated (oder wie das heißt) in den Package Einstellungen

reiter
Beiträge: 217
Registriert: Sa 18. Nov 2017, 16:58

Re: Idftp1 Problem (Bug?)

Beitrag von reiter »

vielen dank..
jetzt bringt die idglobal keinen fehler mehr

Antworten