Autor Beitrag
matze
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 4613
Erhaltene Danke: 24

XP home, prof
Delphi 2009 Prof,
BeitragVerfasst: Mi 08.01.03 21:23 
was ist denn der vorteil, wenn man nonvcl coded ???

(speziell @ luckie :wink: )

man kann doch die kompos von delphi nicht wirlich benutzen oder ??

_________________
In the beginning was the word.
And the word was content-type: text/plain.
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 08.01.03 21:43 
Vorteile?

  • Kompakter Code
  • Kleine Exe (heute nicht mehr so von Bedeutung)
  • Verständnis für Windows entwickeln
  • kein Unnötiger Balast


Nachteile:

  • längere Entwicklungszeit
  • man kann mehr Fehler machen
  • man muß auf die Bequemlichkeit der VCL verzichten
  • viel Handarbeit
  • komplexere Projekte kaum, bis gar nicht realisierbar


Ich programmiere aber trotzdem gerne nonVCL, weil ich es nicht einsehe für ein kleines Tool aus einem Edit und einem Button gleich 400 kb zu verbraten. Desweiteren habe ich das Gefühl eine bessere Kontrolle über das Programm zu haben.[/list]
matze Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 4613
Erhaltene Danke: 24

XP home, prof
Delphi 2009 Prof,
BeitragVerfasst: Do 09.01.03 17:32 
alleine schon der akspekt, dass man keine kompos nutzen kann (INDY) wäre für mich schon ein K.O.-Argument !!!

_________________
In the beginning was the word.
And the word was content-type: text/plain.
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 09.01.03 17:34 
Wenn du Dialog-Ressourcen nutzt klicke ich dir dein Fenster innerhalb von 5 Minuten zusammen und bringe es innerhalb weiterer 2 - 3 Minuten zum Laufen. (Wenn man von den standard Windows-Komponenten ausgeht.)
matze Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 4613
Erhaltene Danke: 24

XP home, prof
Delphi 2009 Prof,
BeitragVerfasst: Do 09.01.03 17:38 
hää ?? was meinst du denn jetzt damit ?? ich check den kontext nicht wirklich

_________________
In the beginning was the word.
And the word was content-type: text/plain.
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 09.01.03 17:43 
Na wenn du alles per Code erstellst die Edits, Statics und Buttons, dann dauert es etwas länger und ist Arbeit, wenn du aber Dialog-Ressourcen nutz, also fertige Fenster aus einer Ressourcen-Datei, kannst du sie dir ganz schnell mit einem guten Ressourcen-Editor selber zusammenklicken. Windows fremde Kompos kann man damit natürlcih immer noch nicht nutzen, wie die Indy's, das ist klar.
Siehe meine Tutorials.
matze Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 4613
Erhaltene Danke: 24

XP home, prof
Delphi 2009 Prof,
BeitragVerfasst: Do 09.01.03 17:53 
aha, also unterm strich ist die VCL umgebung für grössere projekte doch die bessere

_________________
In the beginning was the word.
And the word was content-type: text/plain.
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 09.01.03 18:06 
Sicherlich. Zeit ist Geld und je kürzer die Entwicklungszeit um so besser. Es sei denn Speicherplatz spielt eine wichtige Rolle, was aber eher unwahrscheinlich isat heut zu Tage. Obwohl für Hintergrundanwendungen würde ich trotzdem noch nonVCL vorziehen. Immer 500 KB im Arbeitsspeicher nur um alle 5 Minuten die Mails zu checken...
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 10.01.03 09:07 
matze hat folgendes geschrieben:
alleine schon der akspekt, dass man keine kompos nutzen kann (INDY) wäre für mich schon ein K.O.-Argument !!!

Also, wenn man sich ein klein bisschen damit beschäftigt, kommt man auch ohne INDY-Komponenten gut weg. Der Hintergrund (das Protokoll) ist nämlich identisch, man muss also "nur" wissen, wie man zugreift.

Beispiele: PortScanner, hier in diesem Forum. Dann hatte Luckie mal einen NonVCL-Chat geschrieben. Na ja, und meine letzten Versuche, einen POP3-Server auf Mails zu prüfen, waren auch von Erfolg gekrönt. :) Und Burgpflanze würde dir zeigen können, wie man die Zeit von einem Time-Server holt und sein System entsprechend umstellt ...
Popov
Gast
Erhaltene Danke: 1



BeitragVerfasst: Fr 10.01.03 11:02 
Luckie hat folgendes geschrieben:
Vorteile?

  • Kompakter Code
  • ...


Bei allen Punkten gebe ich dir recht, aber kompakter Code? Das glaube ich nicht.
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 10.01.03 11:36 
Hm, kann ich selber nicht näher bestimmen, was ich damit meine. Ist eher ein Gefühl oder so was.
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 10.01.03 11:51 
Na ja, im weiteren Sinne vielleicht.
Kompakterer Code zählt wohl mit zum Punkt:
  • Kleine Exe (heute nicht mehr so von Bedeutung)

Auch wenn´s manche Leute nicht glauben wollen, es macht einen Unterschied ob man die "SysUtils.pas" einbindet oder nur die benötigten Funktionen benutzt. Das gleiche gilt für die "Registry.pas". Am schlimmsten ist aber das Monster "Dialogs.pas", die das Programm gleich um ein paar 100k aufbläst.
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 10.01.03 11:54 
Kompakter Code eventuell auch so:
Ich sehe alles was den Ablauf meines Programmes bestimmt, nichts ist in Komponenten und dcu's versteckt, wa sich selber im normal fall nie zu sehen bekomme.
Wolff68
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 302
Erhaltene Danke: 1

WinXP home
D6 Prof
BeitragVerfasst: Fr 10.01.03 17:11 
Luckie hat folgendes geschrieben:
Ich sehe alles was den Ablauf meines Programmes bestimmt, nichts ist in Komponenten und dcu's versteckt, wa sich selber im normal fall nie zu sehen bekomme.

Du meinst also eher Durchschaubar als Kompakt.

Was ich durchaus für einen wichtigen Punkt halte.
Man hat alle Funktionen des Programmes im eigenen Zugriff.
Nicht immer das Rätselraten:
- Was macht die Komponente eigentlich?
- Muß ich auf was achten?
- Die eine will 'nen String, die andere PChar..
- Die nächste nimmt die Variablen var entgegen, die andere lässt den Grundwert unverändert...
- Wohin kommt die Rückmeldung?
- Welche Fehlermeldungen werden von der Kompo eventuell angezeigt? (Und in welcher Sprache?)
- und und und.
(Ich sprech hier auch von Freeware-Komponenten)

Klar machen die Komponenten und Funktionen das Leben einfacher.
Ich komm mir selber ohne VCL irgendwie nackt und hilflos vor.
Aber genauso könnt ich manchmal kotzen wenn ich mein Programm auf eine (womöglich auch noch schlecht dokumentierte) Komponente hin maßschneidern muß.

Für mich der größte Vorteil ist die Ressourcenschonung und die Geschwindigkeit.
Auch wenn die Rechner immer schneller werden.
Die Leute lassen auch immer mehr Programme im Hintergrund laufen
( Ups,... Grad mal neben meine Uhr geschaut :shock: )

_________________
"Der Mensch ist nicht was er sich vorstellt oder wünscht zu sein, sondern das was andere in ihm sehen."
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 10.01.03 20:08 
Wolff68 hat folgendes geschrieben:

Du meinst also eher Durchschaubar als Kompakt.

Ja das ist wohl etwas besser ausgedrückt.
Zitat:

( Ups,... Grad mal neben meine Uhr geschaut :shock: )

Noch gefunden? :mrgreen:
Wolff68
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 302
Erhaltene Danke: 1

WinXP home
D6 Prof
BeitragVerfasst: Fr 10.01.03 20:33 
Zitat:
Noch gefunden?

Klar doch. Meine Uhr find ich immer.
Einfach unten die vielen hübschen Bildchen anschauen.
Und wenn man damit fertig ist ist man bei der Uhr. :lol:

_________________
"Der Mensch ist nicht was er sich vorstellt oder wünscht zu sein, sondern das was andere in ihm sehen."
maestro
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Sa 11.01.03 12:20 
Hallo,
ich sehe in der Non-VCL-Programmierung eigentlich überhaupt keinen Vorteil:
Luckie hat folgendes geschrieben:

Kompakter Code
Kleine Exe (heute nicht mehr so von Bedeutung)

Wie schon dabei steht: Speilt heute bei zig-GB-Platten keine Rolle mehr.

Zitat:
Verständnis für Windows entwickeln

Das ist aber auch nur ein Verständnis für die Win32-API, die mit Einführung des .NET-Framework zum alten Eisen gehört und früher oder später keine Rolle mehr spielt.

Zitat:
kein Unnötiger Balast

Ballast für wen? Für den Programmierer ist es doch wohl eher Ballast, wenn er auf die Vorteile der RAD-Programmierung verzichten muss.
Non-VCL-Programmierung entspricht ja eigentlich dem, was mit Turbo Pascal für Windows ein gigantischer Flop war...

Die genannten Nachteile wiegen für mich dagegen um so stärker, insbesondere "Entwicklungszeit" (teuer!), Fehleranfälligkeit (ebenfalls teuer wg. Debugging). NonVCL ist also eigentlich nur eine Spielerei für Leute, die sonst nichts zu tun haben. Ich würde mich in der Zeit z.B. lieber mit dem Aufbau der .NET-Klassenbibliotheken beschäftigen. Das wird das Programmieren unter .NET erleichtern und ist zukuntssicherer, als so viel Energie in alte Technologien zu investieren...

Ist aber nur meine Meinung :-)
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 11.01.03 13:33 
maestro hat folgendes geschrieben:
NonVCL ist also eigentlich nur eine Spielerei für Leute, die sonst nichts zu tun haben.

Wo er recht hat, hat er recht. :mrgreen:

Ernsthaft: ich denke, es ist einfach eine Interessensfrage. Jeder nimmt den Weg, auf dem er am schnellsten vorwärts kommt. Und bei größeren Projekten wäre man verrückt, wollte man auf die Vorteile der VCL verzichten. Luckie hat bereits einen (wie ich finde: guten) Grund für NonVCL genannt:
Luckie hat folgendes geschrieben:
Ich programmiere aber trotzdem gerne nonVCL, weil ich es nicht einsehe für ein kleines Tool aus einem Edit und einem Button gleich 400 kb zu verbraten.

Wenn ich z.B. an den MailWatcher von Alex (in der DP) denke: das Programm besteht aus einem TNA-Symbol, einem Popupmenü, einem Timer und einer POP3-Komponente. Das Formular ist kurz als Splash-Screen sichtbar und verschwindet dann. In einem einstellbaren Intervall verbindet sich das Programm mit einem POP3-Server und prüft, ob Mails vorhanden sind. Der User hat dann die Möglichkeit, sein Email-Programm zu starten und die Post zu holen.
Dieses kleine (im Sinn von: wenig umfangreich) Tool ist nun unkomprimiert etwas mehr als 500k groß. Bitte nicht falsch verstehen! Ich respektiere, dass sich Alex für die VCL entschieden hat, und ich würde ihm deshalb nie einen Vorwurf machen.

Aber - mein persönliches Interesse kommt ins Spiel, und ich frage mich: hey, das muss man doch auch kleiner hinbekommen. Und Ja: man bekommt es auch kleiner hin. :)

Noch ein Punkt -
Als Admin hatte ich früher immer eine Diskette in der Tasche, auf der ein paar selbst geschriebene Tools drauf waren, die ich öfter brauchte. Ist ja einzusehen, wg. 400k wird man den Brenner nicht anwerfen und eine neue CD-ROM beginnen. (Sollte man auch nicht.)
Angenommen, deine Tools haben alle diesen Umfang, dann bekommst du bestenfalls 3 davon auf eine 1,44meg-Floppy. Wenn du sie mit UPX um die Hälfte verkleinern kannst, dann passen sogar gute 7 Stück drauf. Und jetzt rechne aus, wieviel solcher kleinen Tools auf eine Floppy passen, wenn sie max. 30k groß sind ... :)


Aber, wie du auch schon richtig sagtest: das ist alles nur subjektiv. Es ist für mich ein bisschen wie "IE vs. alle anderen Browser" ... :wink: Da gibt´s auch Leute, die stundenlang streiten (wollen) und sagen: jeder Browser ist besser als der IE. Dass ich das nicht abstreite, begreifen manche gar nicht, und da klinke ich mich dann irgendwann aus ...

Deswegen nenne ich auch jetzt nur die Vorteile, die ich persönlich sehe, sowie die Begründung, warum ich auch gern mal ohne die VCL programmiere. Und das war´s.


Auf einen Kritikpunkt möchte ich allerdings eingehen:
Zitat:
Fehleranfälligkeit (ebenfalls teuer wg. Debugging).

Das stimmt nicht. Das liegt nicht an NonVCL sondern schlichtweg am Programmierer. Du brauchst dich hier nur im Forum umzusehen und du wirst haufenweise schlechte Beispiele finden, in denen sich kein Mensch um Sicherheit kümmert. Beispiel: Registry. Schon oft gesehen:
ausblenden Quelltext
1:
2:
3:
4:
5:
reg := Tregistry.create;
reg.RootKey := HKEY_LOCAL_MACHINE;
reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Run',true);
reg.WriteString('Ich',paramstr(0));
reg.Free;

Zugegeben, ich hab´ übertrieben. Aber hier kracht´s u.U. mehrfach ... Bitte aufzählen wann und wo, wenn du möchtest. :wink:
maestro
Hält's aus hier
Beiträge: 5



BeitragVerfasst: So 12.01.03 16:40 
MathiasSimmack hat folgendes geschrieben:
Als Admin hatte ich früher immer eine Diskette in der Tasche, auf der ein paar selbst geschriebene Tools drauf waren, die ich öfter brauchte. Ist ja einzusehen, wg. 400k wird man den Brenner nicht anwerfen und eine neue CD-ROM beginnen. (Sollte man auch nicht.)

Ist klar. Aber dafür gibt es inzwischen Memory-Sticks, Intel will schließlich die Diskettenlaufwerke abschaffen :)

Zitat:
Auf einen Kritikpunkt möchte ich allerdings eingehen:
Zitat:
Fehleranfälligkeit (ebenfalls teuer wg. Debugging).

Das stimmt nicht. Das liegt nicht an NonVCL sondern schlichtweg am Programmierer.

Das ist schon klar. Aber je mehr man sich als Programmierer auf die Fertigteile (sprich VCL) von Borland verlässt, destoweniger Möglichkeiten hat man, eigene Fehler einzubauen. Beispiel: Wenn ich ein Fenster komplett über API-Befehle erzeuge, kann ich bestimmt mehr Fehler machen, als wenn ich in Delphi Datei/Neu/Formular anklicke...

Zitat:
Zugegeben, ich hab´ übertrieben. Aber hier kracht´s u.U. mehrfach ... Bitte aufzählen wann und wo, wenn du möchtest.

Ich weiß zwar nicht, was der Sinn des Beispiels sein soll. Aber spontan fällt mir auf, dass hier ein Ressourcenschutzblock fehlt und unter NT-Systemen ohne Admin-Rechte nicht auf HKLM zugegriffen werden kann.
Und wie würde man diesen Code ohne Verwendung der VCL mit reinen Win32-API-Befehlen schreiben? Hat man da nicht die gleichen (oder gar mehr) Möglichkeiten, Fehler einzubauen?
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 12.01.03 19:04 
maestro hat folgendes geschrieben:
Beispiel: Wenn ich ein Fenster komplett über API-Befehle erzeuge, kann ich bestimmt mehr Fehler machen, als wenn ich in Delphi Datei/Neu/Formular anklicke...

Auf der anderen Seite musst du dich darauf verlassen, dass Borland bzw. Entwickler anderer Komponenten keine derben Fehler eingebaut haben.

Zitat:
Ich weiß zwar nicht, was der Sinn des Beispiels sein soll. Aber spontan fällt mir auf, dass hier ein Ressourcenschutzblock fehlt und unter NT-Systemen ohne Admin-Rechte nicht auf HKLM zugegriffen werden kann.

Na ja, der Sinn ... es war nur ein Beispiel. Aber ganz so an den Haaren herbeigezogen war´s auch nicht, denn erst heute entdeckte ich so etwas ähnliches in der Internet-Sparte.
Weitere Schwachpunkte: wenn aus irgendeinem widrigen Grund der Schlüssel nicht geöffnet werden kann, kannst du logischerweise auch keinen Wert dort drin ablegen. IMHO fehlt die Bool-Prüfung
ausblenden Quelltext
1:
if OpenKey('...',true) then					

Und u. ungünstigen Umständen klappt auch das Schreiben des Wertes nicht, so dass "WriteString" eine Exception auslöst. Aber die dürfte vom, von dir erwähnten Ressourcenschutzblock abgedeckt werden (wenn er da wäre). Wer ganz sicher gehen will, kann ja auch
ausblenden Quelltext
1:
2:
3:
4:
5:
if OpenKey('...',true) then try
  { ... }
finally
  CloseKey;
end;

schreiben. "CloseKey" fehlte übrigens auch.

Zitat:
Und wie würde man diesen Code ohne Verwendung der VCL mit reinen Win32-API-Befehlen schreiben? Hat man da nicht die gleichen (oder gar mehr) Möglichkeiten, Fehler einzubauen?

Ja, die Möglichkeit hat man :wink:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
var
  reg : HKEY;
  res : integer;

{ ... }

if(RegCreateKeyEx(HKEY_LOCAL_MACHINE,  'Software\Microsoft\Windows\CurrentVersion\Run',
  0,nil,0,KEY_READ or KEY_WRITE,reg,nil) = ERROR_SUCCESS) then
try
  res := RegSetValueEx(reg,'Ich',0,REG_SZ,
    @paramstr(0)[1],length(paramstr(0)));

  if(res <> ERROR_SUCCESS) then
    MessageBox(0,'Och nö!',nil,0);
finally
  RegCloseKey(reg);
end;