Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   FreePascal (https://www.delphipraxis.net/74-freepascal/)
-   -   [Lazarus + Andorra 2D] kopiert Andorra2Dsrc in projektordner (https://www.delphipraxis.net/151212-%5Blazarus-andorra-2d%5D-kopiert-andorra2dsrc-projektordner.html)

Glocke89 9. Mai 2010 09:55


[Lazarus + Andorra 2D] kopiert Andorra2Dsrc in projektordner
 
Hi,

wenn ich in den Compilereinstellungen bei "Andere Units" den Pfad zur Andorra 2D src eingebe (/home/glocke/Programmierung/Lazarus/ad2d_451/src/) und dann mein projekt compiliere, werden haufenweise Andorra2D src-Dateien ins Projektverzeichnis kopiert. Ich glaube nicht, dass das Sinn und Zweck der Sache ist :D

Andorra: 0.451
Lazarus: 0.9.28.2-0 Beta

LG Glocke

JamesTKirk 9. Mai 2010 12:32

Re: [Lazarus + Andorra 2D] kopiert Andorra2Dsrc in projektor
 
Hi!

Meinst du wirklich Quelltextdateien (also *.pas) oder kompilierte Units (*.o, *.ppu)? Im ersten Fall ist das seltsam und im zweiten Fall "by design".
Im Gegensatz zu Delphi kompiliert Free Pascal die Units nicht im selben Verzeichnis, falls kein Unitausgabepfad angegeben ist, sondern im Verzeichnis des Hauptquelltextes. Ich empfehle dir also so oder so immer ein Unitausgabeverzeichnis in den Compilereinstellungen anzugeben, da dies deinen Projektordner "sauber" hält. Den Ordner, den ich immer angebe ist obj\$TargetCPU()-$TargetOS() (unter Linux natürlich mit "/" statt "\"), was z. B. unter Win32 den Ordner obj\i386-win32 relativ zur Projektdatei (*.lpi) bezeichnet (Lazarus erstellt diesen Ordner übrigens automatisch). Allerdings wird hier dann auch die fertige Anwendung hinkompiliert. Um dies zu verhindern solltest du unter Projekt->Projekteinstellungen->Anwendung->Zieldateiname noch $NameOnly($ProjFile()) angeben, so wird die Anwendung nämlich in deinem Projektverzeichnis unter dem Namen deiner Projektdatei erzeugt.

Für Andorra2D wäre es wahrscheinlich empfehlenswert ein Lazarus-Package anzulegen (ich sollte wohl mal einen Featurerequest machen :D ). Dieses muss man ja nichteinmal bei Lazarus installieren, um es verwenden zu können, und die Andorra2D Units bleiben in einem eigenem Quelltextverzeichnis.
(ich liebe Packages unter Lazarus... im Gegensatz zu Delphipackages :mrgreen: )

Gruß,
Sven

igel457 9. Mai 2010 17:27

Re: [Lazarus + Andorra 2D] kopiert Andorra2Dsrc in projektor
 
Wenn jemand ein Package von Andorra 2D erstellen könnte wäre das prima, ich persönlich bin jedoch noch nicht dahinter gestiegen, wie ich ein Package erstelle, das einfach nur die entsprechenden Units in den Suchpfad aufnimmt ohne zu versuchen immer alle Units zu kompilieren.

JamesTKirk 9. Mai 2010 17:38

Re: [Lazarus + Andorra 2D] kopiert Andorra2Dsrc in projektor
 
Zitat:

Zitat von igel457
Wenn jemand ein Package von Andorra 2D erstellen könnte wäre das prima, ich persönlich bin jedoch noch nicht dahinter gestiegen, wie ich ein Package erstelle, das einfach nur die entsprechenden Units in den Suchpfad aufnimmt ohne zu versuchen immer alle Units zu kompilieren.

Das geht auch nicht anders. Es werden einmal alle zum Package gehörenden Units durchkompiliert und dann hat sich die Sache (bis man die Zieleinstellungen ändert -.-). Wenn eine bestimmte Unit unter Free Pascal nicht kompiliert, so darf man sie einfach nicht zum Package hinzufügen (sie sollte dann natürlich auch nicht im Code verwendet werden :) ). Zudem sollte in den Projekteinstellungen des Packages die Einstellung "Package-Unit zum Uses-Abschnitt hinzufügen" deaktiviert werden, da sonst alle (verwendeten) Units eingebunden werden.

Gruß,
Sven

igel457 9. Mai 2010 17:44

Re: [Lazarus + Andorra 2D] kopiert Andorra2Dsrc in projektor
 
Zitat:

Zitat von JamesTKirk
Das geht auch nicht anders.

Das ist jedoch reichlich suboptimal, da Andorra 2D aus Dutzenden optionalen Komponenten besteht die teilweise auch nur für bestimmte Plattformen verfügbar sind. Ein globaler Suchpfad wie unter Delphi würde das Problem ganz einfach lösen. Dort werden (um wieder auf die Ausgangsfrage zurück zu kommen) die Quellcode-Dateien auch in ihren eigenen Ordner compiliert und damit hat sich die Sache. Schließlich werden zum Beispiel die nicht Komponenten des JEDI-Projektes auch einfach im Suchpfad registriert. Somit sind Projekte einfacher erstellbar und portabler, da nicht vor jedem compilieren der Projektsuchpfad entsprechend eingestellt werden muss. Ein entsprechendes Featurerequest von mir an das Lazarusteam wurde leider abgelehnt. Mittlerweile ist dieses Manko jedoch das, welches mich an Lazarus am meisten stört.

Glocke89 9. Mai 2010 19:30

Re: [Lazarus + Andorra 2D]
 
Zitat:

Zitat von JamesTKirk
Meinst du wirklich Quelltextdateien (also *.pas) oder kompilierte Units (*.o, *.ppu)? Im ersten Fall ist das seltsam und im zweiten Fall "by design".

Okay - war unzureichend erklärt von mir. die .o und .ppu sind es.

Zitat:

Zitat von JamesTKirk
Ich empfehle dir also so oder so immer ein Unitausgabeverzeichnis in den Compilereinstellungen anzugeben, da dies deinen Projektordner "sauber" hält. Den Ordner, den ich immer angebe ist obj\$TargetCPU()-$TargetOS() (unter Linux natürlich mit "/" statt "\"), was z. B. unter Win32 den Ordner obj\i386-win32 relativ zur Projektdatei (*.lpi) bezeichnet (Lazarus erstellt diesen Ordner übrigens automatisch). Allerdings wird hier dann auch die fertige Anwendung hinkompiliert. Um dies zu verhindern solltest du unter Projekt->Projekteinstellungen->Anwendung->Zieldateiname noch $NameOnly($ProjFile()) angeben, so wird die Anwendung nämlich in deinem Projektverzeichnis unter dem Namen deiner Projektdatei erzeugt.

Hat wunderbar funktioniert! Danke :)

/EDIT:
Hab aber noch nen anderes Problem:

Delphi-Quellcode:
unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
  AdDraws, AdClasses, AdTypes;

type

  { TForm1 }

  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure Idle(Sender: TObject; var Done:boolean);
  private
    { private declarations }
  public
    { public declarations }
  end;

var
  Form1: TForm1;

  AdDraw: TAdDraw;

implementation

{ TForm1 }

procedure TForm1.FormCreate(Sender: TObject);
begin
  AdDraw := TAdDraw.Create(self);
  AdDraw.DllName := 'AndorraOGLLaz.dll';
  //Application.OnIdle := @Idle;
  AdDraw.Initialize;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  AdDraw.Free;
end;

procedure TForm1.Idle(Sender: TObject; var Done:boolean);
begin
  AdDraw.ClearSurface(0);
  AdDraw.BeginScene;
  with AdDraw.Canvas do
  begin
    Font := AdDraw.Fonts.GenerateFont('Arial', 24, []);
    TextOut(0,0,'Andorra 2D...');
    Font := AdDraw.Fonts.GenerateFont('Arial', 10, []);
    TextOut(0,30,'...works with Lazarus too');
  end;
  AdDraw.EndScene;
  AdDraw.Flip;
end;

initialization
  {$I unit1.lrs}

end.
Wenn ich die Zeile
Delphi-Quellcode:
 //Application.OnIdle := @Idle;
nicht auskommentiere, kommt

Zitat:

Error
Project project1 raised exception class 'RunError(216)'.
dannach wird "AdFontFactory" im Editor angezeigt und Zeile 152 wird markiert:
Delphi-Quellcode:
  FLastKey := nil;
Wenn ich es auskommentiert lasse, kommt keine Fehlermeldung aber es passiert auch nichts (was ja logisch ist :P )

Ich kann damit nichts anfangen. Jmd. da eine Idee ? =)

JamesTKirk 9. Mai 2010 20:25

Re: [Lazarus + Andorra 2D] kopiert Andorra2Dsrc in projektor
 
Zitat:

Zitat von igel457
Zitat:

Zitat von JamesTKirk
Das geht auch nicht anders.

Das ist jedoch reichlich suboptimal, da Andorra 2D aus Dutzenden optionalen Komponenten besteht die teilweise auch nur für bestimmte Plattformen verfügbar sind. Ein globaler Suchpfad wie unter Delphi würde das Problem ganz einfach lösen. Dort werden (um wieder auf die Ausgangsfrage zurück zu kommen) die Quellcode-Dateien auch in ihren eigenen Ordner compiliert und damit hat sich die Sache. Schließlich werden zum Beispiel die nicht Komponenten des JEDI-Projektes auch einfach im Suchpfad registriert. Somit sind Projekte einfacher erstellbar und portabler, da nicht vor jedem compilieren der Projektsuchpfad entsprechend eingestellt werden muss. Ein entsprechendes Featurerequest von mir an das Lazarusteam wurde leider abgelehnt. Mittlerweile ist dieses Manko jedoch das, welches mich an Lazarus am meisten stört.

Also die Sache mit den Plattformen müsstest du im Code machen, aber ansonsten hätte ich keine Probleme damit, wenn einmal des komplette Andorra2D Paket (für meine jeweils ausgewählte Plattform) durchkompiliert wird und sich die Sache dann erledigt hat... ich bin aktuell zeitlich leider etwas eng besetzt (die Uni möchte Hausaufgaben von mir, einen Proseminarvortrag, etc...), sonst würde ich mir den Code von Andorra2D mal näher anschauen und schauen, ob man das ordentlich mit Lazarus-Packages angehen könnte.

Zitat:

Zitat von Glocke89
Wenn ich es auskommentiert lasse, kommt keine Fehlermeldung aber es passiert auch nichts (was ja logisch ist :P )

Ich kann damit nichts anfangen. Jmd. da eine Idee ? =)

Ganz dumme Idee: ändere mal das

Delphi-Quellcode:
Application.OnIdle := @Idle;
AdDraw.Initialize;
in

Delphi-Quellcode:
AdDraw.Initialize;
Application.OnIdle := @Idle;
Ansonsten hab ich keine Ahnung, denn bei mir läufts (allerdings verwende ich eine ApplicationProperties-Komponente, in der ich das OnIdle-Ereignis zugewiesen habe).

Oh halt... mir kommt noch eine Idee: liegt die AndorraOGLLaz.dll denn im selben Verzeichnis wie die Anwendung?

Gruß,
Sven

Glocke89 9. Mai 2010 21:45

Re: [Lazarus + Andorra 2D] kopiert Andorra2Dsrc in projektor
 
Zitat:

Zitat von JamesTKirk
Ganz dumme Idee: ändere mal das

Delphi-Quellcode:
Application.OnIdle := @Idle;
AdDraw.Initialize;
in

Delphi-Quellcode:
AdDraw.Initialize;
Application.OnIdle := @Idle;

Hat nichts gebracht - wie bisher.

Zitat:

Zitat von JamesTKirk
Ansonsten hab ich keine Ahnung, denn bei mir läufts (allerdings verwende ich eine ApplicationProperties-Komponente, in der ich das OnIdle-Ereignis zugewiesen habe).

Wie mache ich das genau?

Zitat:

Zitat von JamesTKirk
Oh halt... mir kommt noch eine Idee: liegt die AndorraOGLLaz.dll denn im selben Verzeichnis wie die Anwendung?

Jopp!

LG Glocke

JamesTKirk 10. Mai 2010 09:19

Re: [Lazarus + Andorra 2D] kopiert Andorra2Dsrc in projektor
 
Zitat:

Zitat von Glocke89
Zitat:

Zitat von JamesTKirk
Ansonsten hab ich keine Ahnung, denn bei mir läufts (allerdings verwende ich eine ApplicationProperties-Komponente, in der ich das OnIdle-Ereignis zugewiesen habe).

Wie mache ich das genau?

Du ziehst eine TApplicationProperties-Komponente, die du in der Komponentenpalette unter Additional finden kannst auf's Formular. Dann klichst du im Object Inspector auf Ereignisse und klickst doppelt auf die Combobox beim OnIdle-Ereignis. Daraufhin sollte eine Methode in deinem Quelltext erscheinen, in die du einfach deinen OnIdle-Code reinsetzen kannst. Du kannst dann das manuelle Setzen von Application.OnIdle entfernen.

Zitat:

Zitat von Glocke89
Zitat:

Zitat von JamesTKirk
Oh halt... mir kommt noch eine Idee: liegt die AndorraOGLLaz.dll denn im selben Verzeichnis wie die Anwendung?

Jopp!

Du benutzt nicht zufällig Win64? Ansonsten bin ich mit meinem Latein ziemlich am Ende...

Gruß,
Sven

Glocke89 10. Mai 2010 09:39

Re: [Lazarus + Andorra 2D] kopiert Andorra2Dsrc in projektor
 
Zitat:

Zitat von JamesTKirk
Du ziehst eine TApplicationProperties-Komponente, die du in der Komponentenpalette unter Additional finden kannst auf's Formular. Dann klichst du im Object Inspector auf Ereignisse und klickst doppelt auf die Combobox beim OnIdle-Ereignis. Daraufhin sollte eine Methode in deinem Quelltext erscheinen, in die du einfach deinen OnIdle-Code reinsetzen kannst. Du kannst dann das manuelle Setzen von Application.OnIdle entfernen.

Probier ich nach Feierabend mal zuhause.
/EDIT: hat geklappt... also fast xD
Zitat:

Error
Project project1 raised exception class 'External SIGSEGV'.
und springt danach in die besagte Zeile xD

Zitat:

Zitat von JamesTKirk
Du benutzt nicht zufällig Win64? Ansonsten bin ich mit meinem Latein ziemlich am Ende...

Nope. Linux: Ubuntu 9.10 i386


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:52 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz