AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Newbee: VCL debuggen (Delphi7) und noch mehr Fragen...
Thema durchsuchen
Ansicht
Themen-Optionen

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

Ein Thema von Henryk · begonnen am 8. Jan 2003 · letzter Beitrag vom 11. Jan 2003
Antwort Antwort
Seite 1 von 2  1 2      
Henryk

Registriert seit: 8. Jan 2003
27 Beiträge
 
#1

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

  Alt 8. Jan 2003, 18:32
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
  Mit Zitat antworten Zitat
CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#2
  Alt 8. Jan 2003, 18: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
  Mit Zitat antworten Zitat
Benutzerbild von d3g
d3g

Registriert seit: 21. Jun 2002
602 Beiträge
 
#3
  Alt 8. Jan 2003, 18:39
Zitat von Chakotay1308:
Dafür musst du unter published die Eigenschaften schreiben (oder doch Public? )
published
-- Crucifixion?
-- Yes.
-- Good. Out of the door, line on the left, one cross each.
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#4
  Alt 8. Jan 2003, 18: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
[/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.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Henryk

Registriert seit: 8. Jan 2003
27 Beiträge
 
#5

Boah ey! Ihr seid aber schnell!!!

  Alt 8. Jan 2003, 19:29
Also bin grad nicht daheim, sondern noch auf Arbeit und debugge die MFC...

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 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...

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

Henryk
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#6
  Alt 8. Jan 2003, 22: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

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

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?
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von nailor
nailor

Registriert seit: 12. Dez 2002
Ort: Karlsruhe
1.989 Beiträge
 
#7
  Alt 8. Jan 2003, 22:20
Zitat:
- Die 1000 losgeloesten Fensterchen von Delphi. Ich find da nix wieder
So ein Mutterfenster wäre nicht schlecht...
Michael N.
http://nailor.devzero.de/code/sharpmath/testing/ --- Tests, Feedback, Anregungen, ... aller Art sehr willkommen!
::: don't try so hard - it'll happen for a reason :::
  Mit Zitat antworten Zitat
Henryk

Registriert seit: 8. Jan 2003
27 Beiträge
 
#8
  Alt 10. Jan 2003, 10:44
Boah, hatte gestern leider keine Zeit zum Antworten

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!

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
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
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#9
  Alt 10. Jan 2003, 15: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.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Henryk

Registriert seit: 8. Jan 2003
27 Beiträge
 
#10

Antwort

  Alt 10. Jan 2003, 16:07
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...

Henryk
  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 03:12 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