Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Wie greife ich auf Funktionen in einem Formular zu? (https://www.delphipraxis.net/43487-wie-greife-ich-auf-funktionen-einem-formular-zu.html)

mojo777 4. Apr 2005 20:50


Wie greife ich auf Funktionen in einem Formular zu?
 
Hallo,
für viele von Euch mag diese Frage zu einfach sein, aber ich schaffe es nicht eine plausible Lösung zu finden.
Bitte hlft mir!!!! BITTÄ!!!
Also:
Ich habe ein Formular (Nennen wir es mal fmA) mit ein paar Funktionen drin. Ein paar davon sind private, ein paar public. Nun will ich von einem Anderen Formulat (fmB) eine fkt aus fmA aufrufen und das ergebnis weiter in fmB verarbeiten.
Wenn ich aber z.b. showmessage(fmA.FktName(var)); mache merke ich ,dass die fkt im fmA gar nicht ausgeführt wird.
Also das Ergebnis ist immer '' egal was ich in Result:='hadoken' reinschreibe;
:-(

Wäre für Tipps sehr dankbar!!!

Gruß

Mojo

SirThornberry 4. Apr 2005 21:04

Re: Wie greife ich auf Funktionen in einem Formular zu?
 
hast du schonmal einen haltepunkt in die funktion von deinem formularA gemacht und dann mit f8 durchgegangen und geschaut wo der fehler auftritt. Ich vermute du gehst in der funktion einfach nicht auf den parameter der funktion ein sondern nutzt irgendwelche werte direkt vom formularA

malo 4. Apr 2005 21:06

Re: Wie greife ich auf Funktionen in einem Formular zu?
 
Poste doch mal die Funktion ;)

mojo777 4. Apr 2005 22:28

Re: Wie greife ich auf Funktionen in einem Formular zu?
 
äöähmmm...... ok hier: die ist "etwas" lang..
Delphi-Quellcode:
public
    function start(anztage:Integer):Double;
und die fkt selbst
Delphi-Quellcode:
function TfmTarifrechner.start(anztage:Integer):Double;
var
  ALoger:string;
  ACounter, counter, medcounter: integer;
  AId, rechn_array:String;
  i,j,k:Integer;
  preis:Double;
begin
  showmessage('sdfsdf');
    memo1.Lines.add('start wird ausgeführt...');
    dxMediaCount.Active:=False;
    dxMEdiaCount.Active:=True;
    dxFertigtarife.Active:=False;
    dxFertigtarife.Active:=True;
    if dmData.ibtMedia.Active=False then dmData.ibtMedia.Active:=True;
    dmData.ibtargruppen.First;
    for k:=1 to dmData.ibtargruppen.RecordCount do
    begin
      dmData.ibtMedia.First;
      for i:=1 to dmData.ibtMedia.RecordCount do
        begin
        memo1.lines.add('duchsuche ibtMedia...');
        tbTransTemp.First;
        medcounter:=0;
        for j:=1 to tbTransTemp.RecordCount do
          begin
          //memo1.Lines.add('Durchsuche tbTranTemp...');
          if (tbTransTempMEDIUM_ID.AsInteger=dmData.ibtMediaMED_ID.AsInteger) and
          (tbTransTempTARIFGRP_ID.AsInteger=dmData.ibtargruppenTGR_ID.AsInteger) then
            begin
            medcounter:=medcounter+1;
            memo1.Lines.Add('medcounter um 1 erhöht...');
            end;
          tbTransTemp.Next;
          end; //j
        if medcounter>0 then
          begin
          //showmessage('mediunter>1');
          dxMediacount.Insert;
          dxMediaCountMED_ID.AsInteger:=dmData.ibtMediaMED_ID.AsInteger;
          dxMediacountMED_ANZ.AsInteger:=medcounter;
          //dxMediaCountMED_NAME.AsString:=dmData.ibtMediaMED_TYPE.AsString;
          dxMediaCountTARGRP_ID.AsInteger:=dmData.ibtargruppenTGR_ID.AsInteger;
          //dxMediaCountTARGRP_NAME.AsString:=dmData.ibtargruppenTGR_NAME.AsString;
          //dxMediaCountTARGRP_COLOR.AsString:=dmData.ibtargruppenTGR_COLOR.AsString;
          dxMediaCount.Post;
          end;
        dmData.ibtMedia.Next; //es wird jetzt gezählt, wieviel und welche medien in tbTrans
          //sind. das ergebnis wird in dxMediaCount gespeichert.
        end;//for i
      dmData.ibtargruppen.next;
      end; //for k
    memo1.lines.add('soo... anz der medien gezählt.');

    if dxMediaCount.Active=False then dxMEdiaCount.Active:=True;
    dxMediaCount.First;
    // jetzt wird anhand von dxMediaCount geguckt, welche tarife und wie oft reinpassen
    // dafür ist die funktion findemaxtarif zuständig. diese ist rekursiv und ist sowieso
    //zauberhaft.
    for i:=1 to dxMediaCount.RecordCount do
      begin
      resttage:=anztage;
      findemaxtarif(dxMediacountMED_ID.AsInteger, dxMediacountMED_ANZ.AsInteger, dxMediaCountTARGRP_ID.AsInteger, resttage);
      dxMediaCount.Next;
      end;// for
    tbTransTemp.Next;
    //end; //for i
    //jetzt preise zusammenzählen
    preis:=0;
    dxFertigtarife.First;
    for i:=1 to dxFertigtarife.RecordCount do
      begin
      preis:=preis+gettarifpreis(dxFertigTarifeTARIF_ID.AsInteger, dxFertigtarifeTARIF_ANZ.AsInteger);
      memo1.lines.add('DER PREIS: '+FloatToStr(preis));
      dxFertigtarife.Next;
      end;
    Result:=preis;
  end; //ganz ende
Die Formatierung ist nicht ganz sauber, aber ich denke das ist lesbar.
Notiz: nichteinmal showmessage() am Anfang wird ausgeführt... :-(

HOffe konnte damit mehr Unklarheiten beseitigen als aufbauen...

@ SirThornberry
also es tritt ja kein Fehler im allgemeinen sinne auf. ich sehe keine fehlermeldung... es scheint so als ob die fkt ausgeführt wird.... :gruebel:

mojo


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:22 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