Anschubhilfe Neuprogrammierung Druckvorstufenanwendung

Für Fragen von Einsteigern und Programmieranfängern...
Pixelwizard
Beiträge: 11
Registriert: Do 19. Jun 2014, 18:08
OS, Lazarus, FPC: W7, Lazarus 1.2.4
CPU-Target: 64Bit
Wohnort: Ludwigshafen
Kontaktdaten:

Anschubhilfe Neuprogrammierung Druckvorstufenanwendung

Beitrag von Pixelwizard »

Hallo zusammen,
ganz neu und gleich jede Menge Fragen..;)
Vor einiger Zeit habe ich mir eine sehr spezielle Druckvorstufensoftware programmiert, der Weg ging über eine Excel-Datei (bis alles so rund war wie ich wollte) und danach dann über die Scriptsprache "AutoIT", da ich ein kleines Standalone für Windows erstellt habe. Das hat auch alles soweit ganz gut funktioniert, nur sind mir die Limits von AutoIt jetzt doch zu groß...bzw. Wege auf andere Plattformen verschlossen. Daher kam ich dann nach einiger Suche erst auf QT5 und dann Lazarus.
Die Ansätze der beiden sind ja weitestgehend identisch, allerdings sagt mir Lazarus nach einigem hin- und herprobieren doch besser zu.

Deswegen gleich die erste generelle Frage:
Sollte ich besser gleich mit laztoapk arbeiten, wenn aus der Arbeit später auch eine Android-App werden soll oder kann ich das Projekt ganz "normal" mit Lazarus aufbauen und dann "weiterverarbeiten"?

Weiter habe ich mich durch diverse Wikis und Webseiten gelesen, aber irgendwie ist der Knoten noch nicht so ganz geplatzt.
Das System mit den Formularen, Units und auch den Aufbau der benötigten Formulare war soweit easy, nur stolpere ich dauernd darüber, das ganze mit "Leben" zu füllen. Was ich jetzt schon sehe ist jedoch, das ich mit Lazarus wohl nur einen Bruchteil der mit AutoIT benötigten Codezeilen brauchen werde.

Stolper 1 (und zum Verständnis):
Wenn ich mit Werten rechnen will, muss ich diese entweder als Variable oder als Konstante bekanntmachen. So wars vorher im Prinzip auch.
Den Weg wollte ich aber eleganter lösen...für die benötigten Werte verwende ich eine (vier) TSpinEdit-Felder. Hoffe richtig verstanden zu haben, das das ja gleich Integer-Typen sind, die dabei rauskommen, ich also eigentlich nicht zwingend nohmal eine Variable brauche mit der ich weiterrechnen kann.
Ich hab auch nach einigem lesen (mit sehr begrenztem Zeitrahmen) - noch nichts wirklich gefunden, was mal kurz und knackig beschreibt, wie ich an die Value des Spin-Feldes herankomme und dann damit weiterarbeite...
Was im ersten Schritt passieren soll: Wert der Spin1 und Spin2 sollen ausgelesen, der Wert Spin1 verdoppelt und WertSpin2 hinzuaddiert werden.
Danach das Ergebnis in ein Label geschrieben werden. Das ganze entsprechend akiv - werden sie Spins verändert, soll sich das Label sofort mitändern...
also Label1Caption = TSpinEdit1Value * 2 + TSpinEdit2Value...
Geht das soo einfach oder sollte ich da noch mehr aussenrum aufbauen...?

Gruß
... geht net gibts net ...

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: Anschubhilfe Neuprogrammierung Druckvorstufenanwendung

Beitrag von mse »

Pixelwizard hat geschrieben: Das ganze entsprechend akiv - werden sie Spins verändert, soll sich das Label sofort mitändern...
also Label1Caption = TSpinEdit1Value * 2 + TSpinEdit2Value...
Geht das soo einfach oder sollte ich da noch mehr aussenrum aufbauen...?
Falls du so arbeiten möchtest ist MSEgui besser geeignet. MSEgui hat "tintegeredit" und "tintegerdisp". Der "ondatentered" event handler:

Code: Alles auswählen

 
procedure tmainfo.dataenteredexe(const sender: TObject);
begin
 tintegerdisp1.value:= tintegeredit1.value * 2 + tintegeredit2.value; 
end;
 
Falls du dann noch ein "tstatfile" in die "statfile" Eigenschaften einhängst, werden die Werte automatisch in eine Datei gesichert.
Eine kleine Einführung ist hier:
http://sourceforge.net/projects/mseuniverse/files/book/

Pixelwizard
Beiträge: 11
Registriert: Do 19. Jun 2014, 18:08
OS, Lazarus, FPC: W7, Lazarus 1.2.4
CPU-Target: 64Bit
Wohnort: Ludwigshafen
Kontaktdaten:

Re: Anschubhilfe Neuprogrammierung Druckvorstufenanwendung

Beitrag von Pixelwizard »

Hab mir das mal angeschaut, sieht auch sehr vielversprechend aus!
Der einzige Wermutstropfen meinerseits wäre auf den ersten Blick aber die fehlende Android-Plattform.
Werde mir dann wohl nochmal die andere Alternative anschauen - über PhoneGap - denn eine Portierung nach
HTML5 etc. mit dynamischen Canvas-Elementen hab ich ja auch schon gebastelt... ;) .... ich möchte eben das ganze
unter einen Hut bringen und von einer Quelle aus möglichst viele Plattformen abdecken können.
Die ganzen Berechnungen selbst sind eigentlich simpel und beruhen letzlich auf vier Eingangswerten, der ganze Rest baut per
Formeln drauf auf. Bei Interesse www.factor118.de (Siebdruck-Multitool).
Das ganze soll aber in Zukunft erweitert werden, dafür ist mein ursprünglicher Ansatz zu Umständlich. Deswegen neu, sauber und
aufgeräumt... ;)

Danke für den Hinweis, werd wohl nochmal ein paar Tage die grauen Zellen sortieren ;)
... geht net gibts net ...

Socke
Lazarusforum e. V.
Beiträge: 3177
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: Anschubhilfe Neuprogrammierung Druckvorstufenanwendung

Beitrag von Socke »

Pixelwizard hat geschrieben:für die benötigten Werte verwende ich eine (vier) TSpinEdit-Felder. Hoffe richtig verstanden zu haben, das das ja gleich Integer-Typen sind, die dabei rauskommen, ich also eigentlich nicht zwingend nohmal eine Variable brauche mit der ich weiterrechnen kann.
Die Spin-Edits haben eine Eigenschaft "Value", in der der aktuelle Integer-Wert enthalten ist; zu beachten sind auch die Eigenschaften "MinValue" und "MaxValue" mit denen der Wertebereich angegeben wird.
Pixelwizard hat geschrieben:Was im ersten Schritt passieren soll: Wert der Spin1 und Spin2 sollen ausgelesen, der Wert Spin1 verdoppelt und WertSpin2 hinzuaddiert werden.
Danach das Ergebnis in ein Label geschrieben werden. Das ganze entsprechend akiv - werden sie Spins verändert, soll sich das Label sofort mitändern...
also Label1Caption = TSpinEdit1Value * 2 + TSpinEdit2Value...
Du wählst ein SpinEdit aus, gehst im Object Inspector auf den Reiter "Ereignisse" und klickst bei dem OnChange-Ereignes auf den Button mit den drei Punkten ("..."). In der so erstellten Methode kannst du deine Berechnungen durchführen. Bei allen weiteren SpinEdits (für diese Berechnung) kannst du dann über die Drop-Down-Liste die Methode vom ersten SpinEdit auswählen.
Damit der Wert auf einem Label angezeigt werden kann, muss er natürlich in eine Zeichenkette umgewandelt werden.

Code: Alles auswählen

procedure Form1.SpinEditChange(Sender: TObject);
begin
  TLabel1.Caption := IntToStr(SpinEdit1.Value * 2 + SpinEdit2.Value);
end;
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Pixelwizard
Beiträge: 11
Registriert: Do 19. Jun 2014, 18:08
OS, Lazarus, FPC: W7, Lazarus 1.2.4
CPU-Target: 64Bit
Wohnort: Ludwigshafen
Kontaktdaten:

Re: Anschubhilfe Neuprogrammierung Druckvorstufenanwendung

Beitrag von Pixelwizard »

Hallo Socke,
jepp letzteres war eigentlich ein Teil der Frage. Mit z.B. Qt5 hab ich auch rumgebastelt, von daher sind mir die Optionen in der Oberfläche soweit schon einleuchtend, bzw. werden ausprobiert. Was mir nicht ganz klar war (bei einem "nur" Edit schon, da ja Text oder Zahl drinstehen kann...) ob die Umwandlung bei einem SpinEdit, welches ja laut Beschreibung einen Integerwert liefert, trotzdem noch notwendig ist - also eben doch.
Das war in der vorherigen Umgebung nicht zwingend der Fall, hier konnte die Value eines Controls direkt ausgelesen und weiterverarbeitet werden, der Aufbau für eine so einfache Control aber im Vergleich doch recht umständlich - wenigstens drei Zeilen Code und nur begrenzte Möglichkeiten, die GUI aufzubauen.

Damit hab ich jetzt aber den Ansatz erstmal geklärt und Eier nicht durch die Gegend. Werd mich jetzt mal gemütlich ans portieren machen ;)
... geht net gibts net ...

Pixelwizard
Beiträge: 11
Registriert: Do 19. Jun 2014, 18:08
OS, Lazarus, FPC: W7, Lazarus 1.2.4
CPU-Target: 64Bit
Wohnort: Ludwigshafen
Kontaktdaten:

Re: Anschubhilfe Neuprogrammierung Druckvorstufenanwendung

Beitrag von Pixelwizard »

So, nach ein bischen hin und her bleibts dann doch bei Lazaus.
Hab mir jetzt meine Struktur aufgebaut etc., aber ich Stolpere trotzdem:

Code: Alles auswählen

 
procedure TForm1.fsvalChange(Sender: TObject);
begin
  mpval.Caption := IntToStr(fsval.Value * 2 + mwval.Value);
  laval.Caption := IntToStr(sqrt(2)* (fsval.Value + mwval.Value) * (fsval.Value / mwval.Value));
  {Formel aus AutoIT: Round($s2 * ($fs_wert + $mw_wert) * ($fs_wert / $mw_wert))}
end;
 
procedure TForm1.mwvalChange(Sender: TObject);
begin
  mpval.Caption := IntToStr(fsval.Value * 2 + mwval.Value);
  laval.Caption := IntToStr(sqrt(2)* (fsval.Value + mwval.Value)) * (IntToStr(fsval.Value / mwval.Value));
  {Formel aus AutoIT: Round($s2 * ($fs_wert + $mw_wert) * ($fs_wert / $mw_wert))}
end; 
 
Obiges verstehe ich nicht so ganz. Die mpval-Zeilen funktionieren wunderbar. Recap: Das jeweilig aktuelle Value des Spin-Edit wird nach der Berechnung in einen String umgewandelt und ins mpval-Label geschrieben. Da ich ja zwei Spin-Edits habe, die Anweisung bei beiden. Check, geht.
Die laval-Anweisung geht nicht.... :(
Ich hab mal die Formel aus AutoIT mit dazu notiert. Zweite Anweisung fürs mvalChange bitte nicht beachten, die ist "Baustelle", es bleibt beim Compilieren schon an der ersten hängen:
Error: Incompatible type for arg no.1: Got "Extended", expect "QWord"
Der Fehler tritt auch auf, wenn ich sqrt(2) weglasse.....hmpf und vor allem, wenn ich ROUND weglasse... obiges hat sich grad gelöst.

Trotzdem noch die nächsten Fragen zum Verständnis hinterher: Die nächsten Berechnungen erfolgen mit FloatSpinEdits die mit einer Konstante verrechnet werden.
Was ich bisher so gelesen habe...eine Konstante bekommt ihren Typ automatisch zugewiesen? 2.54 wäre also automatisch "Double" und sollte sich mit den Values der FloatSpins verechnen lassen (die ja auch "Double" sind...)? Und fürs Label dann FloatToStr...
Denke grad, dass ich ein bischen über die Typen stolpere und über unterschiedlichste Dokus...

Bei Antworten bitte mal nur die Richtung korrigieren, falls nötig. Auch wenn ich nur wenig Zeit zum lernen hab, ist das aber die Intention ;)
In der vorherigen Programmierung sind mir Schwachpunkte aufgefallen, die ich jetzt gleich Stück für Stück auspflegen möchte ;)

So long... und Guten Morgen...
... geht net gibts net ...

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: Anschubhilfe Neuprogrammierung Druckvorstufenanwendung

Beitrag von mse »

fsvalChange() und mwvalChange() sind identisch? Dann könnte eine einzige Routine beide edit widgets bedienen. Das A und O der Software-Programmierung ist die Programme so zu strukturieren, dass Fehler nur an einem Ort korrigiert werden müssen.
Datentypen und Operatoren sind hier dokumentiert:
http://www.freepascal.org/docs-html/ref/ref.html
"/" ist eine Gleitkomma-Operation und liefert wie sqrt() ein "real" Resultat, darum funktioniert inttostr() mit dem laval Ausdruck nicht; wie be AutoIT ist ein round() notwendig.
Noch ein Hinweis. Falls Android als Laufzeitumgebung eine Bedingung für deine Entwicklung ist, würde ich als erstes versuchen ein kleines Android Projekt Umzusetzen. Möglicherweise gibt es da Überraschungen...
Falls Android keine absolute Bedingung ist, solltest du MSEgui nicht aus den Augen verlieren, da du ja keinen Delphi Hintergrund hast.
Lazarus ist so gut wie möglich Delphi-kompatibel und erbt daher auch dessen Mängel und Einschränkungen. MSEide+MSEgui im Gegensatz dazu wurde von Grund auf, aus der Praxis heraus und ohne kommerzielle Fesseln entwickelt, welche den Delphi Hersteller dazu zwingen, die Entwicklung hauptsächlich an den Gewinnzahlen auszurichten.

Benutzeravatar
theo
Beiträge: 10867
Registriert: Mo 11. Sep 2006, 19:01

Re: Anschubhilfe Neuprogrammierung Druckvorstufenanwendung

Beitrag von theo »

OK mse, hast jetzt deinen Werbespot für MSEgui im Lazarusforum abgeben dürfen.
Ich finde es reicht jetzt mal wieder für die nächsten Monate. :wink:

Pixelwizard
Beiträge: 11
Registriert: Do 19. Jun 2014, 18:08
OS, Lazarus, FPC: W7, Lazarus 1.2.4
CPU-Target: 64Bit
Wohnort: Ludwigshafen
Kontaktdaten:

Re: Anschubhilfe Neuprogrammierung Druckvorstufenanwendung

Beitrag von Pixelwizard »

FS und MW sind nicht identisch. Das sind zwei Werte die unterschiedliche Parameter beschreiben. Aus der Berechnung beider Parameter ergibt sich dann ein wert. Es kann sein das sich fs nicht ändert MW aber schon. Und umgekehrt. Deswegen erstmal die Trennung. Behalte den Hinweis aber gerne im Hinterkopf. Ja das round... Da komm ich schon zur nächsten kleinen Baustelle. Die spinedits haben jetzt zwei Nachkommastellen...der Inkrement kann aber nicht auf 0.1 gesetzt werden...nach der Berechnung hab ich auch etliche Nachkommastellen sollten aber nur zwei sein. Hab heut früh was von roundto gelesen. Das brennt jetzt aber nicht sooo, denn die gewünschte Funktion ist bisher gegeben. Tuning kommt dann Stück für Stück. Android ist jetzt nicht so der Fokus aber hab mir schon laztoapk auf die platte geholt und bisher scheint zu funktionieren. Aber erstmal die Hauptanwendung rund, den Lerneffekt mitnehmen und dann auf die andern Hürden. Ansonsten bleibt mir ja immer noch der weg über ne webapp, das Material ist ja schon da. ;)
... geht net gibts net ...

Pixelwizard
Beiträge: 11
Registriert: Do 19. Jun 2014, 18:08
OS, Lazarus, FPC: W7, Lazarus 1.2.4
CPU-Target: 64Bit
Wohnort: Ludwigshafen
Kontaktdaten:

Re: Anschubhilfe Neuprogrammierung Druckvorstufenanwendung

Beitrag von Pixelwizard »

IntToStrF hats dann für die zwei Nachkommastellen im Kabel gebracht. Für die Edits und den ganzzahligen Increment...mach ich einfach einen Hinweis die Nachkommastellen direkt einzugeben. Der Hauptzähler wird ja dann weiter nach oben oder unten gezählt, das wäre erstmal ausreichend Funktionell. Und weiter geht die lustige Fahrt. Wenn sich die Knoten weiter so schön Lösen, frag ich mich echt, warum ich da nicht vorher statt mit Autoit gearbeitet hab. Zwei Fragen noch....Farbenhandling mit if Anweisungen...und ein gutes Array-Tutorial...;)
... geht net gibts net ...

Komoluna
Beiträge: 565
Registriert: So 26. Aug 2012, 09:03
OS, Lazarus, FPC: Windows(10), Linux(Arch)
CPU-Target: 64Bit

Re: Anschubhilfe Neuprogrammierung Druckvorstufenanwendung

Beitrag von Komoluna »

Was meinst du mit Farbenhandling?

Array Tutorial:
http://de.wikibooks.org/wiki/Programmie ... al:_Arrays

MFG

Komoluna
Programmer: A device to convert coffee into software.

Rekursion: siehe Rekursion.

Pixelwizard
Beiträge: 11
Registriert: Do 19. Jun 2014, 18:08
OS, Lazarus, FPC: W7, Lazarus 1.2.4
CPU-Target: 64Bit
Wohnort: Ludwigshafen
Kontaktdaten:

Re: Anschubhilfe Neuprogrammierung Druckvorstufenanwendung

Beitrag von Pixelwizard »

Einmal muss ich einen graustufenkeil hin bekommen, da Bau ich aber mein bestehendes script um. Der geht dann von O-255. Dann muss ich aber auch einen keil bauen, der sich an die ermittelten Graustufen anpasst. Heißt als z.b nur 100 Graustufen, wobei 0 und 255 immer bleiben. Dazwischen muss ich aber die Werte darstellen die übrigbleiben. Daher der Gedanke die kompletten Werte in ein array zu speichern und dann z.b nur jeden zweiten wert darzustellen. Bin damit aber noch nicht ganz durch, deswegen erstmal schlau machen ob array der weg ist oder ob ich mir was anderes einfallen lasse. Dann sollen auch noch Labels bzw buttons eingefärbt werden. Je nach dem ob ein wert unterschritten wird rot, ansonsten grün. Das bekommen ich aber sicher gut hin das ist ja nur ne einfache Abfrage und ich hab ja Vergleichsmaterial weil schon mal gemacht. Nur diesmal halt nicht so umständlich ;)
... geht net gibts net ...

Pixelwizard
Beiträge: 11
Registriert: Do 19. Jun 2014, 18:08
OS, Lazarus, FPC: W7, Lazarus 1.2.4
CPU-Target: 64Bit
Wohnort: Ludwigshafen
Kontaktdaten:

Re: Anschubhilfe Neuprogrammierung Druckvorstufenanwendung

Beitrag von Pixelwizard »

Sooooo....
geht gut voran das ganze. Gibt es eigentlich eine Möglichkeit, beim Aufrufen des Programmes (oder Öffnen eines Fensters...) die notwendigen Berechnungen durchführen zu lassen ....ohne .... den Relevanten Wert im SpinEdit zu ändern resp. geändert zu haben?
Im Detail: Mein erstes Fenster enthält nur die vier notwendigen Parametereingaben. Die Felder und Labels sind mit Basiswerten vorbelegt. D. h. eigentlich über die jeweiligen captions "gefaked". Denn beim ersten Aufruf wird nichts berechnet sondern eben nur angezeigt. Das wäre für das erste Fenster noch nicht mal sooo schlimm.
Das zweite Fenster enthält aber eine Skala. Aufbau: Panel mit jeweils 3 Buttons für unterschiedliche Informationen (Die Buttons brauch ich später noch für andere Funktionen). Die beiden ersten Buttons sind per Caption fix eingestellt, da ändert sich auch nix. Im dritten Button wird eine Größenangabe berechnet (und per Caption eingeblendet), die sich mit der Veränderung des SpinEdits für die Rasterfrequenz dynamisch über die ganze Skala ändert. Gleichzeitig wird überprüft, ob der Wert größer als eine Vorgabe ist und das dahinterliegende Panel dann entweder rot (zu klein) oder grün eingefärbt.
Das funktioniert auch alles - allerdings erst, wenn ich wenigstens einmal den Wert der Rasterfrequenz geändert habe.
Heisst also - klickt man den Button für das Skalenfenster ohne irgendwas geändert zu haben, sind die Buttons noch leer und die Panels ebenfalls nicht eingefärbt.
Kann man die Berechnung z. B. mit dem Button-Klick verbinden, der das Fenster öffnet?
Alternativ kann ich natürlich einfach eine Vorbelegung mit "0" oder Leer für die Spin-Edits im ersten Fenster machen, dann wäre für den Anwender ja auch deutlich, das was eingegeben werden muss. Eleganter wärs halt anders ,)

Und ne Frage zu den Canvas-Elementen. Das Scripting hab ich mir fürs Web schon aufgebaut....wie sehr unterschiedlich wäre das denn dann für Pascal? Was ich bis jetzt so Quergelesen habe, scheint es da keine gewaltigen Unterschiede zu geben...

So long!
... geht net gibts net ...

Michl
Beiträge: 2511
Registriert: Di 19. Jun 2012, 12:54

Re: Anschubhilfe Neuprogrammierung Druckvorstufenanwendung

Beitrag von Michl »

Pixelwizard hat geschrieben:Gibt es eigentlich eine Möglichkeit, beim Aufrufen des Programmes (oder Öffnen eines Fensters...) die notwendigen Berechnungen durchführen zu lassen ....ohne .... den Relevanten Wert im SpinEdit zu ändern resp. geändert zu haben?
Es ist üblich, Berechnungen vor oder unabhängig von dem Aufruf eines Formulars durchzuführen.

z.B.

Code: Alles auswählen

procedure TForm1.Button1Click(Sender: TObject);
begin
  BerechneDaten;
  Form2.ShowModal;
end;
Generell ist zu empfehlen, die Programmlogik von der Darstellung zu entkoppeln, diese, wenn nötig/möglich, in eine eigene Klasse (in einer eigenen Unit) unterzubringen. Somit dienen die Controls nur noch als Schnittstelle zur Ein- und Ausgabe von Daten. Wenn sich diese Daten ändern (z.B. der User hat die Eingabe einer Zahl beendet), schubst man Berechnungen neu an. Wenn sich die anzuzeigenden berechneten Daten geändert haben, lässt man diese auf dem Formular ausgeben.

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection;  

Pixelwizard
Beiträge: 11
Registriert: Do 19. Jun 2014, 18:08
OS, Lazarus, FPC: W7, Lazarus 1.2.4
CPU-Target: 64Bit
Wohnort: Ludwigshafen
Kontaktdaten:

Re: Anschubhilfe Neuprogrammierung Druckvorstufenanwendung

Beitrag von Pixelwizard »

Denke mal, das ich das im Grunde schon so aufgebaut hab. Im ersten Unit findet die ganze Logik statt,
von dort aus werden die Ausgaben in den anderen Fenstern angesteuert. Werd mal gerne die alte und die neue Programmierung zwischendurch online stellen, einfach mal fürs Auge ;).
... geht net gibts net ...

Antworten