AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Can not find unit ShellAPI

Offene Frage von "himitsu"
Ein Thema von dl8aax · begonnen am 30. Nov 2013 · letzter Beitrag vom 1. Dez 2013
Antwort Antwort
dl8aax

Registriert seit: 30. Nov 2013
2 Beiträge
 
#1

Can not find unit ShellAPI

  Alt 30. Nov 2013, 18:04
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
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.202 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Can not find unit ShellAPI

  Alt 30. Nov 2013, 18:08
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 http://wiki.freepascal.org/Executing_External_Programs beschrieben.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von Aphton
Aphton

Registriert seit: 31. Mai 2009
1.198 Beiträge
 
Turbo Delphi für Win32
 
#3

AW: Can not find unit ShellAPI

  Alt 30. Nov 2013, 18:18
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
</Edit>
Sollte verständlicher sein xD
das Erkennen beginnt, wenn der Erkennende vom zu Erkennenden Abstand nimmt
MfG
  Mit Zitat antworten Zitat
dl8aax

Registriert seit: 30. Nov 2013
2 Beiträge
 
#4

AW: Can not find unit ShellAPI

  Alt 30. Nov 2013, 21:10
Hi,
Danke für die Antworten.

Ich habe nun ShellExecute(...) gegen OpenURL(...) ausgetauscht und nun funktioniert es.

mfg Dirk
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#5

AW: Can not find unit ShellAPI

  Alt 1. Dez 2013, 09:14
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 label5.caption:=... können weg und die letzte Zuweisung kann hinter die Schleife,
denn du läßt dem Label eh keine Zeit sich neu zu zeichnen, weswegen man eh nur die letzte Zuweisung sehen sollte.
$2B or not $2B

Geändert von himitsu ( 1. Dez 2013 um 09:18 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:19 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz