Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Warum kompiliert Delphi diesen Codeabschnitt nicht??? (https://www.delphipraxis.net/8773-warum-kompiliert-delphi-diesen-codeabschnitt-nicht.html)

ustra 11. Sep 2003 18:12


Warum kompiliert Delphi diesen Codeabschnitt nicht???
 
Hallo,

folgende Codedeklaration(steht alles in einer Unit):

Delphi-Quellcode:
  type TSicherung = class(TObject)

     public
        procedure kontrolle;
     end;

  type TsicherungCad = class(TSicherung)

     public
       procedure kontrolle;
  end;

....

  procedure TSicherungCad.kontrolle;
  begin
      exit;
  end;

  procedure TSicherung.kontrolle;
  begin
    exit;
  end;
Wenn ich das Projekt kompiliere, wird keine Fehlermeldung ausgegeben, aber es wird nicht der Inhalt der Prozedur von TsicherungCad.kontrolle compiliert. irgendwie ignoriert der Compilier den Code. Ich erkenne es folgendermaßen: Wenn ich in der Zeile, wo exit steht, einen Haltepunkt setzen will, ist in dem roten Kreis ein gelbes Kreuz. Wenn es vom Kompilier erkannt wurde als auszuführenden Code, dann ist in Delphi 5 (benutze ich) immer noch ein blauer Punkt neben der Zeile, was hier nicht der Fall ist. Nun meine Frage, wie schaffe ich es, dass Delphi diesen Codeabschnitt kompiliert? Ich stehe vor einem Rätsel und kann es mir nicht erklären.

Beste Grüße und danke im voraus für Eure Hilfe
Ulrich

Luckie 11. Sep 2003 18:17

Re: Warum kompiliert Delphi diesen Codeabschnitt nicht???
 
Eventuell solltest du mal Code reinschreiben, der auch was macht. :roll:

ustra 11. Sep 2003 18:22

Re: Warum kompiliert Delphi diesen Codeabschnitt nicht???
 
Hallo,

es steht schon Code drin. Ich habe nur exit; reingeschrieben, damit es nicht zu unübersichtlich wird. Im Original sieht es so aus:

Delphi-Quellcode:
procedure TsicherungCad.kontrolle;
  begin
      if FindWindow(nil, 'CAD-Hauptprogramm') = 0
      then begin
        Sicherung.haupt_aktiv(false);
        Sicherung.sichern(sPfadLokal);
        if boNetz
        then
         Sicherung.sichern(sPfadNetz);
      end
      //Ansonsten warten, bis Cadkontrolle geschlossen ist
      else begin
        Sicherung.haupt_aktiv(true);
        TWarten.enabled:=true;
        SendStringTohandle(FindWindow(nil, 'CAD-Hauptprogramm'), 'Schließen');
      end;
  end;
Beste Grüße
Ulrich

Luckie 11. Sep 2003 18:38

Re: Warum kompiliert Delphi diesen Codeabschnitt nicht???
 
Wird der Code auch aufgerufen im Programm?

MSCH 11. Sep 2003 18:42

Re: Warum kompiliert Delphi diesen Codeabschnitt nicht???
 
Interessant wird, wenn wir die Stelle zu sehen bekommen, wo TSicherungCad.Controlle aufgerufen wird. Du deklarierst 2 Klassen mit ein und derselben Procedure ohne zu zu überschreiben etc.
Wo ist da der Sinn ?

Code der nicht aufgerufen wird, ignoriert der Linker. Dann funktioniert auch kein Breakpoint.

grez
msch

roderich 11. Sep 2003 18:44

Re: Warum kompiliert Delphi diesen Codeabschnitt nicht???
 
Du leitest TSicherungCad von TSicherung ab, welches schon eine Methode Kontrolle hat, und deklarierst in TSicherungCad dann nochmal diese Methode Kontrolle.

Fehlt Dir da nicht ein inherited oder reintroduce oder irgendsowas (aus dem Kopf) ??!?

Roderich

Chewie 11. Sep 2003 18:50

Re: Warum kompiliert Delphi diesen Codeabschnitt nicht???
 
Außerdem: Da nur ein Exit in der Prozedur drinne steht, könnte ich mir vorstelllen, dass die Codeoptimierung von Delphi dies entfernt, da es ja unnötig ist.

Luckie 11. Sep 2003 18:56

Re: Warum kompiliert Delphi diesen Codeabschnitt nicht???
 
@Chewie: Schon mal etwas weiter, als bis zum ersten Posting gelesen? :roll:

Chewie 11. Sep 2003 19:04

Re: Warum kompiliert Delphi diesen Codeabschnitt nicht???
 
Ja, hab ich, aber ich hab es so verstanden, dass er auch beim Testen nur Exit drinnehatte und das Exit nicht nur fürs Forum geschrieben hat.

ustra 11. Sep 2003 19:12

Re: Warum kompiliert Delphi diesen Codeabschnitt nicht???
 
Hallo,

vielleicht noch mal ein paar Sätze: Ich habe eine Klasse TSicherung mit verschiedenen Eigenschaften und Methoden (Bsp.: construktor, destruktor). Habe ich aber der Einfachheit hier nicht angegeben. Von dieser Klasse erzeuge ich weitere. TsicherungCad und TSicherungPHP sind weitere Klassen, die von TSicherung alle Methoden und Eigenaschften erben. Nun will ich bei den klassen TSicherungphp und TSicherungCad unterschiedlichen Code in der Prozedur kontrolle schreiben. Das will ich errreichen, in dem ich einfach die Prozedur bei den verschiedenen Klasen überschreibe. Ich habe in der Schule das auch mal so gemacht und da hat es funktioniert.

Beste Grüße und schönen Dank für die bisherige rege Beteiliung
Ulrich

PS: So sieht die Deklaration aus(diesmal nicht zensiert):

Delphi-Quellcode:
  type TSicherung = class(TObject)

     private
       LManuellDatum, LAutoDatumLetzte, LAutoDatumNaechste : TLabel;
       TAuto, TWarten : TTimer;
       App : TApplication;
       Sicherung : TKopieren;
       iInterval, iBereinigenInterval : integer;
       boNetz, boBereinigen : boolean;
       sPfadLokal, SPfadNetz, sTypart : string;
       procedure TAutoOnTimer(Sender : TObject);
       procedure SendStringToHandle(Wnd: Hwnd; const AText: string);
       procedure TWartenOnTimer (Sender : TObject);

     public
        constructor create (GStatus : TGauge; LDatei, LAutoLetzteDatum, LAutoNaechDatum, LManDatum : TLabel; Applicat : TApplication; Formular : TForm; Data : TDatabase; Query : TQuery; sTyp : string);
        destructor destroy;  
        procedure kontrolle;
        procedure sichern;
        procedure einstellungen_aktualisieren;
  end;

  type TsicherungCad = class(TSicherung)

     public
       procedure kontrolle;
  end;

 type TsicherungPHP = class(TSicherung)

     public
       procedure kontrolle;
  end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:43 Uhr.
Seite 1 von 3  1 23      

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