[erledigt] Procedure aus dem Netz einbinden

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
Benutzeravatar
kralle
Lazarusforum e. V.
Beiträge: 938
Registriert: Mi 17. Mär 2010, 14:50
OS, Lazarus, FPC: Linux Mint 20 , FPC 3.3.1 , Lazarus 2.1.0 -Win10 & XE7Pro
CPU-Target: 64Bit
Wohnort: Bremerhaven
Kontaktdaten:

[erledigt] Procedure aus dem Netz einbinden

Beitrag von kralle »

Moin,

ich muss gestehen, ich habe immer wieder Probleme, wenn ich eine fertige Procedure aus einer Internetquelle,
in eines meiner Programme einbinden will.
Wenn ich Glück habe, dann ist das auf der entsprechenden Seite zu erkennen.

Wenn jetzt folgendes gegeben ist:

Code: Alles auswählen

unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, DB, SQLDB, SQLite3Conn, PQConnection, oracleconnection,
  IBConnection, odbcconn, MSSQLConn, mysql57conn,
  mysql55conn, mysql80conn, Forms,
  Controls, Graphics, Dialogs, DBCtrls, DBGrids, StdCtrls, Grids;

type

  { TForm1 }

  TForm1 = class(TForm)
    Verbinden: TButton;
    Button2: TButton;
    DataSource1: TDataSource;
    DBGrid1: TDBGrid;
    DBNavigator1: TDBNavigator;
    DB_Connection: TSQLConnector;
    MySQL57Connection1: TMySQL57Connection;
    MySQL80Connection1: TMySQL80Connection;
    SQLQuery1: TSQLQuery;
    SQLTransaction1: TSQLTransaction;
    procedure Button2Click(Sender: TObject);
    procedure VerbindenClick(Sender: TObject);

  private

  public

  end;

var
  Form1: TForm1;

implementation

{$R *.lfm}       
und ich die Procedure

Code: Alles auswählen

procedure AutoSizeColDBGrid(DBGrid: TDBGrid; aAutoFille: boolean = False);
nutzen möchte, wie binde ich die oben richtig ein?

Wenn ich das einfach unter

Code: Alles auswählen

public
kopiere, dann bekomme ich die Meldung

Code: Alles auswählen

unit1.pas(34,12) Error: Forward declaration not solved "AutoSizeColDBGrid(TDBGrid;Boolean=`FALSE`);"
Das nächste ist dann der Aufruf der Procedure.
In diesem Projekt würde ich eigentlich denken, dass ich das so machen muß:

Code: Alles auswählen

procedure TForm1.Button2Click(Sender: TObject);
begin
   AutoSizeColDBGrid(DBGrid1, true);
end;  
Ist das richtig?

Auch wenn ich schon lange Pascal nutze, ist es doch an vielen Stellen "Try And Error", da ich keine Zeit finde Kurse zu besuchen (wenn es überhaupt noch welche gibt) oder Handbücher zu lesen (halte nur ein paar Seiten durch).

Gruß Heiko
Zuletzt geändert von kralle am So 2. Jul 2023, 14:06, insgesamt 1-mal geändert.
OS: Manjaro Linux, Debian und Windows 10
FPC-Version: 3.3.1 , Lazarus 2.3.0
+ Delphi XE7SP1

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6118
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Procedure aus dem Netz einbinden

Beitrag von af0815 »

Gehört die procedure zum Objekt TForm1, dann musst du es auch im Interface dort deklarieren und dann in der Implementierung auch die Deklaration richtig mit TForm1.MeineProcedure durchführen.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Benutzeravatar
theo
Beiträge: 10334
Registriert: Mo 11. Sep 2006, 19:01

Re: Procedure aus dem Netz einbinden

Beitrag von theo »

kralle hat geschrieben:
So 2. Jul 2023, 08:26
und ich die Procedure

Code: Alles auswählen

procedure AutoSizeColDBGrid(DBGrid: TDBGrid; aAutoFille: boolean = False);
nutzen möchte, wie binde ich die oben richtig ein?
Lege den Textcursor auf diese Deklaration (in z.B. "public") und mache "Strg+Umsch+C", dann wird das Gerüst im Implementationsteil erzeugt.
Entspricht "Kontextmenu->Quelle->Quelltext vervollständigen".

Benutzeravatar
kralle
Lazarusforum e. V.
Beiträge: 938
Registriert: Mi 17. Mär 2010, 14:50
OS, Lazarus, FPC: Linux Mint 20 , FPC 3.3.1 , Lazarus 2.1.0 -Win10 & XE7Pro
CPU-Target: 64Bit
Wohnort: Bremerhaven
Kontaktdaten:

Re: Procedure aus dem Netz einbinden

Beitrag von kralle »

Moin,
theo hat geschrieben:
So 2. Jul 2023, 10:51
Lege den Textcursor auf diese Deklaration (in z.B. "public") und mache "Strg+Umsch+C", dann wird das Gerüst im Implementationsteil erzeugt.
Entspricht "Kontextmenu->Quelle->Quelltext vervollständigen".
Gibt es das auch Andersherum?
Also ich habe die fertige Procedure z.B. aus dem Netz und ich sage dann "Erstelle die Deklaration"?

Gruß Heiko
OS: Manjaro Linux, Debian und Windows 10
FPC-Version: 3.3.1 , Lazarus 2.3.0
+ Delphi XE7SP1

Benutzeravatar
theo
Beiträge: 10334
Registriert: Mo 11. Sep 2006, 19:01

Re: Procedure aus dem Netz einbinden

Beitrag von theo »

kralle hat geschrieben:
So 2. Jul 2023, 12:49
Gibt es das auch Andersherum?
Also ich habe die fertige Procedure z.B. aus dem Netz und ich sage dann "Erstelle die Deklaration"?
Probier's aus.
Dann muss aber in diesem Fall der Name der Klasse (hier TForm1) mit dem fremden Code übereinstimmen.
Also:

Code: Alles auswählen

procedure TForm1.AutoSizeColDBGrid(DBGrid: TDBGrid; aAutoFille: boolean = False);
Umgekehrt ist es also praktischer.

Epcop
Beiträge: 140
Registriert: Di 29. Mai 2012, 09:36

Re: Procedure aus dem Netz einbinden

Beitrag von Epcop »

Code: Alles auswählen

procedure TForm1.Button2Click(Sender: TObject);
begin
   AutoSizeColDBGrid(DBGrid1, true);
end;  
Ja, wenn AutoSizeColDBGrid() oberhalb dieser Procedure ist, geht es auch. Dann muss es aber Form1.DBGrid1 heißen.

Ansonsten musst du auch darauf achten, die nötigen Units noch einzubinden, falls die Procedure welche benötigt. Das steht meist dabei (oder muss man erraten).
Und die nötigen Elemente müssen auch vorhanden sein (in dem Beispiel ein DBGrid).

Nicht alle Beispiele aus dem Internet funktionieren. Teils sind sie für alte oder andere Pascal Versionen geschrieben. Dann gibt es diese nicht mehr oder werden anders verwendet. Dann bleibt oft nichts anderes übrig, als diese umzuschreiben.

Und was ich auch oft sehe: Mancher Code im Internet ist auch durch die Formatierung der Webseite (oder was auch immer) zerstört und fehlerhaft. Da fehlen schlicht einfach Satzteile, Klammern, Semikolon, begin und end. Oder jemand hat bei Copy & Paste einfach Fehler gemacht. Bei solchen Code braucht man sich erst gar nicht zu versuchen.

Und weil es vermutlich in Zukunft auch immer öfters vorkommt: Produzierter KI Code ist oft auch fehlerhaft und nicht funktionsfähig... Wird aber trotzdem gerne veröffentlicht.

Benutzeravatar
kralle
Lazarusforum e. V.
Beiträge: 938
Registriert: Mi 17. Mär 2010, 14:50
OS, Lazarus, FPC: Linux Mint 20 , FPC 3.3.1 , Lazarus 2.1.0 -Win10 & XE7Pro
CPU-Target: 64Bit
Wohnort: Bremerhaven
Kontaktdaten:

Re: Procedure aus dem Netz einbinden

Beitrag von kralle »

Moin,

danke für die Hinweise.

Jetzt habe ich die Procedure eingebunden.
Sie wird aufgerufen und auch durchlaufen, aber im DBGrid ändert sich nichts, aber das ist ein Thema für einen weiteren Beitrag.

Gruß Heiko
OS: Manjaro Linux, Debian und Windows 10
FPC-Version: 3.3.1 , Lazarus 2.3.0
+ Delphi XE7SP1

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

Re: Procedure aus dem Netz einbinden

Beitrag von wp_xyz »

kralle hat geschrieben:
So 2. Jul 2023, 14:04
Jetzt habe ich die Procedure eingebunden.
Sie wird aufgerufen und auch durchlaufen, aber im DBGrid ändert sich nichts, aber das ist ein Thema für einen weiteren Beitrag.
Was passiert denn in der Procedure? Kannst du den Code posten?

Benutzeravatar
kralle
Lazarusforum e. V.
Beiträge: 938
Registriert: Mi 17. Mär 2010, 14:50
OS, Lazarus, FPC: Linux Mint 20 , FPC 3.3.1 , Lazarus 2.1.0 -Win10 & XE7Pro
CPU-Target: 64Bit
Wohnort: Bremerhaven
Kontaktdaten:

Re: [erledigt] Procedure aus dem Netz einbinden

Beitrag von kralle »

Moin,

ich mache für das anpassen der Spaltenbreite, ein neues Thema auf.

Gruß Heiko
OS: Manjaro Linux, Debian und Windows 10
FPC-Version: 3.3.1 , Lazarus 2.3.0
+ Delphi XE7SP1

Antworten