AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Komisches Sprachkonstrukt - zwei Rümpfe in Prozedur
Thema durchsuchen
Ansicht
Themen-Optionen

Komisches Sprachkonstrukt - zwei Rümpfe in Prozedur

Ein Thema von BloodySmartie · begonnen am 2. Jun 2008 · letzter Beitrag vom 2. Jun 2008
Antwort Antwort
Seite 1 von 2  1 2      
BloodySmartie
(Gast)

n/a Beiträge
 
#1

Komisches Sprachkonstrukt - zwei Rümpfe in Prozedur

  Alt 2. Jun 2008, 15:06
Hallo zusammen!

Wir stehen hier in einem Projekt gerade mehr oder minder sprachlos vor einem Fetzen Quellcode unseres Vorgängers, der uns bereits auf Ebene seiner Sourcen oft zum Lachen gebracht hat. Allerdings tut er im aktuellen Code etwas, das ich einfach nicht verstehe. Er hat eine Prozedur(deren Namen ich aus Zwecken der Komik unverändert lassen werden), die quasi zwei Rümpfe hat.

Beispiel für Lesefaule:
Delphi-Quellcode:
procedure Create_Sales_Per_Wahl_And_Section_aus_Telemetriedaten;

var
   ...
begin
   ...(diverse Operationen...)
end;
begin
   ...(diverse andere Operationen...)
end;
Original-Code:
Delphi-Quellcode:

procedure Create_Sales_Per_Wahl_And_Section_aus_Telemetriedaten;

var
  {------------------------------------------------------}
  {----- Hilfsvariablen zum Sichern der Datenfelder -----}
  {------------------------------------------------------}
  DatumZeit : string;
  IP_Adresse : string;
  Rufnummer : string;
  Zielrufnummer : string;
  Transaktionscode : string;
  TransaktionsID : string;
  SubMandantenID : string;
  SubMandantenID2 : string;
  SubMandantenID3 : string;

  {---------------------------------------------------------------------}
  {----- Hilfsvariablen zum Speichern aller Mandanteninformationen -----}
  {---------------------------------------------------------------------}
  Server_IP : string;
  Datenbank : string;

  {------------------------------------------------------------}
  {----- Hilfsvariablen zum Speichern des Datenbanklogins -----}
  {------------------------------------------------------------}
  Username : string;
  Password : string;

  {--------------------------------------------------------------------}
  {----- Hilfsvariable um den Wert einer Transaktion zu speichern -----}
  {--------------------------------------------------------------------}
  Wert : string;

  {--------------------------------------------------------------------}
  {----- Hilfsvariable um die Wahl einer Transaktion zu speichern -----}
  {--------------------------------------------------------------------}
  Wahl : string;

begin
  {-------------------------------------------------}
  {----- Einmalige Prozessverarbeitung starten -----}
  {-------------------------------------------------}
  if RunOnce=true then
    begin
      try
        PSQLQuery_Work1.Active:=false;
        PSQLQuery_Work1.SQL.Text:='select * from anruf_telemetrie where '+
                                  '(rufnummer_ankommend='+''''+'--zensiert--'+''''+') or'+
                                  '(rufnummer_ankommend='+''''+'--zensiert--'+''''+') or'+
                                  '(rufnummer_ankommend='+''''+'--zensiert--'+''''+') or'+
                                  '(rufnummer_ankommend='+''''+'--zensiert--'+''''+') or'+
                                  '(rufnummer_ankommend='+''''+'--zensiert--'+''''+') or'+
                                  '(rufnummer_ankommend='+''''+'--zensiert--'+''''+') or'+
                                  '(rufnummer_ankommend='+''''+'--zensiert--'+''''+') or'+
                                  '(rufnummer_ankommend='+''''+'--zensiert--'+''''+') or'+
                                  '(rufnummer_ankommend='+''''+'--zensiert--'+''''+') or'+
                                  '(rufnummer_ankommend='+''''+'--zensiert--'+''''+') '+
                                  'order by datumzeit_ankommend;';
        PSQLQuery_Work1.Active:=true;

        {---------------------------------------------------}
        {----- Verarbeitungsstatus in Listbox ausgeben -----}
        {---------------------------------------------------}
        Work_Trace_ListBox.Items.Insert(0,TimeToStr(Now)+' | Tabelle - Anruf_Telemetrie - geöffnet!');

      except
        {---------------------------------------------------}
        {----- Verarbeitungsstatus in Listbox ausgeben -----}
        {---------------------------------------------------}
        Work_Trace_ListBox.Items.Insert(0,TimeToStr(Now)+' | Tabelle - Anruf_Telemetrie - konnte nicht geöffnet werden!');
      end;

      {-------------------------------------------------------}
      {----- Telemetriemeldungen sequentiell durchlaufen -----}
      {-------------------------------------------------------}
      while (not PSQLQuery_Work1.Eof) do
        begin
          Application.ProcessMessages;

          DatumZeit:=PSQLQuery_Work1.FieldByName('datumzeit_ankommend').AsString;
          IP_Adresse:=PSQLQuery_Work1.FieldByName('ip_sender').AsString;
          Rufnummer:=PSQLQuery_Work1.FieldByName('rufnummer_ankommend').AsString;
          Zielrufnummer:=PSQLQuery_Work1.FieldByName('zielrufnummer').AsString;
          TransaktionsID:=PSQLQuery_Work1.FieldByName('transaktion_id').AsString;
          Transaktionscode:=PSQLQuery_Work1.FieldByName('transaktionscode').AsString;

          {-----------------------------------------------------}
          {----- Variablen für Verabreitung initialisieren -----}
          {-----------------------------------------------------}
          Status:=0;Mandanten_ID:='';Server_IP:='';Datenbank:='';
          Username:='';Password:='';

          {------------------------------------}
          {----- Bildschirm-Trace starten -----}
          {------------------------------------}
          Com_Trace_ListBox.Items.Insert(0,'----- Action-Snapshot Anfang -----');

          {------------------------------------------------------------------}
          {----- Prüfen ob der Abenser der Telemetriemeldung gültig ist -----}
          {------------------------------------------------------------------}
          Check_for_valid_Sender(Status,IP_Adresse);

          {----------------------------------------------}
          {----- Mandanten zur Rufnummern ermitteln -----}
          {----------------------------------------------}
          Get_Client(Status,Mandanten_ID,Rufnummer,DatumZeit,ZielRufnummer);

          {----------------------------------------------}
          {----- Detaildaten des Mandaten ermitteln -----}
          {----------------------------------------------}
          Get_Client_Details(Status,MandantenName,Server_IP,Datenbank,Mandanten_ID);

          {---------------------------------------------------------}
          {----- Login-Daten für Mandantendantenbank ermitteln -----}
          {---------------------------------------------------------}
          Get_DB_Login(Status,Username,Password,Server_IP);

          {----------------------------------------}
          {----- Mandantendatenbank verbinden -----}
          {----------------------------------------}
          Connect_Client_Database(Datenbank,Server_IP,Username,Password);

          {---------------------------------------------------------------}
          {----- Transaktionsdetails lesen wenn die Verbindung steht -----}
          {---------------------------------------------------------------}
          Get_Transaction_Details(Transaktionscode,Wert,Rufnummer, Wahl, SubMandantenID, SubMandantenID2, SubMandantenID3);

          {---------------------------------------------------------------}
          {----- Prüfen ob wegen einer Automatenbefüllung die Anzahl -----}
          {----- der Leeranwahlen zurückgesetzt werden muss          -----}
          {---------------------------------------------------------------}
          Check_Reset_Leeranwahlen(Rufnummer,DatumZeit,Transaktionscode,true);

          {------------------------------------------------------------}
          {----- Sofern erforderlich Statistikdaten aktualisieren -----}
          {------------------------------------------------------------}
          Verarbeite_Verkaufe__per_Wahl_und_Section(Rufnummer,DatumZeit,Transaktionscode,Wahl);

          {-----------------------------------------}
          {----- Bildschirm-Trace abschliessen -----}
          {-----------------------------------------}


          Com_Trace_ListBox.Items.Insert(0,'----- Action-Snapshot Ende -----');
          Com_Trace_ListBox.Items.Insert(0,'');

          {-----------------------------------------}
          {----- Sprung zum nächsten Datensatz -----}
          {-----------------------------------------}
          PSQLQuery_Work1.Next;
        end;

      {------------------------------}
      {----- Query's schliessen -----}
      {------------------------------}
      try
        PSQLQuery_Work1.Active:=false;
      except
      end;
    end
end;

{- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - }

begin
  {------------------------------------------}
  {------ Hilfsvariablen initialisieren -----}
  {------------------------------------------}
  Process:=true;

  with MainDlg do
    begin
      {-------------------------------------------------------}
      {----- Timer während der Verarbeitung deaktivieren -----}
      {-------------------------------------------------------}
      ValidateData.Enabled:=false;

      {------------------------------------}
      {----- Bildschirm-Trace starten -----}
      {------------------------------------}
      Work_Trace_ListBox.Items.Insert(0,'----- Action-Snapshot Anfang -----');

      try
        PSQLQueryMandanten.Active:=false;
        PSQLQueryMandanten.SQL.Text:='select * from public.mandaten';
        PSQLQueryMandanten.Active:=true;

        {---------------------------------------------------}
        {----- Verarbeitungsstatus in Listbox ausgeben -----}
        {---------------------------------------------------}
        Work_Trace_ListBox.Items.Insert(0,TimeToStr(Now)+' | Tabelle Mandanten geöffnet!');
      except
        {-----------------------------}
        {----- Status definieren -----}
        {-----------------------------}
        Process:=false;

        {---------------------------------------------------}
        {----- Verarbeitungsstatus in Listbox ausgeben -----}
        {---------------------------------------------------}
        Work_Trace_ListBox.Items.Insert(0,TimeToStr(Now)+' | Tabelle Mandanten konnte nicht geöffnet werden!');
      end;

      {-----------------------------------------------------------------}
      {------ Verarbeitung für alle angelegten Mandanten vornehmen -----}
      {-----------------------------------------------------------------}
      while (not PSQLQueryMandanten.Eof) and (Process=true) do
        begin
          {---------------------------------------------------}
          {----- Verarbeitungsstatus in Listbox ausgeben -----}
          {---------------------------------------------------}
          Work_Trace_ListBox.Items.Insert(0,TimeToStr(Now)+' | Verarbeitung für Mandant '+PSQLQueryMandanten.FieldByName('name').AsString+'...');

          {-----------------------------------------------------------------}
          {----- MandatenID zur Prozessverifizierung zwischenspeichern -----}
          {-----------------------------------------------------------------}
          MandantenID:=PSQLQueryMandanten.FieldByName('mandanten_id').AsString;

          {-----------------------------------------------}
          {------ Login-Daten zum Mandantn ermitteln -----}
          {-----------------------------------------------}
          if (PSQLQueryMandanten.FieldByName('name').AsString<>'') and
             (PSQLQueryMandanten.FieldByName('name').AsString<>'m-Transaktion') then
            begin
              try
                PSQLQueryDatenbankserver.Active:=false;
                PSQLQueryDatenbankserver.SQL.Text:='select * from datenbankserver where '+
                                                   'servername ='+''''+PSQLQueryMandanten.FieldByName('servername').AsString+''''+';';
                PSQLQueryDatenbankserver.Active:=true;

                {---------------------------------------------------}
                {----- Verarbeitungsstatus in Listbox ausgeben -----}
                {---------------------------------------------------}
                Work_Trace_ListBox.Items.Insert(0,TimeToStr(Now)+' | Datenbankparameter für Mandanten ermittelt!');

                {--------------------------------------------}
                {----- Datenbanknamen zwischenspeichern -----}
                {--------------------------------------------}
                Datenbank:=PSQLQueryMandanten.Fieldbyname('datenbank').AsString;

                {---------------------------------------}
                {----- Server-IP zwischenspeichern -----}
                {---------------------------------------}
                Server_IP:=PSQLQueryDatenbankserver.Fieldbyname('server_ip').AsString;

                {---------------------------------------}
                {----- Usernamen zwischenspeichern -----}
                {---------------------------------------}
                Username:=PSQLQueryDatenbankserver.Fieldbyname('username').AsString;

                {--------------------------------------}
                {----- Password zwischenspeichern -----}
                {--------------------------------------}
                Password:=PSQLQueryDatenbankserver.Fieldbyname('passwort').AsString;
              except
                on E: Exception do
                  begin
                    {-----------------------------}
                    {----- Status definieren -----}
                    {-----------------------------}
                    Process:=false;

                    {---------------------------------------------------}
                    {----- Verarbeitungsstatus in Listbox ausgeben -----}
                    {---------------------------------------------------}
                    Work_Trace_ListBox.Items.Insert(0,TimeToStr(Now)+' | Datenbankparameter für Mandanten konnt nicht ermittelt werden!');
                  end;
              end;

              {--------------------------------------------}
              {----- Query Datenbankserver schliessen -----}
              {--------------------------------------------}
              try
                if PSQLQueryDatenbankserver.Active then PSQLQueryDatenbankserver.Active:=false;
              except;
              end;

              {---------------------------------------------------------------}
              {----- Sofern keine Verarbeitungsfehler aufgetreten sind   -----}
              {----- wird nun die Verbindung zur Datenbank des aktuellen -----}
              {----- Mandanten hergestellt.                              -----}
              {---------------------------------------------------------------}
              if Process then
                begin
                  try
                    PSQLDatabase_Work.Connected:=false;
                    PSQLDatabase_Work.Databasename:=Datenbank;
                    PSQLDatabase_Work.Host:=Server_IP;
                    PSQLDatabase_Work.Username:=Username;
                    PSQLDatabase_Work.UserPassword:=Password;
                    PSQLDatabase_Work.Connected:=true;

                    {---------------------------------------------------}
                    {----- Verarbeitungsstatus in Listbox ausgeben -----}
                    {---------------------------------------------------}
                    Work_Trace_ListBox.Items.Insert(0,TimeToStr(Now)+' | Verbindung zur Mandantendatenbank hergestellt - '+PSQLQueryMandanten.FieldByName('name').AsString);
                  except
                    on E: Exception do
                      begin
                        {-----------------------------}
                        {----- Status definieren -----}
                        {-----------------------------}
                        Process:=false;

                        {---------------------------------------------------}
                        {----- Verarbeitungsstatus in Listbox ausgeben -----}
                        {---------------------------------------------------}
                        Work_Trace_ListBox.Items.Insert(0,TimeToStr(Now)+' | Verbindung zur Mandantendatenbank fehlgeschlagen - '+PSQLQueryMandanten.FieldByName('name').AsString+'!');
                        Work_Trace_ListBox.Items.Insert(0,TimeToStr(Now)+' | '+e.Message);
                      end;
                  end;

                  {--------------------------------------------------------------}
                  {----- Aufgaben in der Datenbank des Mandanten abarbeiten -----}
                  {--------------------------------------------------------------}
                  if Process then
                    begin
                      {----------------------------------------------------------}
                      {----- Prüfen ob für jeden angelegten Automaten ein   -----}
                      {----- entsprechender Datensatz in der Tabelle        -----}
                      {----- Automatenprodukte vorhanden ist.               -----}
                      {----- In Automantenprodukte wird zu jedem Automat    -----}
                      {----- eine eindeutige Produktbestückung gespeichert. -----}
                      {----------------------------------------------------------}
                      Validate_Record_in_Automatenprodukte;

                      {----------------------------------------------------}
                      {----- Setzt eine Default Konfiguration für das -----}
                      {----- Eskalationsmanagement.                   -----}
                      {----------------------------------------------------}
                      Set_Default_Escalation_Configuration;

                      {-----------------------------------------------------------------------}
                      {----- Ermittlung der Statistikdaten zurückliegender Transaktionen -----}
                      {-----------------------------------------------------------------------}
                      if (ParamStr(1)='X') or (ParamStr(2)='X') then Create_Sales_Per_Wahl_And_Section_aus_Telemetriedaten;
                    end;

                  {------------------------------------------------------}
                  {----- Dynamischen Datenbankverbindung schliessen -----}
                  {------------------------------------------------------}
                  try
                    PSQLDatabase_Work.Connected:=false;
                  except
                  end;
                end;
            end;
          {-----------------------------------------}
          {----- Sprung zum nächsten Datensatz -----}
          {-----------------------------------------}
          PSQLQueryMandanten.Next;

          {---------------------------------}
          {----- Prozessorzeit abgeben -----}
          {---------------------------------}
          Application.ProcessMessages;
        end;

      {------------------------------}
      {----- Query's schliessen -----}
      {------------------------------}
      try
        if PSQLQueryMandanten.Active then PSQLQueryMandanten.Active:=false;
      except
      end;

      {-----------------------------------------}
      {----- Bildschirm-Trace abschliessen -----}
      {-----------------------------------------}
      Work_Trace_ListBox.Items.Insert(0,'----- Action-Snapshot Ende -----');
      Work_Trace_ListBox.Items.Insert(0,'');

      {------------------------------------}
      {----- Statusvariable umsetzten -----}
      {------------------------------------}
      RunOnce:=false;

      {----------------------------------------------------------}
      {----- Timer nach Abschluss aller Aktionen aktivieren -----}
      {----------------------------------------------------------}
      ValidateData.Enabled:=true;
    end;
end;


Ideas, anybody?
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Komisches Sprachkonstrukt - zwei Rümpfe in Prozedur

  Alt 2. Jun 2008, 15:09
Wird der 2. Abschnitt den aufgerufen?
Markus Kinzler
  Mit Zitat antworten Zitat
jottkaerr

Registriert seit: 2. Jul 2007
Ort: Tuttlingen
81 Beiträge
 
Delphi 10.1 Berlin Professional
 
#3

Re: Komisches Sprachkonstrukt - zwei Rümpfe in Prozedur

  Alt 2. Jun 2008, 15:22
Bist Du dir sicher, dass es sich bei dem ersten Block nicht um eine lokale Prozedur und beim zweiten Block nicht um den begin-end-Block der übergeordneten Prozedur handelt? Im zweiten Block wird nämlich eben jene Prozedur Create_Sales_Per_Wahl_And_Section_aus_Telemetrieda ten aufgerufen. In diesem Fall hättet ihr den Prozedurkopf der übergeordneten Prozedur übersehen.

jkr
Jürgen Krämer
Sometimes I think the surest sign that intelligent life exists elsewhere
in the universe is that none of it has tried to contact us. (Calvin)
  Mit Zitat antworten Zitat
grizzly

Registriert seit: 10. Dez 2004
150 Beiträge
 
Delphi XE4 Professional
 
#4

Re: Komisches Sprachkonstrukt - zwei Rümpfe in Prozedur

  Alt 2. Jun 2008, 15:23
Ich könnte mir vorstellen, daß euch die Einrückung auf eine falsche Fährte gelockt hat. Der obere Teil ist vermutlich nur eine Unterprozedur.
Eure Kurzfassung sieht vielleicht korrigiert so aus?
Delphi-Quellcode:
procedure Master_Proc_That_Calls_Create_Sales_And_SoOn_And_So_Forth;
var
   ...

     procedure Create_Sales_Per_Wahl_And_Section_aus_Telemetriedaten;
     var
        ...
     begin
        ...(diverse Operationen...)
     end;


begin
   ...(diverse andere Operationen...)
end;
Schließlich wird die Prozedur im unteren Teil noch aufgerufen. Und das wär ja sonst ein rekursiver Call (was natürlich auch ginge...)


Gruß
Michael

Edit: Siehe da, jottkaerr hat denselben Gedanken...
  Mit Zitat antworten Zitat
gammatester

Registriert seit: 6. Dez 2005
999 Beiträge
 
#5

Re: Komisches Sprachkonstrukt - zwei Rümpfe in Prozedur

  Alt 2. Jun 2008, 15:24
Da ist doch nichts komisches dran. Wenn man will, kann man um jede Anweisung ein begin ... end setzen. Das sind keine zwei Rümpfe sondern compound statements.

Gruß Gammatester
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#6

Re: Komisches Sprachkonstrukt - zwei Rümpfe in Prozedur

  Alt 2. Jun 2008, 15:26
Geil, mehr Kommentare als Code und das bei relativ aussagekräftigen Bezeichnern.

Was er gemacht hat, ist seinen Code noch mals durch Blöcke zu gliedern. Wobei es auch eine zusätzliche Leerzeile getan hätte.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von nicodex
nicodex

Registriert seit: 2. Jan 2008
Ort: Darmstadt
286 Beiträge
 
Delphi 2007 Professional
 
#7

Re: Komisches Sprachkonstrukt - zwei Rümpfe in Prozedur

  Alt 2. Jun 2008, 15:59
Das Konstrukt lässt sich bei mir nicht kompilieren (Delphi 2007). Ich vermute also auch, dass es sich um eine lokale Prozedur handelt.

Was allerdings funktioniert, ist dieses merkwürdige (uralte) Konstrukt:
Delphi-Quellcode:
unit Foo;

interface

implementation

uses
  Dialogs;

procedure Bar();
begin
  ShowMessage('Hallo, World!');
end;
begin // This should be read as 'initialization'
  Bar();
end.
  Mit Zitat antworten Zitat
BloodySmartie
(Gast)

n/a Beiträge
 
#8

Re: Komisches Sprachkonstrukt - zwei Rümpfe in Prozedur

  Alt 2. Jun 2008, 16:03
Also leider kann ich den Code noch nicht kompilieren, da der Quelltext unvollständig ist und mir die fehlenden Teile erst noch zugesandt werden.

Wenn man genau hinsieht, handelt es sich aber nicht um ein Compound Statement:

Delphi-Quellcode:
//Compound Statement:
procedure foo;
begin
  ...
    begin
      ...
    end;
  ...
end;

//Aber in meinem Fall sind die Blöcke nicht verschachtelt, sondern hintereinander angeordnet:
procedure bar;
begin
  ...
end;
begin
  ...
end;
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#9

Re: Komisches Sprachkonstrukt - zwei Rümpfe in Prozedur

  Alt 2. Jun 2008, 16:05
Zitat von gammatester:
Da ist doch nichts komisches dran. Wenn man will, kann man um jede Anweisung ein begin ... end setzen. Das sind keine zwei Rümpfe sondern compound statements.
Nein.
Zitat von Luckie:
Was er gemacht hat, ist seinen Code noch mals durch Blöcke zu gliedern. Wobei es auch eine zusätzliche Leerzeile getan hätte.
Auch nich.
Die Syntax einer Prozedur (Kopf, Deklaration, Rumpf) lässt doppelte Begin/End-Blöcke im Prozedurrumpf nicht zu.

Oder anders gefragt:
Bei wem kompiliert das:
Delphi-Quellcode:
Program Project2;

{$APPTYPE CONSOLE}

Procedure Outer;

Procedure Inner;
  Begin
    Writeln('Inner');
  End;

Begin
  Inner;
End;
// Zweiter Block
Begin
  Inner;
End;

Begin
  Outer;
End.
Bei mir jedenfalls nicht.
Ich tippe auch auf ein Fragment mit fehlendem (äußerem) Prozedurkopf.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Benutzerbild von nicodex
nicodex

Registriert seit: 2. Jan 2008
Ort: Darmstadt
286 Beiträge
 
Delphi 2007 Professional
 
#10

Re: Komisches Sprachkonstrukt - zwei Rümpfe in Prozedur

  Alt 2. Jun 2008, 16:10
Zitat von BloodySmartie:
Wenn man genau hinsieht, handelt es sich aber nicht um ein Compound Statement
Dadurch dass Create_Sales_Per_Wahl_And_Section_aus_Telemetrieda ten() im zweiten Block aufgerufen wird, liegt die Vermutung nahe, dass die Einrückung inkonsistent ist und es sich um eine lokale Funktion handelt.

In jedem Falle würde ich den-/diejenige(n) zu einer Entwickler-Schulung schicken (und den vorliegenden Quellcode als inakzeptabel einstufen).
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 18:47 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