Anfängerproblem

Für Fragen von Einsteigern und Programmieranfängern...
rudi1943
Beiträge: 6
Registriert: Mi 25. Mär 2015, 17:46

Anfängerproblem

Beitrag von rudi1943 »

Hi,
beginne gerade mit LAZARUS meine erstrn Schritte zu machen.
Hallo World um DOS Fenster klappt schon.
Nun habe ich mir die WINGRAPH Library heuntergeladen und spiele mit den Beispielen.
Dbei ist der Quellcode und das .EXE File.
Das EXE File läuft einwandfrei, wenn ich den Quellcode erfolgreich kompiliere, erscheint nur ein kleines, leeres Fenste
und nicht die Animation!
Was habe ich da verbockt?
Danke im voraus für eure Mühe!
Rudi

wbeppler
Beiträge: 131
Registriert: So 20. Jul 2014, 10:27
OS, Lazarus, FPC: kubuntu, raspbian, laz 1.2 / 0.9 microcontroller
CPU-Target: 8-64 bit
Wohnort: bodensee
Kontaktdaten:

Re: Anfängerproblem

Beitrag von wbeppler »

starte lazarus IDE, projekt->neu-Anwendung (oder appication) dann kriegst ein fenster, compiliere es (F9) und es sollte laufen

rudi1943
Beiträge: 6
Registriert: Mi 25. Mär 2015, 17:46

Re: Anfängerproblem

Beitrag von rudi1943 »

Hi,
erstmal danke für die schnelle Antwort!
Leider immer noch ein Problem:
Habe ein neues Projekt angefangen und in das gezeigte Pascal Fenster den Quellcode aud den Beispielen von Wingraph
kopiert
// Program used to generate the picture 'colors.gif'
{$APPTYPE GUI}
program colors;
uses wingraph,wincrt,winmouse,sysutils;
...restlicher Programmcode
F9
folgende Fehlermeldung:
PPU invalid version 100

Ich verwende Lazarus IDE v1.2.6-demo

Was läuft da schief?
Rudi

wbeppler
Beiträge: 131
Registriert: So 20. Jul 2014, 10:27
OS, Lazarus, FPC: kubuntu, raspbian, laz 1.2 / 0.9 microcontroller
CPU-Target: 8-64 bit
Wohnort: bodensee
Kontaktdaten:

Re: Anfängerproblem

Beitrag von wbeppler »

hi rudi,

ich galube wir reden nicht vom selben.

installier doch einfach auf deinem system (ich weiss nicht ob dos, win, mac, linux, android, raspberry,....) die software lazarus

unter win am einfachsten, setup, weiter, weiter weiter fertigstellen.
unter linux: sudo apt get update, dann install fpc, dann install fpc-sources, dann install lazarus

danach solltest du eine grafische IDE vorfinden die du startest und wie oben erstmal weiter machst, wenn das mal geht, also du ein prog erstellen kannst was fast noch nix kann, dann geht der rest schnell

sorry, ich weiss nicht wie weit du bis, wie dein betriebssystem heisst, wie gerade dein bidschirm aussieht, sorry.... naechste antwort nur wenns konkreter wird

gruss

w

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

Re: Anfängerproblem

Beitrag von Michl »

Ich kenn jetzt die Unit WinGraph nicht. Wenn ich aber eine Suchmaschine bemühe, macht sie mir allerdings nicht den Eindruck, dass sie noch ein "must have" darstellt (für grafische Aufgaben unter Lazarus wird sie jedenfalls - zumindest von mir - nicht benötigt). Ich würde vermutlich bei einem Selbststudium den Einstieg über ein Delphi-Tutorial oder dem Lazarus-Wiki versuchen z.B. http://wiki.freepascal.org/Form_Tutorial/de

Code: Alles auswählen

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

wp_xyz
Beiträge: 5134
Registriert: Fr 8. Apr 2011, 09:01

Re: Anfängerproblem

Beitrag von wp_xyz »

Mit wingraph habe ich vor kurzem experimentiert, ich kann mich nicht an Probleme erinnern (bis auf das Gefühl, wieder in den 80er Jahren zu sein...)

Die genannte Fehlermeldung lässt vermuten, dass da veraltete Units herumliegen. Lösche einfach mal das Ausgabeverzeichnis: wenn du nichts geändert hast, landen die compilierten Units in lib/i386-win32, der sich in deinem Projektordner befindet. Oder öffne "Projekt" / "Projekteinstellungen" / "Compilereinstellungen" / "Pfade"; lösche den Ordner, der unter "Unit-Ausgabeverzeichnis" angegeben ist. Prüfe, ob in deinem Quelltext-Ordner ppu-Dateien herumliegen --> löschen. Bei den Pfaden muss im Feld "Andere Units" der relative Pfad zum Verzeichnis "src" der WinGraph-Bibliothek eingetragen sein (von der Projekt-Datei aus gesehen).

Kannst du das demo-Projekt (wingraph\demo\demo.lpi) compilieren?

Ich_bin_dabei
Beiträge: 8
Registriert: Fr 27. Mär 2015, 10:34

Re: Anfängerproblem

Beitrag von Ich_bin_dabei »

Hallo,
bin auch neuer Lazarus User wie rudi1943 und in diesen Thread hier einfach nur mal so reingestolpert.

Nun schreibt da der rudi1943:
Ich verwende Lazarus IDE v1.2.6-demo
Das verwirrt mich ein wenig. Ich dachte Lazarus sei OpenSource also free?
Warum benutzt der dann also einen Demoversion? :roll:

Also bei mir steht da nix von Demoversion.

Grüße

rudi1943
Beiträge: 6
Registriert: Mi 25. Mär 2015, 17:46

Re: Anfängerproblem

Beitrag von rudi1943 »

@wbeppler
Danke dür deine Antwort,
stimmt-die Installation von Lazarus unter Windows hat geklappt -"Hello World" läuft auch!

@Michl
Danke für deine Antwort, aber ich suche kein Tool für ein Benutzerinterface, sondern ein Tool zur Entwicklung
von interaktiver Prozessdarstellung.(siehe unten)

wp_xyz
Danke für deine ausführliche Hilfestellung. Habe das alles probiert-immer das selbe Ergebnis.
Kann auch die Demo nicht kompilieren. Deine Vermutung mit de veralteten Units dürfte stimmen,
bloß, wo diese zu finden sind, weiß ich leider nicht.

@Ich_bin_dabei
Das -demo kann sich aber auch auf das Projekt beziehen-ich spiele momentan mit den Demodaten

Hier möchte ich meine Aufgabenstellung beschreiben-vieleicht gibt es auch bessere Lösungen als WinGraph

Was ich erstellen möchte, ist ein Programm zur Arbeitsablaufvisualisierung.
Hierzu sollen zur Laufzeit T-Panels erzeugt werden, die vom Benutzer im Fenster verschoben werden können oder per Programm an bestimmten Stellen plaziert werden.
Die Informationen über den Ablauf sollen mittels geometrischer Objekte auf dem jeweiligen T-Panel
dargestellt und zur Laufzeit vom Programm aus verändert werden. T-Panel und die darauf dargestellten
Objekte sind für alle gleich-lediglich die Objekteigenschaften sollen sich ändern(visible,color etc)
Nochmals allen Danke für die Bemühungen!
Rudi

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

Re: Anfängerproblem

Beitrag von Michl »

Hallo Rudi,

deine Antwort bestärkt mich in meiner Vermutung, dass du eher ein Package zur Darstellung von Flussdiagrammen/Ablaufdiagrammen (engl. flowchart) suchst, als die Unit WinGraph. Du kannst im Netz ja mal danach suchen, ich hatte das eben mal gemacht und als erstes diese Seite http://forum.lazarus.freepascal.org/ind ... ic=17688.0 gefunden, wo avra ein Import von Delphi vorstellt.

Das habe ich gleich mal probiert, das Ganze sieht dann so aus:
Bild

Sicherlich gibt es auch noch andere Packages, wie http://sourceforge.net/projects/evssimplegraph/, die soetwas möglich machen, habe aber jetzt nicht wirklich danach weiter gesucht.

PS: Frei bewegliche TPanels auf einem TPanel gehen problemlos, ohne WinGraph oder externe Packages, zu realisieren!

Code: Alles auswählen

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

Warfley
Beiträge: 12
Registriert: So 8. Mai 2011, 09:21

Re: Anfängerproblem

Beitrag von Warfley »

versuch mal statt panels TPaintBox zu verwenden, und via canvas zu Zeichnen etwa so

Code: Alles auswählen

DataArr: Array of TData; // Informationen Panelie boxen
BoxArray: Array of TPaintBox;
 
...
 
Function CreateNewBox(...): Integer; //schreibt eine neue Box in den Array und gibt den Index zurück
Begin
  ...
  Result:=High(BoxArray);
End;
 
Procedure BoxPaint(Sender: TObject);
Var Dat:TData
Begin
  Dat:=DataArr[TPaintBox(Sender).Tag];
  With TPaintBox(Sender).Canvas Do
  Begin
 // Zeichnen
  End;
End;
Ich hoffe es wurde klar wie ich es meine, bin Grad am Handy, wenn ich wieder am Pc bin kann ich mal ein besseres Beispiel bringen

Im Tag einfach den Index für die Informationen zum Zeichnen zwischenspeichern

rudi1943
Beiträge: 6
Registriert: Mi 25. Mär 2015, 17:46

Re: Anfängerproblem

Beitrag von rudi1943 »

@Michl
Danke für das Organigramm-ist leider nicht das, was ich suche.Schaue es mir aber an-vieleicht
sind Teile davon in meine Aufgabe zu integrieren!
Danke!
Rudi

@Warfley
Danke für deine Antwort, das kommt der Sache schon näher!
Kennst Du eine Beispielsammlung oder Beschreibung der Paintbox-habe das bei dir zum ersten mal gelesen:
Über deine Beispiele würde ich mich freuen!
Danke!
Rudi

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

Re: Anfängerproblem

Beitrag von Michl »

Ich bin zwar nicht Warfley, doch unter
Werkzeuge -> Beispielprojekte -> pen_brush\project1.lpi
oder
Werkzeuge -> Beispielprojekte -> affinetransforms\project1.lpi
gibt es Beispiele in denen Paintboxen zum Einsatz kommen.

Eigentlich ist deren Verwendung aber recht einfach:
- TPaintbox in der Komponentenpalette "Additional" auswählen und mit einem Klick auf das Formular platzieren
- im Objektinspektor im Reiter Ereignisse von PaintBox1 das Ereignis (Event) "OnPaint" doppelklicken
- im Eventhandler sowas machen:

Code: Alles auswählen

procedure TForm1.PaintBox1Paint(Sender: TObject);
begin
  PaintBox1.Canvas.Pen.Color:=Random($100000);
  PaintBox1.Canvas.Line(
    Random(PaintBox1.Width),
    Random(PaintBox1.Height),
    Random(PaintBox1.Width),
    Random(PaintBox1.Height));
  PaintBox1.Canvas.Pen.Color:=Random($100000);
  PaintBox1.Canvas.Rectangle(
    Random(PaintBox1.Width),
    Random(PaintBox1.Height),
    Random(PaintBox1.Width),
    Random(PaintBox1.Height));
  PaintBox1.Canvas.Pen.Color:=Random($100000);
  PaintBox1.Canvas.Ellipse(
    Random(PaintBox1.Width),
    Random(PaintBox1.Height),
    Random(PaintBox1.Width),
    Random(PaintBox1.Height));    
end; 
- noch ein TButton hinzufügen und in dessen OnClick-Eventhandler die PaintBox neu zeichnen lassen:

Code: Alles auswählen

procedure TForm1.Button1Click(Sender: TObject);
begin
  PaintBox1.Invalidate; 
end;  
Ich hoffe, es hilft dir, aber wie gesagt, deine Aufgabenstellung würde ich anders umsetzen.

Code: Alles auswählen

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

Warfley
Beiträge: 12
Registriert: So 8. Mai 2011, 09:21

Re: Anfängerproblem

Beitrag von Warfley »

Die PaintBox ist sozusagen das einfachste Graphische Element, sie kann eigentlich nichts anderes als dir ein Canvas zum zeichnen zu bieten.

Allerdings halte ich persönlich es nicht ganz so für klug dynamisch neue Komponenten zu erzeugen, das kann zu ungewollten Problemen führen, und ist meist auch recht umständlich. Ich würde dir lieber empfehlen, ein Zeichenobjekt zu nutzen, die Daten aller Objekte zu sammeln und diese dann nacheinander runter zu Arbeiten und zu zeichnen.
Hier habe ich dir mal ein Beispiel Projekt hochgeladen was ich mal schnell zusammengeschustert habe, da werden die Zeicheninformationen in einem Record gespeichert, und alle Elemente in einer Liste werden dann einzeln auf das selbe Canvas gezeichnet. Je nachdem wie viele Informationen/wie Komplex deine Datenstrukturen sind würde ich dabei auch eher auf Klassen ausweichen, da du damit wahrscheinlich ein wenig mehr Übersichtlichkeit rein bekommst.
Dateianhänge
One Canvas.zip
(4.98 KiB) 71-mal heruntergeladen

rudi1943
Beiträge: 6
Registriert: Mi 25. Mär 2015, 17:46

Re: Anfängerproblem

Beitrag von rudi1943 »

@Michl
Danke für die Hinweise auf die Werkzeugseite-ist genau das, was man als Anfänger zum basteln braucht!

@Warfley
Danke für dein ausführliches Beispiel!
Habe mir den Code angesehen-denke, das ist in etwas das, was ich mir vorstelle-
zwar mir anderen Komponenten aber passt im Prinzip.
Habe zwar noch massive Probleme beim kompilieren, aber das bekomme ich hoffentlich gebacken.
(findet die includes($R) nicht)

Nochmals viele Dank für eure Hilfe!
Rudi

rudi1943
Beiträge: 6
Registriert: Mi 25. Mär 2015, 17:46

Re: Anfängerproblem

Beitrag von rudi1943 »

Hi,
dank eurer Hilfe bin ich sicher, daß ich meine Aufgabe mit LAZARUS erledigen kann.
Dank eurer Hilfe habe ich schon mal ein Miniprogramm compilieren können.
Funktioniert aber nicht so, wie ich es mir vorstelle:
unit Unit1;

Code: Alles auswählen

{$mode objfpc}{$H+}
 
interface
 
uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls,
  Buttons;
 
type
 
  { TForm1 }
 
    TForm1 = class(TForm)
    Panel1: TPanel;
    SpeedButton1: TSpeedButton;
    PaintBox1: TPaintBox;
    procedure panelcolor(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.lfm}
 
procedure TForm1.panelcolor(Sender: TObject);
 
begin
  form1.panel1.color:=clred;
  form1.PaintBox1.color:=clblue;
  panel1.Invalidate;
end;
 
end.
 
Die Objekte Panel1 und SpeeButton1 habe ich mit der graphischen Oberfläche eingetragen die erscheinen auch im Pbjetinspektor, lassen sich aber nicht ansprechen-die Paintbox tut nichts.

Was könnze ich da vermurkst haben?

Danke!
Rudi
Zuletzt geändert von Lori am Sa 28. Mär 2015, 21:46, insgesamt 1-mal geändert.
Grund: Highlighter

Antworten