Übersetzung des Lazarus-Wiki

Für Dinge rund um die Unterstützung des offizielen Lazarusprojekts, wie Übersetzungsabsprachen und anderem.
Antworten
pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

ich habe einen komplet englischen link für euch:
http://wiki.lazarus.freepascal.org/Extending_the_IDE
(zufällig gefunden)

es gibt den in drei sprachen aber nicht in deutsch !

edit1:
und noch einen:
http://wiki.lazarus.freepascal.org/Gett ... us#Via_SVN

edit2:
toll gerade die intresannten seiten sind in englisch:
http://wiki.lazarus.freepascal.org/Laza ... ntation/de
und dann bei:
LCL - Lazarus Component Library
MFG
Michael Springwald

Euklid
Lazarusforum e. V.
Beiträge: 2808
Registriert: Fr 22. Sep 2006, 10:38
OS, Lazarus, FPC: Lazarus v2.0.10, FPC 3.2.0
Wohnort: Hessen
Kontaktdaten:

Beitrag von Euklid »

pluto hat geschrieben:toll gerade die intresannten seiten sind in englisch:


Keine Sorge, die Artikel werden eines Tages übersetzt sein. Ich bitte aber zu berücksichtigen, dass die Übersetzung nur in freien Teilen der Freizeit geschehen kann.

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

naja hauptsache es macht jemmand wann ist ja egal...
*G*
ich habe gestern noch geshen das viele bereich noch in englisch verfast sind auf der "einen" seite!
MFG
Michael Springwald

schnullerbacke
Beiträge: 1187
Registriert: Mi 13. Dez 2006, 10:58
OS, Lazarus, FPC: Winux (L 1.2.xy FPC 2.6.z)
CPU-Target: AMD A4-6400 APU
Wohnort: Hamburg

Beitrag von schnullerbacke »

@Euklid

In der "äußerst kostbaren" hätte noch gefehlt. Ich hab ja schon das eine oder andere Vorkommen von:

"Fühlen sie sich frei,..."

Ist doch kein FKK-Club und zudem sagt es was über die Qualität des Wörterbuches aus. Das ist ne primitive 1:1 Übersetzung. Wenn man da usefull phrases mit reingenommen hätte, wäre einem da sofort:

"Sie können/dürfen..."

eingefallen. Ich glaube manche scheuchen das durch nen Translator und beheben hinter den schlimmsten Schrott.
Humor ist der Knopf, der verhindert, daß uns der Kragen platzt.

(Ringelnatz)

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Beitrag von mschnell »

schnullerbacke hat geschrieben:Das läuft auch nicht im Main-Loop sonder wird in während der Idletime des Main-Thread ausgeführt.


Hmm. Was genau meinst Du mit "Main-Loop" und "Idle-Time des Prozesses" ?

Ich vermute wenn ein Event (e.g. OnButton1Click) abgearbeitet ist, kommt die RTL zurück in etwas, was man Main-Loop nennen könnte. Dort wird die Event-Queue abgefragt. Falls noch ein Event ansteht, wird dieses abgearbeitet (und kommt hierhin zurück) Falls keins mehr abgearbeitet wird, wird OnIdle aufgerufen und dann legt sich der Prozess schlafen, indem ein Blocking Aufruf "Warte auf Queue" gemacht wird.

Wenn das so ist, ist "onIdle" noch langsamer als ein normales Queue-Event, weil es erst nach abarbeiten _aller_ Events aufgerufen wird. Auch ansonsten sehe ich keinen Vorteil darin, neben der RTL-Queue noch weiter Event FiFos zu bauen.

-Michael

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Wenn das so ist, ist "onIdle" noch langsamer als ein normales Queue-Event, weil es erst nach abarbeiten _aller_ Events aufgerufen wird. Auch ansonsten sehe ich keinen Vorteil darin, neben der RTL-Queue noch weiter Event FiFos zu bauen.

Das ist doch das was ich die ganze Zeit erzähle
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

schnullerbacke
Beiträge: 1187
Registriert: Mi 13. Dez 2006, 10:58
OS, Lazarus, FPC: Winux (L 1.2.xy FPC 2.6.z)
CPU-Target: AMD A4-6400 APU
Wohnort: Hamburg

Beitrag von schnullerbacke »

Eigentlich hat jede Application ein Mainthread (Main-Loop), die Idle-Time ist immer die Zeit, in der von der Anwendung keine Anforderungen produziert werden, also keine Eingabe über Keyboard oder Maus usw. Diese Idle-Time kann man nutzen, indem man eine Prozedur an Application.OnIdle bindet. Diese Prozedur wird dann immer während der Idle-Time ausgeführt. SendSignal könnte also während dieser Zeit seine Signal-Queue leeren und die Signals weitergeben.

Die 2te Methode wäre, SendSignal selber zum Thread zu machen. Da alle Threads einer Anwendung im Round Robin laufen, also immer einen Teil einer Zeitscheibe lang laufen, würde SendSignal dann während dieser Zeit seine Signal-Queue leeren.

Dazu muß aber eben eine neue Prozedur her, die die Signals entgegen nimmt und in die Signal-Queue einträgt. Meinethalben CollectSignal. Etwas aufpassen muß man da allerdings, weil während des Eintragens der Thread nicht laufen darf. Dafür könnte man CriticalSection hernehmen. Eine andere Möglichkeit wäre sich ein Objekt TLockList zu bauen, die immer während ein Eintrag erfolgt oder verarbeitet wird den Lock selber setzt. Macht man das nicht, geht das prompt in die allseits beliebten Hosen.
Humor ist der Knopf, der verhindert, daß uns der Kragen platzt.

(Ringelnatz)

schnullerbacke
Beiträge: 1187
Registriert: Mi 13. Dez 2006, 10:58
OS, Lazarus, FPC: Winux (L 1.2.xy FPC 2.6.z)
CPU-Target: AMD A4-6400 APU
Wohnort: Hamburg

Beitrag von schnullerbacke »

Und nochmals der Hinweis, bei Delphi war das nicht anders möglich. Und ein Timer der mehr als ein Intervall bedienen kann, zumindest auf einem Formular, ist mir auch bei Lazarus nicht untergekommen. Wie auch immer die das nun im Hintergrund gelöst haben, ich müßte immer mehrere von den Dingern einbauen wenn ich verschiedene Zeitbasen brauche. Das kann auch schnell unübersichtlich werde.

Und anstatt schlaue Reden zu schwingen wäre ein Beispiel angezeigt, wie man z.B. einen Event in ein Objekt einbaut, etwa sowas:

Code: Alles auswählen

type
  TMyObject = class(TObject)
     procedure 1MinTick(args) ... CM_1MinTick;
  end;


Genau das ging bei Delphi eben nicht. Man beachte die Vaterklasse, ab TControl gings auch bei Delphi, damit ist mir aber nicht geholfen.
Humor ist der Knopf, der verhindert, daß uns der Kragen platzt.

(Ringelnatz)

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Die enfachste möglichkeit eigene events zu erzeugen ist die Signale einfach an die Lazarus que zu senden und an anderer Stelle mit procedure(Msg : TLmessage) message Mymessage; zu empfangen komfortabler gehts jawohl nicht
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Euklid
Lazarusforum e. V.
Beiträge: 2808
Registriert: Fr 22. Sep 2006, 10:38
OS, Lazarus, FPC: Lazarus v2.0.10, FPC 3.2.0
Wohnort: Hessen
Kontaktdaten:

Beitrag von Euklid »

schnullerbacke hat geschrieben:@Euklid

In der "äußerst kostbaren" hätte noch gefehlt. Ich hab ja schon das eine oder andere Vorkommen von:


stimmt.

"Fühlen sie sich frei,..."

Ist doch kein FKK-Club


:lol:

Ich denke, wenn jeder ein Stück zur Übersetzung beiträgt, ist es für den Einzelnen nicht mehr so viel Arbeit.

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Beitrag von mschnell »

Christian hat geschrieben:Die enfachste möglichkeit eigene events zu erzeugen ist die Signale einfach an die Lazarus que zu senden und an anderer Stelle mit procedure(Msg : TLmessage) message Mymessage; zu empfangen


Wie sende ich die Signale "an die Lazarus Queue" ?

Ist das (im Gegensatz zu Delphi/Kylix) Platform-unabhängig ? (Verwendet also eine Lazarus Library Funktion und nicht direkt eine (Windows-) API.)

Die procedure(Msg : TLmessage) ist dann ein Event das wie ein "OnClick" event aufgerufen wird, "Wenn es dran ist" (message FiFO). Korrekt ?

Wie verhält sich das mit Threads ? Ich vermute, man darf auch von Threads Signale "an die Lazarus Queue" schicken und die procedure(Msg : TLmessage) wird immer im Mainthread aufgerufen. Korrekt ?

Gibt es eine bekannte Methode, so etwas ähnliches wie "procedure(Msg : TLmessage)" im Kontext eines Threads aufrufen zu lassen ?

Christian hat geschrieben:komfortabler gehts jawohl nicht


Hört sich gut an ! Das schaue ich mir an !

-Michael

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Code: Alles auswählen

const
  MYMESSAGE = LM_USER+100;
 
 
Form = class(TForm)
private
  procedure MyMessage(var Message: TLMessage); message MYMESSAGE;
end;
 
procedure DoSendMessage;
var
  Msg : TLMessage;
begin
  Msg.Message := MYMESSAGE;
  Form.Dispatch(Msg);
end;


Is mal n schuss ins blaue aber so müsst es klappen
Mit dem Threading steh ich nicht tief genug in der Materie Ich für meinen Teil hätt es mit nem Syncronize gemacht aber kann gut sein das man das auch so darf. Landen tut die Message in der nativen Fensterschleife des Hauptfensters plattformunabhängig Lazarus setzt lediglich die Narichten in das eigene Narichtensystem um. Im Windows heissen dann die Lazarus Messages genau wie die Windows Messages bloss das sie mit LM starten und nicht WM.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Beitrag von mschnell »

Christian,

Ich habe das (zunächst in Delphi, aber Lazarus arbeitet da sicherlich ähnlich) ausprobiert.

Dispatch ist nicht die Funktion, die eine Message in eine Queue "sendet", sondern Dispatch ruft _direkt_ die zur Message gehörige (also mit "procedure..message" angemeldete) Prozedur auf. Was wir hier aber wollten, war, eine Queue zu verwenden (anstatt sie neu zu implementieren). Es fehlt mir also noch die Lazarus-Version des Sendens einer Message in die Queue, die z.B. auch die Mouse-, Keyboard- und Timer-Events (und auch die "TThread.Synchronize"-Events) enthält. In Delphi geht das nur mit einer Windows-API "SendMessage". Ich hoffe, in Lazarus ist das Platform-unabhängig enkapsuliert.

-Michael

schnullerbacke
Beiträge: 1187
Registriert: Mi 13. Dez 2006, 10:58
OS, Lazarus, FPC: Winux (L 1.2.xy FPC 2.6.z)
CPU-Target: AMD A4-6400 APU
Wohnort: Hamburg

Beitrag von schnullerbacke »

Siehste Michael, das ist genau das Problem gewesen. SendMessage (Delphi)läuft nur dann, wenn die Message in der Liste der Windows-Messages vorhanden ist. Der Message-Handler ist aber nur in TWinControl oder davon abgeleiteten Objekten vorhanden, da macht er dann Dispatch. Und genau das ist grober Unfug.

Bei Kylix haben die das damals anders implementiert (MessageHook) und da konnte man beliebige Objekte beschicken, aber auch nicht alle.

Was wir meinen ist eher die Methode von Qt, wo eben jedes Objekt einen oder mehrere SignalSlots haben kann und in jedem Fall das Signal(Message) erhält wenn es den Slot z.V. gestellt hat. Damit kann man die Units entkoppeln. Ich kann Daten an ein Objekt schicken ohne zu wissen wo genau das nun ist. Ich kenne die Slot-Implementierung, das reicht.

Wenn sie das bei Lazarus vernünftig gelöst haben, sollte mich das freuen. Leider wirste mit googeln zu dem Thema garnix, darauf wird nirgends eingegangen. Das wäre also schonmal was, das wir für das Wiki und für ralli's Projekt ausarbeiten können.

Man stelle sich vor, wir basteln für den Firebird SQLServer eine UDF(user defined function), die z.B. intern die Termine für eine Terminverwaltung überprüft und senden dann gezielt an die Maschinen ein Signal mit kompletten Datensatz für die Terminverwaltung, auf der die Betroffenen angemeldet sind. Anstatt also in Intervallen ständig die Daten abzufragen oder sämtlich alle geladen zu haben, übernimmt der SQL-Server die Aufgabe für uns. Dabei braucht er im Grunde nur den Index übergeben und der entsprechende Slot ruft daraufhin den Datensatz ab.

Asynchron nennt man sowas glaub ich. So sollten moderne Programme laufen, die Qt macht es möglich. Das sollte das Gespann FPC/Lazarus auch tun, das wäre man ne Schaffe oder wie der Schinderhannes gesagt hätte:

"Eine grandige schassige Maloche!"... :lol:
Humor ist der Knopf, der verhindert, daß uns der Kragen platzt.

(Ringelnatz)

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Weiss ich jetz auch nich ausm hut ihr könnt ja mal auf der mailingliste fragen selbst wenn es dazu aber nix gibt ist das mit n paar ifdefs schnell implementiert wie man an die windows que ne message sendet wissen wir ja das selbe müsst man noch für gtk und gtk2 rausbekommen und in ne funktion packen ist aber denkbar das es die in der lcl schon gibt

EDIT: SendApplicationMsg(Msg: Cardinal; WParam: WParam; LParam: LParam): Longint;

mal kurz in der Forms.pas geschaut :p

Antworten