tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
11
ZUGRIFFE
1526
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    smaresh smaresh ist offline Mitglied Bronze
    Registriert seit
    Oct 2007
    Beiträge
    31
    Man glaubt es kaum aber ich hab mich bisher ohne Funktionen durchgeschlagen. Da mein Script aber langsam meterlang wird und das ändern der Datei einfach viel simpler ist hab ich mich jetzt endlich durchgerungen das zu lernen.
    Google und die Delphi-Hilfe helfen aber leider nur bedingt!

    einfache mathematische Funktionen inder Zahlen z.B multipliziert werden sollen
    oder einfache Funktionen in der Strings zusammengeführt werden sind kein Problem aber ich bin auf der Suche nach einer Funktion in der ich z.B ne shellapi ausführen oder verschiedene labels ansprechen kann. Im Momment ist da bei mir ein rießiges Fragezeichen über meinem Kopf

    hier einfache mathematische funkt.
    Code :
    1
    2
    3
    4
    
    Function bla(x: String; y: integer) : integer;
      begin
        result:=x+y;
      end;

    so wie es mir mein Verstand saen würde was aber leider nicht funktioniert:
    Code :
    1
    2
    3
    4
    
    Function bla(x: String) : string;
      begin
        result:= ShellExecute(Handle, 'open', PChar(x), nil, nil, SW_NORMAL);
      end;
    oder noch falscher
    Code :
    1
    2
    3
    4
    
    Function bla(x: integer) : integer;
      begin
        result:= labelx.caption:='texttext';
      end;

    würd mich freuen wenn Einer von euch mir ein bisschen auf die Sprünge helfen könnte.
    gruß, smaresh
     

  2. #2
    Hellie Hellie ist offline Mitglied Brokat
    Registriert seit
    Mar 2004
    Beiträge
    252
    Warum willst du hier Funktionen nutzen und keine eigenen Prozeduren? Ist für mich nicht ersichtlich...
     

  3. #3
    smaresh smaresh ist offline Mitglied Bronze
    Registriert seit
    Oct 2007
    Beiträge
    31
    weil ich z.b. bei der shellapi 12 programme öffnen will und das wären dann 12 mal platz für script und 12 mal ändern, besser wäre es doch wenn ich die funktion oben einmal definieren könnte und unten dann nur den pfad habe und die shellapi aufrufe.
    und das mit den labels war nur ein Beispiel um es zu lernen

    gruß
     

  4. #4
    Hellie Hellie ist offline Mitglied Brokat
    Registriert seit
    Mar 2004
    Beiträge
    252
    Hm, ich kann dir grad irgendwie nicht folgen. Aber wenn du die gleichen Prozeduren häufiger mit unterschiedlichen Parametern ausführen willst (zB den Pfad zurechtstutzen und dann ein Programm öffnen), kannst du ja eine eigene Prozedur schreiben und die nötigen Werte als Parameter übergeben lassen.
    Wenn du aber nur einen String auf ähnliche Art und Weise bearbeiten willst, dann nimmst du die Funktion, und der fertig bearbeitete String wird dann als Result zurückgegeben.

    Die beiden letzten Beispiele, die du anbringst, sollten ja eigentlich Prozeduren sein, weil ja nichts zurückgegeben werden muss.

    Liebe Grüße
    Hellie
     

  5. #5
    Avatar von darkframe
    darkframe darkframe ist offline Mitglied Brokat
    Registriert seit
    Dec 2007
    Ort
    Berlin
    Beiträge
    481
    Hi,

    für ShellExecute brauchst Du die ShellAPI in der Uses-Clause. Hast Du die drin?

    Ach ja, Dein unterstes Beispiel zeigt ja gar keine Funktion. Was willst Du denn damit erreichen?

    @Hellie:
    Bei der ShellExecute-Geschichte könnte ich das verstehen, wenn in der aufrufenden Prozedur eine Fehlerabfrage erfolgen würde, denn "result" enthält ja den Fehlercode, wenn der Aufruf schiefgegangen ist.
    Geändert von darkframe (05.01.08 um 15:20 Uhr)
     
    Grüße

    darkframe

  6. #6
    Hellie Hellie ist offline Mitglied Brokat
    Registriert seit
    Mar 2004
    Beiträge
    252
    Zitat Zitat von darkframe Beitrag anzeigen
    Bei der ShellExecute-Geschichte könnte ich das verstehen, wenn in der aufrufenden Prozedur eine Fehlerabfrage erfolgen würde, denn "result" enthält ja den Fehlercode, wenn der Aufruf schiefgegangen ist.
    Was unterscheidet denn dann die eigentliche ShellExecute-Funktion von dieser hier? Das wären unnötige Schritte, höchstens wichtig, wenn man es übersichtlich haben möchte und nicht immer die ShellExecute-Funktion mit den vielen Parametern. Aber eigentlich extremst ineffektiv.

    Hab mir das Programm mal angeschaut, mir erscheint es wirklich so als bräuchtest du hier keine Funktionen, sondern nur Prozeduren, die dann mit Klick auf einen Button aufgerufen werden, und als Parameter den Pfad, den Index oder sonstwas übergeben.

    Grüße
    Hellie
     

  7. #7
    smaresh smaresh ist offline Mitglied Bronze
    Registriert seit
    Oct 2007
    Beiträge
    31
    Ja Hellie du hast Recht, wenn du mir das mit den Prozeduren die bestimmte Parameter übergeben erklären würdest...

    gruß smaresh
     

  8. #8
    Hellie Hellie ist offline Mitglied Brokat
    Registriert seit
    Mar 2004
    Beiträge
    252
    Kein Problem. Im Prinzip ist es wie bei den Funktionen, nur, dass es keinen Rückgabewert gibt. Um das mittlere Beispiel aufzugreifen, könnte die Prozedur zB

    Procedure bla(x: String);
    begin
    ShellExecute(Handle, 'open', PChar(x), nil, nil, SW_NORMAL);
    end;

    heißen. Nun könntest du zB über die Anweisung

    bla('C:\meineanwendung.exe');

    genau dieses Programm aufrufen. Wichtig ist nur, dass in der Prozedur alles so abstrakt geschrieben und mit Parametern beschrieben ist, dass die für alle Anwendungsfälle funktioniert.
    Du kannst natürlich nicht nur den Pfad selbst als Parameter übergeben, sondern auch den Namen des Buttons oder woher du auch immer den Pfad dann nimmst, und in dieser von dir geschriebenen Prozedur dann den übergebenen Parameter zum Pfad "umarbeiten".
    Bin ich zu verstehen

    Liebe Grüße
    Hellie
     

  9. #9
    smaresh smaresh ist offline Mitglied Bronze
    Registriert seit
    Oct 2007
    Beiträge
    31
    geht leider nicht hab das gleiche Problem wie mit den Funktionen

    der meldet ein Fehler wenn ichs unter den vars reinschreib:

    [Error] Unit1.pas(25): Statements not allowed in interface part
    [Error] Unit1.pas(26): Undeclared identifier: 'Handle'
    [Error] Unit1.pas(24): Unsatisfied forward or external declaration: 'bla'
    [Fatal Error] Project1.dpr(5): Could not compile used unit 'Unit1.pas'

    das wenn ichs unter implementation schreib
    [Error] Unit1.pas(33): Undeclared identifier: 'Handle'
    [Error] Unit1.pas(13): Unsatisfied forward or external declaration: 'TForm1.Button1Click'
    [Fatal Error] Project1.dpr(5): Could not compile used unit 'Unit1.pas'

    hoffe ihr könnt was damit anfangen
    Geändert von smaresh (05.01.08 um 16:37 Uhr)
     

  10. #10
    Hellie Hellie ist offline Mitglied Brokat
    Registriert seit
    Mar 2004
    Beiträge
    252
    Entweder schreibst du's im Interface-Teil, aber nicht in den Typ TForm1:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    
    unit Unit1;
     
    interface
     
    uses ...
     
    type
      TForm1 = class(TForm)
        ...
      end;
    [B]
    procedure bla(x:string);[/B]
     
    var
      Form1: TForm1;

    oder mit zum Typ TForm1:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    type
      TForm1 = class(TForm)
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
    [B]    procedure bla(x:string);[/B]
      private
        { Private-Deklarationen }
      public
        { Public-Deklarationen }
      end;

    Dann muss die Prozedur selbst aber auch
    Code :
    1
    
    procedure TForm1.bla(x:string);

    heißen.

    Was das Handle angeht, versuch's mal mit ShellExecute(Application.Handle, 'open', PChar(x), nil, nil, SW_NORMAL); stattdessen.

    Hoffe, ich konnte ein Bisschen helfen.
    Grüße
    Hellie
     

  11. #11
    smaresh smaresh ist offline Mitglied Bronze
    Registriert seit
    Oct 2007
    Beiträge
    31
    ok danke wenn ichs unter TForm reinschreib dann gehts danke

    gruß smaresh
     

  12. #12
    Avatar von darkframe
    darkframe darkframe ist offline Mitglied Brokat
    Registriert seit
    Dec 2007
    Ort
    Berlin
    Beiträge
    481
    Zitat Zitat von Hellie Beitrag anzeigen
    Was unterscheidet denn dann die eigentliche ShellExecute-Funktion von dieser hier? Das wären unnötige Schritte, höchstens wichtig, wenn man es übersichtlich haben möchte und nicht immer die ShellExecute-Funktion mit den vielen Parametern. Aber eigentlich extremst ineffektiv.
    Hi,

    ja, das war auch mein Gedanke. Aber wenn er's denn so haben will

    Aber schön, dass ihr schon eine Lösung gefunden habt
     
    Grüße

    darkframe

Ähnliche Themen

  1. Antworten: 2
    Letzter Beitrag: 04.09.07, 07:19
  2. Antworten: 7
    Letzter Beitrag: 26.04.06, 21:32
  3. XSL mit PHP-Funktionen
    Von shockshell im Forum XML Technologien
    Antworten: 0
    Letzter Beitrag: 15.06.05, 09:35
  4. Antworten: 9
    Letzter Beitrag: 10.05.05, 22:03
  5. Funktionen
    Von TsEnG im Forum Javascript & Ajax
    Antworten: 1
    Letzter Beitrag: 09.02.04, 14:02