Neuling benötigt Hilfe

Für Fragen von Einsteigern und Programmieranfängern...
Skrenkovic
Beiträge: 22
Registriert: Mi 1. Mai 2013, 19:18

Neuling benötigt Hilfe

Beitrag von Skrenkovic »

Hi Communitiy :)

Gleich mal am Anfang... ich bin ABSOLUTER Anfänger. Ich habe auf DOS ebene ein wenig Programmiert und nun versuche ich mich an der Objektorientierten Ebene. Hintergrund ist das Studium bin Maschienbau student und wir müssen ein kleines Programm schreiben. Nach langen hin und her habe ich auch schon eine grobe Idee was ich machen will. jetzt habe ich nur ein ein Problem.
Ich will in "Form1" , "Form2" ect eingeben (evtl wenn möglich in Ecxel Speichern ... währe nur Optional) und dann diese in "form3" anzeigen Lassen. kann man das einfach machen oder benötigt man da erfahrung!?

Sorry für die evtl dumme Frage aber wenn ich das gezeigt bekommen würde währe das super
Vielen Dank im Vorraus

Namos

Re: Neuling benötigt Hilfe

Beitrag von Namos »

Hi,
was genau Eingeben ? Messwerte ? Wörter ?
Form1 bezeichnet eigentlich eine Komponente auf der erst bestimmte Eingabefelder platziert werden. Nätürlich kann man die Ausgabe dann in einer Form2 oder Form3 machen wenn es dadurch übersichtlicher wird...
Man kann das ganze dann auch sicher in einem Format speichern das Excel laden kann, aber da kenne ich mich nicht so aus...

Für den Anfang eventuelle allgemeine Hilfen:
Tutorial aus dem Lazarus Wiki für den ersten Überblick: http://wiki.freepascal.org/Lazarus_Tutorial/de
Video Tutorials auf Youtube (finde ich sehr anfängerfreundlich): http://www.youtube.com/playlist?list=PLC4DA30B50338255B (von TheRegRunner)
Zuletzt geändert von Namos am Mi 1. Mai 2013, 20:44, insgesamt 4-mal geändert.

grl
Beiträge: 36
Registriert: Fr 17. Okt 2008, 19:24
OS, Lazarus, FPC: Debian X64, Lazarus 1.1, FPC 2.7.1
CPU-Target: x86, ARM

Re: Neuling benötigt Hilfe

Beitrag von grl »

Also ein bischen mehr Informationen wären hilfreich.

Wie wär's wenn du einfach mal beschreibst, was du vor hast? Was willst du eingeben/anzeigen/exportieren/drucken/wasweißichsonstnoch, und was willst du damit erreichen?

Womit hast du denn in DOS Programmiert?

Luggi

Skrenkovic
Beiträge: 22
Registriert: Mi 1. Mai 2013, 19:18

Re: Neuling benötigt Hilfe

Beitrag von Skrenkovic »

Sry. wie gesagt bin doch ein Neuling und weiss nicht genau was ihr alles braucht.

Also..... es sollen Wörter von "form1", "form2" ect. auf "form4" angezeigt werden.

Also ich kann euch mal mein "Projekt" kurz beschreiben was ich vor habe.
Ich will grob gesagt ein Programm schreiben, womit man ein Spielplan von einem Volleyballspiel ausfüllen kann. hört sich einfach an aber wird warscheinlich schwerer als ich dachte.

1.Schritt:
Ausfüllen der Feler wie Hallenname, Ort, Spieler ect. diese eingegeben Wörter sollen auf den Spielplan geschriben werden
http://volleyball.lok-engelsdorf.de/upl ... 18b15f.jpg
Links oben Ausfüllen sozusagen. Hierbei dachte ich das Bild einfach als Hintergrund zu nehemen.

2.Schritt und weitere Schritte :
Punktevergabe, Aufstelluing ect. --> das währe nun etwas schwer zu erklären... würde auch mit dem gleichen Prinzip funktionieren.

Also wie gesagt form1-4 oder so sollen die daten einegeben werden und dann auf Diesen Spielplan (über die funktion Label) eingetragen werden (aufs Bild geschriben)

grl
Beiträge: 36
Registriert: Fr 17. Okt 2008, 19:24
OS, Lazarus, FPC: Debian X64, Lazarus 1.1, FPC 2.7.1
CPU-Target: x86, ARM

Re: Neuling benötigt Hilfe

Beitrag von grl »

Ich verstehe immer noch nicht was du für ein Problem hast. Was hast du versucht, was hat funktioniert und was nicht?

Und womit hast du unter DOS programmiert? Auch Pascal?
Kannst du - sagen wir mal - ein Programm schreiben, das ein Form aufmacht, ein Label oder eine Editbox mit einem Timestamp füllt und einen Knopf zum Refresh und zum schließen hat?

Es ist schwer, so dürftige Vorgaben zu erklären ohne zu wissen was du alles kannst.

Daher - stellt dich meine oben angegebene Anforderung schon vor Probleme? Dann solltest du erst mal eines der zahlreich vorhandenen Tutorials durcharbeiten und dich erstmal grundsätzlich mit Pascal bzw. FPC/Lazarus beschäftigen.

Gruß
Luggi

Namos

Re: Neuling benötigt Hilfe

Beitrag von Namos »

Ja jetzt wirds deutlicher.

Das sieht schwer nach Stringgrid aus (also für den Spielplan in Tabellenform) (hier ein kleines Beispiel http://www.youtube.com/watch?v=i7VCmvehF7g ist zwar in Delphi 5 aber ist in Lazarus nicht anders).

Das mit dem Bild als Hintergund wird denke ich zu umständlich. Da man so oder so alle Eingabefelder selbst einfügen muss bringt das sicher nur probleme.
Die anderen Felder kann man mit Edit(Einfaches Texteingabefeld) Komponenten und mit Checkboxen(zum Ankreuzen) realisieren.
Am besten erstmal mit den einfacheren Sachen anfangen also versuchen einen Text über eine Edit-Feld einzulesen. Bis man mit dem Stringgrid zurechtkommt dauert etwas länger (aber da gibts auch gute Anleitungen).

Am Anfang etwas experimentieren, sonst machts eh keinen Spaß...

Skrenkovic
Beiträge: 22
Registriert: Mi 1. Mai 2013, 19:18

Re: Neuling benötigt Hilfe

Beitrag von Skrenkovic »

hallo Comm.... Ihr denk glaub ihr alle denkt einfach zu komplizuiert :oops:

http://s7.directupload.net/images/130502/rcb7hrj6.png

das ist mal vereinfacht das was ich will... in dem Textfeld soll jetzt z.b der user ... "Horst" als Name einfügen ... dieser name soll dann in echtzeit in "Form2" auf Label1 geschrieben werden.



@Luggi

Code: Alles auswählen

Und womit hast du unter DOS programmiert? Auch Pascal? 
 
Wir haben so kleine Programme geschrieben hier benutzen wir hauptsächlich verschatelte Schleifen und haben kleiner prozeduren/fuction geschrieben. Ja in Lazarus. Am ende öffnete sich ein Dosfenster und man konnte die Werte eingeben.....nichts besonderes. (alles natürlich in Richtung Maschinenbau). Bsp Aufgabe war man sollte eine Function schreiben zum expotentieren ohne die vorhandene funct von lazarus zu benutzen. dies wurde dann mit der IF schleife und so glöst...... Ging glaub ich nur darum ein wenig Erfahrung zu sammeln

Code: Alles auswählen

Kannst du - sagen wir mal - ein Programm schreiben, das ein Form aufmacht, ein Label oder eine Editbox mit einem Timestamp füllt und einen Knopf zum Refresh und zum schließen hat?
Wir haben nun die ersten 2 Vorlesung begonnen mit Lazarus Objektorientiert zu arbeiten. Also jain könnte ich ... timestamp noch nciht leider. refresh jo steht was im skipt drüber müsste ich nachlesen. :mrgreen:
Wie gesagt bin anfänger und bin an dieser STelle SEHR dankbar für die Hilfe

Socke
Lazarusforum e. V.
Beiträge: 3178
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: Neuling benötigt Hilfe

Beitrag von Socke »

Skrenkovic hat geschrieben:das ist mal vereinfacht das was ich will... in dem Textfeld soll jetzt z.b der user ... "Horst" als Name einfügen ... dieser name soll dann in echtzeit in "Form2" auf Label1 geschrieben werden.
Soll sich der Text auf Form2 ändern, sobald du in Form1 anfängst zu tippen oder sollen erst alle Werte erfasst werden und dann nach einer Bestätigung übernommen werden?

Bei Variante 1 (direkt übernehmen) übergibst du alle zu ändernden Steuerelemente an Form1. In Variante 2 übergibst du alle neuen Werte in die andere Richtung.

Code: Alles auswählen

// ein Record, der alle zu ändernden Steuerelemente aus Form2 enhält
type
  TChangingControls = record
    name: TLabel;
    Vornam: TLabel;
  end;
 
// Reagiert auf einen Klick auf einen Button "Ändern"/"Eingabe" oder auf einen Klick auf den Spielplan etc.
procedure TForm2.ButtonClick(Sender: TObject);
var
  r: TchangingControls;
begin
  // r mit Steuerelementen befüllen
  // die Namen der Label müssen natürlich angepasst werden
  r.name := self.labelName;
  r.Vorname := self.labelVorname;
  // in einer eigenen Methode übergeben
  Form1.ShowEingabe(r);
end;
 
procedure TForm1.ShowEingabe(const aRec: TchangingControls);
begin
  // Die Klasse TForm1 wird um das Attribug fRec: TChangingControls erweitert
  // dahin wird der übergebene Record kopiert
  Self.fRec := aRec;
  // Fenster Form1 anzeigen; wenn mehrere Form1 gleichzeitig angezeigt werden sollen, muss hier noch was geändert werden.
  Self.ShowModal();
  // record leeren (damit man Fehler leichter erkennt)!
  FillByte(Self.fRec, sizeof(self.fRec), 0);
end;
 
procedure TForm1.EditChange(Sender: TObject);
begin
  // diese Methode wird bei allen Eingabefeldern in das OnChange()-Ereignis eingetragen
  // natürlich kann man auch für jedes Eingabefeld eine eigene Methode schreiben
  // Im Parameter Sender wird das Eingabefeld übergeben
  if sender = EditName then
    self.frec.name.Caption := editname.Text
  else if sender = EditVorname then
    self.frec.vorname.Caption := editvorname.Text;
end;
 
Zuletzt geändert von Socke am Do 2. Mai 2013, 21:53, insgesamt 1-mal geändert.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Namos

Re: Neuling benötigt Hilfe

Beitrag von Namos »

Also für den Anfang sollte das genügen:

Code: Alles auswählen

unit Unit1;
 
{$mode objfpc}{$H+}
 
interface
 
uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls;
 
type
 
  { TForm1 }
 
  TForm1 = class(TForm)
    Edit1: TEdit;
    Label1: TLabel;
    procedure Edit1Change(Sender: TObject);
    procedure FormShow(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.lfm}
 
{ TForm1 }
 
uses Unit2; //Wichtig um auf Form2 zugreifen zu können
 
procedure TForm1.FormShow(Sender: TObject);  //OnShow Ereignis von Form1
begin
  Form2.Show; //Form 2 schon beim Programmstart anzeigen
end;
 
procedure TForm1.Edit1Change(Sender: TObject);  //OnCHange Erignis von Edit1
begin
  Form2.Label1.Caption:= Edit1.Text; //Text aus Edit von Form1 wird direkt im Label auf Form 2 angezeigt
end;
 
end.

@Socke ich glaube dein Beispiel ist für einen Anfänger zu schwer zu verstehen.

Skrenkovic
Beiträge: 22
Registriert: Mi 1. Mai 2013, 19:18

Re: Neuling benötigt Hilfe

Beitrag von Skrenkovic »

Code: Alles auswählen

// Reagiert auf einen Klick auf einen Button "Ändern"/"Eingabe" oder auf einen Klick auf den Spielplan etc.
procedure TForm2.ButtonClick(Sender: TObject);
var
  r: TchangingControls;
begin
  // r mit Steuerelementen befüllen
  // die Namen der Label müssen natürlich angepasst werden
  r.name = self.labelName;
  r.Vorname = self.labelVorname;
  // in einer eigenen Methode übergeben
  Form1.ShowEingabe(r);
end;
Also ich glaube das werde ich mal ausprobieren .. später... ich werde mich auf jeden fall nochmals melden um zu sagen ob es mir weitergeholfen hat .... danke schonmal/trotzdem

Socke
Lazarusforum e. V.
Beiträge: 3178
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: Neuling benötigt Hilfe

Beitrag von Socke »

Namos hat geschrieben:@Socke ich glaube das ist für einen Anfänger kaum verständlich...
Falls es nicht verständlich ist, hoffe ich auf Nachfragen; Bei deinem Vorschlag greift Form1 direkt auf die Steuerelemente auf Form2 zu. Das halte ich für einen schlechtes Design, da so kleine Änderungen an Form2 direkt eine Änderung an Form1 nach sich ziehen. In meinem Vorschlag gibt es eine saubere Trennung zwischen den Zuständigkeiten.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Skrenkovic
Beiträge: 22
Registriert: Mi 1. Mai 2013, 19:18

Re: Neuling benötigt Hilfe

Beitrag von Skrenkovic »

Socke hat geschrieben:
Namos hat geschrieben:@Socke ich glaube das ist für einen Anfänger kaum verständlich...
Falls es nicht verständlich ist, hoffe ich auf Nachfragen; Bei deinem Vorschlag greift Form1 direkt auf die Steuerelemente auf Form2 zu. Das halte ich für einen schlechtes Design, da so kleine Änderungen an Form2 direkt eine Änderung an Form1 nach sich ziehen. In meinem Vorschlag gibt es eine saubere Trennung zwischen den Zuständigkeiten.
Also bei deiner Möglichkeit kann ich dann auch ein "Edit" Button erstellen um die Einzelen Felder zu bearbeiten?!

Skrenkovic
Beiträge: 22
Registriert: Mi 1. Mai 2013, 19:18

Re: Neuling benötigt Hilfe

Beitrag von Skrenkovic »

Skrenkovic hat geschrieben:

Code: Alles auswählen

// Reagiert auf einen Klick auf einen Button "Ändern"/"Eingabe" oder auf einen Klick auf den Spielplan etc.
procedure TForm2.ButtonClick(Sender: TObject);
var
  r: TchangingControls;
begin
  // r mit Steuerelementen befüllen
  // die Namen der Label müssen natürlich angepasst werden
  r.name = self.labelName;
  r.Vorname = self.labelVorname;
  // in einer eigenen Methode übergeben
  Form1.ShowEingabe(r);
end;
Also ich glaube das werde ich mal ausprobieren .. später... ich werde mich auf jeden fall nochmals melden um zu sagen ob es mir weitergeholfen hat .... danke schonmal/trotzdem
r: TchangingControls; kann mir wer erklären was das genau ist denn da kommt eine fehlermeldung bei mir

Socke
Lazarusforum e. V.
Beiträge: 3178
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: Neuling benötigt Hilfe

Beitrag von Socke »

Skrenkovic hat geschrieben:Also bei deiner Möglichkeit kann ich dann auch ein "Edit" Button erstellen um die Einzelen Felder zu bearbeiten?!
Ja. Die Unterschiede liegen darin, wie die Daten zwischen den Formularen ausgetauscht werden. In Namos Vorschlag, kennt das "Eingabe-Formular" das Ausgabeformular so gut, dass es genau weiß, auf welches Label der Text ausgegeben werden soll. In meinem Vorschlag wird dem Eingabe-Formular mitgeteilt, auf welchem Label die Ausgabe erfolgen soll.
Skrenkovic hat geschrieben:

Code: Alles auswählen

var
  r: TchangingControls;
r: TchangingControls; kann mir wer erklären was das genau ist denn da kommt eine fehlermeldung bei mir
Wie ist die Fehlermeldung :D
Das ist eine Variable (ein veränderbarer Bereich im Hauptspeicher) mit dem Namen r. Die Variable hat den Datentyp TchangingControls. Über den Namen r kannst du auf den Inhalt der Variablen zugreifen (lesen oder schreiben).

Der Datentyp muss dem Compiler natürlich bekannt sein. Der Compiler bringt einige Datentypen (Integer, String etc.) bereits mit. TchangingControls wurde aber vorher definiert.

Code: Alles auswählen

// ein Record, der alle zu ändernden Steuerelemente aus Form2 enhält
type
  TChangingControls = record
    name: TLabel;
    Vorname: TLabel;
  end;
Mit dem Schlüsselwort type beginnt ein neuer Abschnitt im Quelltext, in dem neue Datentypen definiert werden können. Ein Datentyp muss definiert sein, bevor er verwendet werden kann.
Hier wurde der Datentyp TChangingControls (Die Groß-/Kleinschreibung spielt in Pascal keine Rolle) als Record definiert. Ein Record ist ein zusammenhängender Speicherbereich mit mehreren Elementen, die unterschiedliche Datentypen haben können. Jedes Element hat daher einen eigenen Namen, mit dem das Element im Record angesprochen werden kann. Ein Record ist sozusagen eine Gruppe von Variablen, die immer gemeinsam auftreten und bearbeitet werden.

Wenn du wie oben die Variable r vom Typ TChangingControls hast, kannst über das Schema [VariablenName].[ElementName] auf die einzelnen Elemente zugreifen. Hier sind das r.name und r.vorname.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Skrenkovic
Beiträge: 22
Registriert: Mi 1. Mai 2013, 19:18

Re: Neuling benötigt Hilfe

Beitrag von Skrenkovic »

okay i bin warscheinlich zu trottelich abba irgendwie ... nunja ich schreib hier einfach mal alles rein was ich so habe ... wo liegt der fehler?!

Code: Alles auswählen

unit Unit2;
 
{$mode objfpc}{$H+}
 
interface
 
uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls;
 
// ein Record, der alle zu ändernden Steuerelemente aus Form2 enhält
type
  TChangingControls = record
    name: TLabel;
    Vorname: TLabel;
  end;
 
  { TForm2 }
 
  TForm2 = class(TForm)
    OK: TButton;
    eingabename: TEdit;
    eingabevorname: TEdit;
 
    procedure OKClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;
 
var
  Form2: TForm2;
 
implementation
 
{$R *.lfm}
 // Reagiert auf einen Klick auf einen OK "Ändern"/"Eingabe" oder auf einen Klick auf den Spielplan etc.
procedure TForm2.OKClick(Sender: TObject);
var
  r: TchangingControls;
begin
  // r mit Steuerelementen befüllen
  // die Namen der Label müssen natürlich angepasst werden
  r.name = self.labelname;
  r.Vorname = self.labelvorname;
  // in einer eigenen Methode übergeben
  Form1.ShowEingabe(r);
end;
 
procedure TForm2.FormCreate(Sender: TObject);
begin
 
end;
 
end.


Bild

Code: Alles auswählen

unit Unit1;
 
{$mode objfpc}{$H+}
 
interface
 
uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls;
 
type
 
  { TForm1 }
 
  TForm1 = class(TForm)
 
    labelname: TLabel;
    labelvorname: TLabel;
  private
    { private declarations }
  public
    { public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 uses unit2;
{$R *.lfm}
 
end.

Antworten