AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

nonVCL-Klasse

Ein Thema von CalganX · begonnen am 17. Feb 2004 · letzter Beitrag vom 18. Feb 2004
Antwort Antwort
CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#1

nonVCL-Klasse

  Alt 17. Feb 2004, 20:38
Hi,
ich versuche mir gerade die nonVCL-Programmierung zu vereinfach, darum schreibe ich gerade an einer Fensterklasse. Allerdings gibt es ein Problem: die im Demo-Projekt (siehe Anhang) vorhandene MessageBox wird zwar ausgegeben, allerdings bleibt das Fenster versteckt.

Ich habe das ganze mal angehängt, da das ganze zwei Units sind.

Chris
Angehängte Dateien
Dateityp: zip cnv_200.zip (2,6 KB, 19x aufgerufen)
  Mit Zitat antworten Zitat
neolithos

Registriert seit: 31. Jul 2003
Ort: Dresden
1.386 Beiträge
 
Delphi 7 Architect
 
#2

Re: nonVCL-Klasse

  Alt 17. Feb 2004, 21:54
Fehler Nr. 1:

In der DPR-Datei
Delphi-Quellcode:
  aDP.dwWndHeight := 100;
  aDP.dwWndWidth := 100;
Fehler Nr. 2 und 3. :

Delphi-Quellcode:
function TcnvWindow.Init(aDsgnParams: TcnvDsgnParams; aClassname: PAnsiChar): boolean;
// init the Window with the given Designparameters
begin
  Result := true;
  fDsgnParams := aDsgnParams; // <- Hier
  try
    self.fDsgnParams.szClassname := aClassName;

    fWndClass.cbSize := sizeof(TWndClassEx);
    if aDsgnParams.dwStyles <> 0 then
      fWndClass.style := fDsgnParams.dwWndStyles // <- Hier
Ich glaubhier habe ich auch etwas geändert

Delphi-Quellcode:
begin
  fWnd := CreateWindowEx(fDsgnParams.dwExStyles, fDsgnParams.szClassname, fDsgnParams.szWindowTitle,
    fDsgnParams.dwStyles, fDsgnParams.dwWndX, fDsgnParams.dwWndY,
    fDsgnParams.dwWndWidth, fDsgnParams.dwWndHeight, GetDesktopWindow, 0, hInstance, nil);
Ich würde TcnvDsgnParams genauer Dokumentieren und Definieren.
Ich hab da noch nicht ganz durchgesehen, welcher Parameter für was ist.
- ciao neo -
Es gibt niemals dumme Fragen, sondern nur dumme Antworten!
  Mit Zitat antworten Zitat
NicoDE
(Gast)

n/a Beiträge
 
#3

Re: nonVCL-Klasse

  Alt 18. Feb 2004, 00:20
Du hast im Init() zwar den Klassennamen kopiert aber nicht den Rest (ist also nicht initialisiert).
Es fehlt alsoself.fDsgnParams := aDsgnParams; Off-Topic:
- Der Code-Style ist sehr gewöhnungsbedürftig.
- Warum steht dort 'do not use', wenn es in der Demo benutzt wird?
- Angeforderte Ressourcen werden nicht wieder freigegeben.
- Fehlerbehandlung fehlt fast komplett...
z.B. sollte bei GetMessage() der Rückgabewert -1 abgefangen werden!
Delphi-Quellcode:
  while True do
    case Integer(GetMessage(Msg, HWND(0), 0, 0)) of
      0: // WM_QUIT
        begin
// ExitCode := Msg.wParam;
          Break;
        end;
      -1: // Error!
        begin
// ExitCode := -1;
          Break;
        end;
    else
      TranslateMessage(Msg);
      DispatchMessage(Msg);
    end;
Gruss Nico
  Mit Zitat antworten Zitat
CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: nonVCL-Klasse

  Alt 18. Feb 2004, 16:19
Hi,
@neolithos: okay. Danke.
Zitat von neolithos:
Delphi-Quellcode:
    if aDsgnParams.dwStyles <> 0 then
      fWndClass.style := fDsgnParams.dwWndStyles // <- Hier
Nein, das war schon richtig so! dwWndStyles ist für das CreateWindow. Und dwStyles ist für die Fensterklasse.

Zitat:
Ich würde TcnvDsgnParams genauer Dokumentieren und Definieren.
Ich hab da noch nicht ganz durchgesehen, welcher Parameter für was ist.
Klar, werde ich ja auch noch machen, aber ich habe gestern erst angefangen die Klasse zu schreiben. Und da ich alles versucht habe, um ein Fenster anzuzeigen und es dennoch nicht geklappt hatte, habe ich halt gefragt.

@Nico:
Zitat von NicoDE:
Du hast im Init() zwar den Klassennamen kopiert aber nicht den Rest (ist also nicht initialisiert).
Es fehlt also
self.fDsgnParams := aDsgnParams;
Jo, stimmt. Hatte neolithos ja schon bereits geschrieben. Allerdings wird jetzt nichtmal mehr die MessageBox ausgegeben...

Zitat:
Off-Topic:
- Der Code-Style ist sehr gewöhnungsbedürftig.
In wie fern und was meinst soll ich besser machen?

Zitat:
- Warum steht dort 'do not use', wenn es in der Demo benutzt wird?
Weil ich einen kleinen Fehler gemacht hatte und ich somit den Klassennamen über das record zuweisen konnte. Deswegen auch der Parameter. Danach habe ich das geändert und jetzt habe ich es so verändert, dass das wieder über das record geht. Ich hatte jedoch noch nicht die Kommentare überarbeitet. Zumal ich mit der Klasse erst gestern angefangen habe.

Zitat:
- Angeforderte Ressourcen werden nicht wieder freigegeben.
Noch.

Zitat:
- Fehlerbehandlung fehlt fast komplett...
Bis jetzt. Wie gesagt: ich habe gestern damit angefangen die Klasse zu schreiben und habe erstmal ein grobes Gerüst erstellt und deswegen ist noch nix drin. Ich bin ja dabei. Aber erstmal will ich ein Fenster sehen, damit ich weiß, dass alles funktioniert.

Zitat:
z.B. sollte bei GetMessage() der Rückgabewert -1 abgefangen werden!
Delphi-Quellcode:
  while True do
    case Integer(GetMessage(Msg, HWND(0), 0, 0)) of
      0: // WM_QUIT
        begin
// ExitCode := Msg.wParam;
          Break;
        end;
      -1: // Error!
        begin
// ExitCode := -1;
          Break;
        end;
    else
      TranslateMessage(Msg);
      DispatchMessage(Msg);
    end;
Okay, kann ich machen, aber das Problem wird damit ja nicht gelöst.

Chris
  Mit Zitat antworten Zitat
neolithos

Registriert seit: 31. Jul 2003
Ort: Dresden
1.386 Beiträge
 
Delphi 7 Architect
 
#5

Re: nonVCL-Klasse

  Alt 18. Feb 2004, 16:27
Schau dir noch mal genau den Record an

denn mit all den Änderungen hat es bei mir Funktioniert.

Soll ich dir mal meine Änderungen zuschicken. Vielleicht habe ich ja was vergessen!
- ciao neo -
Es gibt niemals dumme Fragen, sondern nur dumme Antworten!
  Mit Zitat antworten Zitat
CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: nonVCL-Klasse

  Alt 18. Feb 2004, 16:33
Hi,
jetzt gehts...
Ich hatte in der DPR-Datei noch was geändert, deswegen starte das Programm überhaupt nicht. Aber mit den Änderungen klappt es wunderbar, danke...

@Nico: dennoch würde es mich interessiert, warum du meinst mein Source hätte einen schlechten, sorry..., gewöhnungsbedürftigen Stil...

Chris
  Mit Zitat antworten Zitat
NicoDE
(Gast)

n/a Beiträge
 
#7

Re: nonVCL-Klasse

  Alt 18. Feb 2004, 17:08
Zitat von Chakotay1308:
dennoch würde es mich interessiert, warum du meinst mein Source hätte einen [...] gewöhnungsbedürftigen Stil
Ich hatte Mühe den Quelltext zu lesen.
Liegt wohl daran, dass sich viele an Borlands Object Pascal Style Guide orientieren. Hat den entscheidenden Vorteil, dass andere den Quelltext schneller lesen/verstehen können.


Gruss Nico
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 19:29 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