![]() |
Can not find unit ShellAPI
Hi,
Ich habe mir die Lazarus IDE Installiert und mache nun erste gehversucht. Ich habe ein einfaches Programm erstellt welchen eine einfache Berechnung ausfürt. Nun will ich einen button erstellen wo bei einen Klick der Standartbrowser eine URL öffnet. Leider bekomme ich folgende Fehlermeldung: stabkalk2.pas(10,12) Fatal: Can not find unit ShellAPI used by stabkalk2. mein Programm sieht so aus:
Delphi-Quellcode:
unit stabkalk2;
{$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, IpHtml, Forms, Controls, Graphics, Dialogs, StdCtrls, ShellAPI; type { TForm1 } TForm1 = class(TForm) Button1: TButton; Button2: TButton; Edit1: TEdit; Edit2: TEdit; Edit3: TEdit; Image1: TImage; Label2: TLabel; Label3: TLabel; Label4: TLabel; Label5: TLabel; Label6: TLabel; Label7: TLabel; Label8: TLabel; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Label1Click(Sender: TObject); private { private declarations } public { public declarations } end; var Form1 : TForm1; stabzahl : Integer; stabzahlalt : Integer; abstandmax : integer; abstand : Real; abstandalt : Real; lichtemass : integer; stabstaerke : integer; implementation {$R *.lfm} { TForm1 } procedure TForm1.Button1Click(Sender: TObject); begin // Berechnung label5.caption:='Berechnung laeuft'; abstandmax := Strtoint(edit3.Text); lichtemass := StrToInt(edit2.text); stabstaerke := Strtoint(edit1.Text); stabzahl := round(StrToInt(edit2.text)/120); //Anzahl Stäbe zu anfang label5.caption:= IntToStr(stabzahl); repeat // Befehlsfolge, die öfters ausgeführt werden soll stabzahlalt := stabzahl; abstandalt := Abstand; abstand:= (lichtemass - (stabzahl * stabstaerke)) / (stabzahl + 1); label5.caption:= IntToStr(stabzahlalt)+' Stäbe mit einen Abstand von ' +FloattoStrF(abstandalt,ffFixed,8,1)+'mm'; stabzahl := stabzahl -1; until abstand>abstandmax; // FloatToStrF(myFloat, ffFixed, 8, 2); end; procedure TForm1.Button2Click(Sender: TObject); begin ShellExecute(Handle, '', PChar('http://www.dl8aax.de.vu'), '', '', 0); end; end. hat jemand nen Tipp ? mfg Dirk |
AW: Can not find unit ShellAPI
Wenn man ein IDE/Framework für Plattformunabhängige Lösungen verwenden will sollte man auch nur APIs verwenden die Plattformunabhängig implementiert sind.
Für deine benötigte Funktionalität wird das bei FreePascal unter ![]() |
AW: Can not find unit ShellAPI
Falls du ein kompletter Neuling bist, dürfte die vorige Erklärung nicht allzu verständlich sein:
Eine API ist eine Schnittstelle.. Du kannst sie einfach als eine Funktion sehen, die von einem bestimmten System (in dem Fall Betriebssystem) bereitgestellt wird Platformunabhängig: Jedes System ist eigenartig - das Ausführen von Programmen in System A kann sich von System B unterscheiden (und das ist eig. meist immer der Fall bei APIs). ShellExecute ist eine Windows API (funktioniert nur unter "Windows"). Lazarus setzt aber auf platformunabhängige Lösung - sie verwendet kein ShellExecute. Ich weiß nicht, wie die äquivalenten APIs für andere Systeme heißen, aber die müsstest du verwenden, falls du für ein spezielles System entwickelst. Ich glaub, dass es bei Lazarus so ist, dass da einfach eine Schicht drüber gepackt wird - apiA (System A), apiB (System B), apiC (System C), .. es wird eine eigene Funktion geschrieben, nennen wirs es X, die dann zur Compilezeit rausfindet, auf welchem bzw. für welches System kompiliert wird und dann die richtige api drinnen ausführt (also entweder apiA oder apiB oder ..) Du rufst dann im Grunde nur X auf. Lazarus kümmert sich um den Rest! <Edit> Recherchiere, was nun X in diesem Fall ist :P </Edit> Sollte verständlicher sein xD |
AW: Can not find unit ShellAPI
Hi,
Danke für die Antworten. Ich habe nun ShellExecute(...) gegen OpenURL(...) ausgetauscht und nun funktioniert es. mfg Dirk |
AW: Can not find unit ShellAPI
Und dann noch was Anderes:
ShellExecute wird es bestimmt auch im Lazarus irgendwo geben. Ich weiß nun nicht wie und wo du auf das ShellExecute gekommen bist, aber man kann nicht immer einfach so "Delphi"-Quellcodes 1:1 in Lazarus verwenden. Denn nicht nur, daß es dort andere Units gibt ... die heißen manchmal anders oder es gibt sie erst garnicht oder die gwünschte Funktion steckt dort in einer anderen Unit. Und Nochetwas: Was um Himmels Willen suchen diese globalen Variablen dort? PS: Die ersten Beiden
Delphi-Quellcode:
können weg und die letzte Zuweisung kann hinter die Schleife,
label5.caption:=...
denn du läßt dem Label eh keine Zeit sich neu zu zeichnen, weswegen man eh nur die letzte Zuweisung sehen sollte. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:44 Uhr. |
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