Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Newbee: VCL debuggen (Delphi7) und noch mehr Fragen... (https://www.delphipraxis.net/2140-newbee-vcl-debuggen-delphi7-und-noch-mehr-fragen.html)

Henryk 8. Jan 2003 17:32


Newbee: VCL debuggen (Delphi7) und noch mehr Fragen...
 
Tach Jungens!

Bin erst seit kurzer Zeit Delphi-Programmierer. Beruflich sonst immer C,C++,MFC.

Folgende Probleme bekomm ich bei Delphi nicht geregelt:

1. Wie debugge ich in die VCL (Delphi7)?
Ich hab es nur hinbekommen, wenn ich die VCL-Source-Dateien mit kompiliere. Nur das dauert einfach ewig. Die debug-DCUs liegen ja rum, aber mein Delphi nimmt die nich. Wo ist der magische Button?

2. Application.CreateForm(...)
Hab ein paar Formulare, die beim Start mit Application.CreateForm(TMyFrame, GlobalFrame) oder so aehnlich erzeugt werden. Den Namen der Variablen hab ich so angepasst. Fasse ich die Projektdatei spaeter an, macht Delphi daraus Application.CreateForm(TGlobalMyFrame, GlobalFrame). Datt nervt. In der Obefläche, wo ich die Frames zusammenklicken kann, die beim Programmstart erzeugt werden sollen, kann ich das nicht anpassen...

3. TDataModule
Ich hab eine TMyDataModule-Klasse abgeleitet von TDataModule und paar properties ergaenzt. Im Code funktionieren die, aber der Objektinspektor zeigt die nicht an. Wieso datt denn?

Danke an euch!

Henryk

CalganX 8. Jan 2003 17:37

Hi,

Zu 1.: Guck mal unter >>Project<< -> >>Syntax check Project1<<
Zu 3.: Dafür musst du unter published die Eigenschaften schreiben (oder doch Public? :-? )

Chris

d3g 8. Jan 2003 17:39

Zitat:

Zitat von Chakotay1308
Dafür musst du unter published die Eigenschaften schreiben (oder doch Public? :-? )

published ;-)

Christian Seehase 8. Jan 2003 17:44

Moin Henryk,

erst einmal herzlich willkommen.

zu 1.
Mal in der Annahmen, dass sich da in den Menüs nichts so Wesentliches getan hat:
Projekt/Optionen/Compiler

Hier sollte sich eine CheckBox "mit Debug DCUs" befinden.

zu 2.
Wo hast Du was angepasst?
Hast Du die Namen von Hand im Sourcecode angepasst, oder im Objekt Inspektor.
Ich vermute mal ersteres, denn von dem Problem, dass Du da schilderst hab' ich bislang noch nichts gehört.

3. [EDIT]
Ich sollte doch mal sorgfältiger lesen :? :mrgreen:
[/EDIT]

Was ich mir jetzt allerdings als kleinen Kommentar nicht verkneifen kann:
Zitat:

...wenn ich die VCL-Source-Dateien mit kompiliere. Nur das dauert einfach ewig.
Vor kurzem musste ich mal anfange mich mit dem Visual Studio zu beschäftigen (allerdings C#).
Nachdem ich dann mal ein äusserst simples MFC Projekt probiert habe (leeres Formular) mit statischer Bindung der DLLs, und das Kompilieren 8 Minuten gedauert hatte (bei dynamischer Bindung 4) würde ich mal sagen:
Lange Kompilierzeiten müsstest Du doch gewohnt sein. ;-)

Henryk 8. Jan 2003 18:29

Boah ey! Ihr seid aber schnell!!!
 
Also bin grad nicht daheim, sondern noch auf Arbeit und debugge die MFC... :wink:

Zu 1. Ich schau heut abend mal...

Zu 2. Ja die Namen hab ich selbst angepasst. Die Frames, die gleich beim Application-Start angelegt werden sollen, sind ja globale Variablen bei mir im Projekt. Sowas hab ich sonst nicht (oder selten) und deshalb hab ich da Global davorgehangen. also die Variable selbst wird ja in der Frame-Unit angelegt und mit Application.CreateForm() dann nur gefüllt. Rein Syntax-maessig funktioniert das auch alles. Nur Delphi ändert mir jedesmal den Klassennamen in dem CreateForm-Aufruf in T+Variablennamen.

Zu 3. Hab die Properties schoen unter published geschrieben. Trotzdem nix. Habs analog zu anderen Klassen gemacht.

Haha, auf einen Kommentar in Richtung VC hab ich nur gewartet :wink: Wenn ich jetzt meinen Frust der ersten Tage bei Delphi ablasse, schmeisst ihr mich wieder raus...

Ok ein paar Dinge kann ich mir nicht verkneifen:
- Die 1000 losgeloesten Fensterchen von Delphi. Ich find da nix wieder
- der Degugger (Eigenschaften von Objekten)
- Warum sind die interessanten Funktionen in den Klassen alle private?
- Die Exceptions kommen immer aus dem Nirvana und ich seh nicht woher genau.
- Frames in Frames: Man aendert den Subframe und danach schmiert der Objektinspektor beim Hauptframe ab
- Wieso unterstuetzen die Standard-Controls nicht alle win-API Funktionen? (z.B. Checkboxen wie Buttons mit BS_PUSHBUTTON oder Edit-Felder mit rightalign)

Naja, nobody is perfect... :lol:

PS: Also VC6 kompiliert leider zu schnell. Reicht nicht fuern Kaffee zwischendurch... :wink:

Henryk

Christian Seehase 8. Jan 2003 21:13

Moin Henryk,

na, das klingt für mich so als wären die Frames immer noch buggy :?

Über so manche fehlenden oder eigenwilligen Implementierungen hab' ich mich auch schon geärgert. Und ich glaube, da bin ich nicht der einzige ;-)

Delphi-Quellcode:
Warum sind die interessanten Funktionen in den Klassen alle private?
Hättest Du dafür mal ein Beispiel?
Würde mich mal interessieren.

Delphi-Quellcode:
Nur Delphi ändert mir jedesmal den Klassennamen in dem CreateForm-Aufruf in T+Variablennamen.
Also ich kenne das so, dass man den Namen der Kompo ändert, und die Variable dann den Namen der Kompo ohne das T bekommt.

Das published Properties nicht im OI angezeigt werden ist allerdings seltsam. Werden nur Deine nicht angezeigt, oder alle?

nailor 8. Jan 2003 21:20

Zitat:

- Die 1000 losgeloesten Fensterchen von Delphi. Ich find da nix wieder
So ein Mutterfenster wäre nicht schlecht...

Henryk 10. Jan 2003 09:44

Boah, hatte gestern leider keine Zeit zum Antworten :cry:

Zu 1. Wie debugge ich in die VCL (Delphi7)?
Also "Use Debug DCUs" hab ich an. Trotzdem geht's nich. Wenn ich "Build with runtime packages" ausschalte, werden alle VCL Source-Dateien mitkompiliert (kein Spass auf nem 500MHz Pentium) un dann kann ich natuerlich die VCL debuggen. Das muss aber auch anders gehen, oder?

Zu 2. Application.CreateForm(...)
Ich bin zu stolz, mich von Delphi bevormunden zu lassen! :wink:

Also hier mal ein Beispiel einer Frame-Datei
Delphi-Quellcode:
type
  TMyFrame = class(TFrame)
  ...
  end;

var
 {hier steht normalerweise MyFrame: TMyFrame.
  Ich hab das aber umbenant in GlobalFrame}
  GlobalFrame: TMyFrame;
implementation
In der Projekt-Datei steht dann
Delphi-Quellcode:
{hier steht normalerweise Application.CreateForm(TMyFrame, MyFrame);} 
Application.CreateForm(TMyFrame, GlobalFrame);
So und wenn ich jetzt in die Projektdatei gehe macht Delphi ab und zu mal
Delphi-Quellcode:
Application.CreateForm(TGlobalFrame, GlobalFrame);
Wie kann ich diesen Automatismus umgehen oder muss ich mich Delphi beugen?

Zu 3. TDataModule
Standardmaessig hat das abgeleitete TDataModule keine properties. Aber es ist ja eine grafische Komponente und wird im Objektinspektor angezeigt. Spielt es irgendeine Sonderrolle???

Delphi-Quellcode:
type
  TMyDataModule = class(TDataModule)
  protected
    m_ItemList: TStringList;
  published
    property ItemList: TStringList read m_ItemList write m_ItemList;
  end;
Ich hab auch im Netz nix dazu gefunden. Wuere aber gern die Stringliste im Objektinspektor bearbeiten koennen.

Zu Warum sind die interessanten Funktionen in den Klassen alle private?
Also ich musste TDBGrid, TDBNavigator und TDBComboBox aufbohren. Eigentlich haette ich meist nur paar Set-/Get-Funktionen der Properties anpassen bzw. an die FDataLink-Variable rankommen muessen. Aber diese Funktionen sind alle private. Es sei denn man leitet von TCustom... ab. Aber dann muss ich die ganze erweiterte Funktionalitaet des Controls neu programmieren. Also hab ich jedesmal ne Klasse machen muessen, wo ich eigentlich nur den Quellcode von z.B. TDBGrid reinkopiert und 3 Zeilen geaendert hab...

Komische Philosophie von Delphi...


Henryk, der so langsam mit Delphi klar kommt :wink:

Christian Seehase 10. Jan 2003 14:11

Moin Henryk,

nochmal zu 2.
Hast Du den Namen im Objektinspektor geändert, oder manuell in der Unit?
Im ersteren Falle dürfte das beschriebene Problem eigentlich nicht auftauchen.

Zu 3.
Deklariere die m_ItemList mal als TStrings und nicht als TStringList, ich denke dann sollte es funktionieren.
Wenn ja, ich hab's jetzt nicht ausprobiert, gehe aber davon aus, wird der Stringlist Editor nur aufgerufen, wenn der Typ die Basisklasse ist, und keine abgeleitete, wie TStringList.
Sinn der Sache ist dann einfach, was Du aber wahrscheinlich weisst, das man dann als ItemList alle von TStrings abgeleiteten Typen als Parameter übergeben kann, und nicht nur TStringList, oder deren Ableitungen.
Das mit den privaten Get/Set Methoden ist natürlich ärgerlich, auch wenn die Custom Varianten eigentlich zum eigenen Ergänzen gedacht sind.
Da scheinen verschieden Entwickler verschiedene Ideen gehabt zu haben, denn das ist nicht bei allen Klassen der Fall, bei manchen stehen diese Methoden unter protected.

Henryk 10. Jan 2003 15:07

Antwort
 
Hallo Chris

Boah, baue grad nebenbei ne Ikea-Schrankwand auf und muss nachher zum Kunden. Deshalb nur kurz:

Zu 2.
Wenn man den Frame in den Inspektor nimmt und aendert dort den Namen in GlobalFrame (grad probiert), dann wird automatisch auch die Klasse in TGlobalFrame umbenannt.

Wenn ich auf Options -> Forms gehe kann ich nur die Forms auswaehlen, aber keine Variablennamen setzen.

Delphi scheint also nur zuzulassen, dass MyFrame = class (TMyFrame) und Application.CreateForm(TMyFrame, MyFrame) gilt...

Gut, muss ich mit leben...

Zu 3.
Also TStrings ist abstrakt. Die Variable selbst muss also TStringList sein. Aber als Property kann ich natuerlich TStrings zurueckgeben. Hab ich eben schnell probiert. Aber geht auch nicht. Ich hab ja auch noch andere Variablen als Properties (String, TIniFile etc.) Geht bei allen nicht!

Es gibt nur 3 Properties obwohl die gar nicht bei published stehen:
- Name
- OldCreaterder
- Tag

So, ich muss wieder den Akkuschrauber quaelen... :wink:

Henryk


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:10 Uhr.
Seite 1 von 2  1 2      

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