Nieuws:

Welkom, Gast. Alsjeblieft inloggen of registreren.
Heb je de activerings-mail niet ontvangen?

Auteur Topic: [ Opgelost ] Free Pascal & Lazarus  (gelezen 3306 keer)

[ Opgelost ] Free Pascal & Lazarus
« Gepost op: 2009/12/21, 13:38:02 »
Beste mensen,

Ik heb als test eens Free Pascal (met alles er op en er aan) plus Lazarus geïnstalleerd om te testen. Ik heb op mijn Windows laptop de volledige Turbo Delphi staan, die werkt perfect, maar eenzelfde testprojectje via Free Pascal en Lazarus werkt maar gedeeltelijk, zeer raar hoor.

De Afsluiten code werkt perfect, maar de Kleurknop doet het niet, ook de OnCreate code (om het formulier bij creatie op clOlive te zetten) doet het langs geen kanten.  Ik denk toch dat Free Pascal pakweg dezelfde code syntax gebruikt als Delphi (Object Pascal). Zie onderstaande code en schermafdruk:

[unit UKleur;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, StdCtrls,
  Buttons;

type

  { TfrmKleur }

  TfrmKleur = class(TForm)
    btnKleur: TButton;
    btnClose: TButton;
    procedure FormCreate(Sender: TObject);
    procedure btnCloseClick(Sender: TObject);
    procedure btnKleurClick(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;

var
  frmKleur: TfrmKleur;

implementation

{ TfrmKleur }

procedure TfrmKleur.btnKleurClick(Sender: TObject);
begin
  frmKleur.Color := clPurple;
end;

procedure TfrmKleur.btnCloseClick(Sender: TObject);
begin
  Close;
end;

procedure TfrmKleur.FormCreate(Sender: TObject);
begin
   frmKleur.Color := clOlive;
end;

initialization
  {$I ukleur.lrs}

end./code]

Iemand met ideeën?
« Laatst bewerkt op: 2009/12/27, 23:59:42 door Progger »
Laptop MSI U123 (160 GB) 1 GB ramMint Cinnamon 18 LTS
Laptop Toshiba Tecra  (80GB) 2 GB ram Fedora 24
Dell Latitude D600 Pentium M 1400MHz 512MB ram
Bouwjaar 2003 met Debian 8 (Jessie)

Offline darko

  • Lid
Re: Free Pascal & Lazarus
« Reactie #1 Gepost op: 2009/12/21, 15:43:42 »
Wel je hebt een gekke constructie gekozen: in de OnCreate + Click handler ga je niet via Self (zoals in de OnClose), maar via de globale var frmKleur. Mogelijk wijst die naar een andere instantie. Dit kan optreden als je zelf je formulier aanmaakt in een lokale var.

Ik weet dat Delphi bij het aanmaken van een formulier automatisch die globale var voor het formulier aanmaakt. Maar die globale var moet je gewoon niet gebruiken en weggooien.



« Laatst bewerkt op: 2009/12/21, 15:55:53 door darko »

Re: Free Pascal & Lazarus
« Reactie #2 Gepost op: 2009/12/21, 22:57:09 »
Citaat
Wel je hebt een gekke constructie gekozen: in de OnCreate + Click handler ga je niet via Self (zoals in de OnClose), maar via de globale var frmKleur.

frmKleur is gewoon de naam van het formulier zélf, en onCreate zet bij het opstarten van dat formulier de kleur automatisch (runtime, zònder klik dus) op clOlive (groen). Via de knop btnKleur kan vervolgens de kleur van dat formulier clPurple worden veranderd. De btnAfsluiten dient enkel voor het sluiten van de toepassing.

Dit werkt perfect in Windows, maar niet in Free Pascal en Lazarus, en dat met dezelfde code die gegarandeerd correct is. Ik heb dit simpel toepassinkje enkel vlug gemaakt om te zien of en hoe Free Pascal werkt op Linux, en daar werkt het dus niet, alhoewel ik niet weet waarom dat niet werkt.
Laptop MSI U123 (160 GB) 1 GB ramMint Cinnamon 18 LTS
Laptop Toshiba Tecra  (80GB) 2 GB ram Fedora 24
Dell Latitude D600 Pentium M 1400MHz 512MB ram
Bouwjaar 2003 met Debian 8 (Jessie)

Offline darko

  • Lid
Re: Free Pascal & Lazarus
« Reactie #3 Gepost op: 2009/12/22, 09:37:24 »
Ziehier een regel uit je code:


var
  frmKleur: TfrmKleur;


En hier je implementatie van de OnCreate-handler:
procedure TfrmKleur.FormCreate(Sender: TObject);
begin
   frmKleur.Color := clOlive;
end;

Dus je hebt een instantie in var frmKleur, maar iedere instantie van TFrmKleur kijkt naar de instantie in var frmKleur voor het zetten van die kleur.
Met andere woorden ook in Delphi voor Windows krijg je onverwachte problemen als je het volgende doet:

var
  eenAnderInstantie : TfrmKleur;
begin
   frmKleur = TfrmKleur.Create(Application);
   eenAnderInstantie = TfrmKleur.Create(Application);
   eenAnderInstantie.Show();
end;
Omdat eenAnderInstantie wordt getoond, maar zijn OnClick kijkt naar de frmKleur, zal als je op de knop klikt de kleur van frmKleur gezet worden, hoewel die nooit getoond wordt.

Naast de code die je hebt gepost is dus ook de code die daadwerkelijk je formulier instantieert van belang. Omdat dit een proefprojectje is neem ik aan dat dit in de dpr-file gebeurd en voor de Linux-versie in de Lazarus-versie van de dpr. Misschien kun je die posten en dan kunnen we vast stellen dat het idd afwijkend werkt.

Maar je kunt deze discussie skippen en mijn voogestelde implementatie van bv. de FormCreate toepassen:
procedure TfrmKleur.FormCreate(Sender: TObject);
begin
   Color := clOlive;
end;

Tot slot: verwacht geen 100% compatibiliteit, die is er niet. Je kunt opzoeken op de Lazarus-site en FPC-site waar de probleemgebieden liggen.

Re: [ Opgelost ] Free Pascal & Lazarus
« Reactie #4 Gepost op: 2009/12/28, 00:13:57 »
Ik heb mijn topic als opgelost gezet, hier heeft men blijkbaar te weinig kennis van programmeren in Object Pascal (Delphi) op Windows én Linux (met Free Pascal, ik heb daarom mijn licht opgestoken op NLDelphi.nl, hét forum voor/van/door Delphi programmeurs waar ik trouwens reeds sinds 2004 geregistreerd ben.

Daar is het volgende uit gekomen:

Citaat
Er is niets fout met je syntax en ook niet met FreePascal, maar....

Met lazarus heb je te maken met zogeheten "WidgetSets" en voor linux is dat standaard gtk (of gtk2 als je een recente lazarus versie gebruikt). Het zetten van de formulier kleur is voor deze widgetset (nog) niet mogelijk.
Daarnaast heb je ondermeer bij gtk "last" van themas, waardoor de achtergrond van een formulier eigenlijk een bitmap is. Hierdoor is er ook niet echt veel prioriteit in gestoken om dit aan te passen.

Het ligt dus niét aan mijn (
Citaat
volgens darko: Wel je hebt een gekke constructie gekozen: in de OnCreate + Click handler ga je niet via Self (zoals in de OnClose), maar via de globale var frmKleur. Mogelijk wijst die naar een andere instantie. Dit kan optreden als je zelf je formulier aanmaakt in een lokale var.
gekke constructie, die is standaard Pascal én correct.

Beschouw dit onderwerp dus maar als afgesloten.
Laptop MSI U123 (160 GB) 1 GB ramMint Cinnamon 18 LTS
Laptop Toshiba Tecra  (80GB) 2 GB ram Fedora 24
Dell Latitude D600 Pentium M 1400MHz 512MB ram
Bouwjaar 2003 met Debian 8 (Jessie)

Offline darko

  • Lid
Re: [ Opgelost ] Free Pascal & Lazarus
« Reactie #5 Gepost op: 2009/12/28, 22:13:32 »
Hoi progger,

Blij dat je een antwoord op je vraag hebt gekregen. Van dat probleem van GTK wist ik niet. Ik heb een jaar of vijf geleden eens wat geprobeerd in Lazarus, maar dat was toen te onstabiel en incompleet om er echt iets ingewikkelds mee te kunnen maken, maar ik begrijp dat het toch niet zo heel veel verder is sinds die tijd.
Overigens wil ik nog duidelijk stellen dat ik je probeerde te helpen en getracht duidelijk uit te leggen wat het probleem is van globale variabelen en zoals jij ze binnen je class gebruikte. Ik had het vermoeden dat het mogelijke probleem kon zijn, aangezien Lazarus zijn project-file toentertijd anders uitgenereerde dan Delphi.
Het was niet mijn bedoeling om je het gevoel te geven dat het probleem bij jou lag, wat ik een beetje proef uit je laatste reactie hier en je reactie op NlDelphi. Ik zal mijn account voor NlDelphi eens opsnorren, het verbaast me trouwens dat het nog bestaat en dat er zelfs aandacht is voor FreePascal en Lazarus.


Re: [ Opgelost ] Free Pascal & Lazarus
« Reactie #6 Gepost op: 2009/12/28, 23:00:07 »
Hoi darko

Citaat
Het was niet mijn bedoeling om je het gevoel te geven dat het probleem bij jou lag, wat ik een beetje proef uit je laatste reactie hier en je reactie op NlDelphi. Ik zal mijn account voor NlDelphi eens opsnorren, het verbaast me trouwens dat het nog bestaat en dat er zelfs aandacht is voor FreePascal en Lazarus.

Jouw respons viel bij mij niét verkeerd hoor, het is enkel zo dat men op NLDelphi gespecialiseerd is in Delphi, (professionele programmeurs en heel goede hobby ontwikkelaars daar). Die site staat nog altijd héél sterk, en ze hebben er nu zelfs een appart forum-onderdeel over Free Pascal, dus als je in die richting werkt rond programmeren is het een aangeraden site, zéér leerzaam én behulpzame mensen daar.

Nogmaals bedankt voor je respons en interesse.  :D
Laptop MSI U123 (160 GB) 1 GB ramMint Cinnamon 18 LTS
Laptop Toshiba Tecra  (80GB) 2 GB ram Fedora 24
Dell Latitude D600 Pentium M 1400MHz 512MB ram
Bouwjaar 2003 met Debian 8 (Jessie)