Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Fenster erstellen mit TP für Windows? (https://www.delphipraxis.net/55159-fenster-erstellen-mit-tp-fuer-windows.html)

Rastaman 17. Okt 2005 14:44


Fenster erstellen mit TP für Windows?
 
Moin. Hab da n kleines Problem, und zwar wollt ich mit Turbo Pascal für Windows n Fenster erstellen.
Soweit so gut, es wird kompiliert, aber beim Ausführen sagt er, dass die EXE eine Schutzverletzung bei 0001:0033 ausgelöst hätte :wall:
So hab ichs gemacht:

Delphi-Quellcode:
program APPNAME;

uses
  WinCrt, WinProcs, WinTypes;

var

  WndClass: TWndClass;
  msg: TMSG;

function WNDPROC(hwnd: HWND; uMsg, wParam: WORD; lParam: LongInt): LongInt;
begin
  WNDPROC := DefWindowProc(hwnd, uMsg, wParam, lParam);
end;
begin

  WndClass.style := CS_OWNDC;
  WndClass.lpfnWndProc := @WNDPROC;
  WndClass.cbClsExtra := 0;
  WndClass.cbWndExtra := 0;
  WndClass.hInstance := hInstance;
  WndClass.hIcon := 0;
  WndClass.hCursor := LoadCursor(hInstance, IDC_ARROW);
  WndClass.hbrBackground := COLOR_WINDOW;
  WndClass.lpszMenuName := nil;
  WndClass.lpszClassName := 'WndClass';
  RegisterClass(WndClass);


  CreateWindowEx(WS_EX_DLGMODALFRAME, 'WndClass',
                 'Bruchrechnen',
                 WS_VISIBLE or WS_CAPTION or WS_SYSMENU,
                 0, 0,    
                 500, 500,
                 0, 0, hInstance, nil);
  while True do
  begin
    if not GetMessage(msg, 0, 0, 0) then
      exit;
    TranslateMessage(msg);
    DispatchMessage(msg);
  end;
end.
stdcall gibts bei Turbopascal nicht :wall:

Rastaman 17. Okt 2005 17:37

Re: Fenster erstellen mit TP für Windows?
 
Naja gut, ich habs geschafft n Button in die Konsole zu pflanzen, das is ja auch schon was :mrgreen:
Allerdings hab ich jetz kp wie ich auf die Ereignisse reagieren soll :wall:

//Edit: Hier ma der Code:

Delphi-Quellcode:
program bla;
uses WinCrt, WinProcs, WinTypes;
var
  wnd, wnd2: HWND;
begin
  wnd := FindWindow('TPWinCrt', nil);
  wnd2 := CreateWindow('EDIT', ':D',
                       WS_CHILD or WS_VISIBLE
                       or WS_BORDER or ES_MULTILINE,
                       20, 20, 60, 60,
                       wnd, 4, hInstance, nil);
  ReadLn;
  SendMessage(wnd2, WM_SETTEXT, 0, Integer(PChar('HALLO')));
  ReadLn;
end.
Das Edit wird auch auf der Konsole erstellt, aber WM_SETTEXT funktioniert nicht :?

Rastaman 19. Okt 2005 15:17

Re: Fenster erstellen mit TP für Windows?
 
Ich denk ma darauf weiß eh keiner ne Antwort, aber n letzter Versuch: *PUSH* :duck:

franktron 19. Okt 2005 15:23

Re: Fenster erstellen mit TP für Windows?
 
Prinzipel genau wie in Delphi du must nur die ereignisse abfragen such mal hier im Forum da müsste was zu finden sein wie man Nachrichten abfangen und auswerten kann

Rastaman 19. Okt 2005 15:39

Re: Fenster erstellen mit TP für Windows?
 
Zitat:

Zitat von franktron
Prinzipel genau wie in Delphi du must nur die ereignisse abfragen such mal hier im Forum da müsste was zu finden sein wie man Nachrichten abfangen und auswerten kann

:shock:
Es geht doch nicht ums Ereigniss auswerten, das würde ja in die WNDPROC Funktion kommen, aber ich denk mal da haperts.
Wie gesagt: Compilieren: Ja, Ausführen: Nein...Fehler s.o
Es geht ums erstellen und nicht darum was auszuwerten, das ist erstmal zweitranging.

//Edit: Ich denke ich könnte die Turbopascal Version anhängen an den Post, oder :gruebel:
Ich meine mich entsinnen zu können, dass mein Lehrer gesagt hat, dass die Version so veraltet ist, dass sie kostenlos ist.
Ist ja auch im Netz nirgends zu finden (nichtmal Borland.de). Also ich will mir lieber die Bestätigung der Mods vorher holen, bevor ich das anhänge.

Sharky 19. Okt 2005 16:16

Re: Fenster erstellen mit TP für Windows?
 
Zitat:

Zitat von Rastaman
...Ich meine mich entsinnen zu können, dass mein Lehrer gesagt hat, dass die Version so veraltet ist, dass sie kostenlos ist.

Hai Rastaman,

sage deinem Lehrer mal einen lieben Gruß. Er sollte sich gerade als Lehrer erst informieren bevor er solche Dinge von sich gibt ;-)
Nur weil ein Programm alt ist bedeutet es nicht das die Lizenzverträge nicht mehr gültig sind.
Soweit ich weiss gibt es bei Borland "nur" TurboPascal 5.5 kostenlos zum Downloaden.

Luckie 19. Okt 2005 17:17

Re: Fenster erstellen mit TP für Windows?
 
Guck dir mal meine nonVCL Tutorials an: http://delphitutorials.luckie-online.de

Rastaman 19. Okt 2005 18:06

Re: Fenster erstellen mit TP für Windows?
 
Die hast du mir ja schon des öfteren ans Herz gelegt :zwinker:
Leider funktioniert das so in TPW nicht. Es gibt keine Windows und keine Messages Unit.
Die Units heissen WinCrt (Für Text Ein- /Ausgabe, muss sein sonst geht Programm sowieso sofort aus), WinProcs und WinTypes.
Er kennt auch TWndClassEx nicht, deswegen musses TWndClass sein.
Genau so mit CreateWindowEx und FindWindowEx (Findwindow is ja irrelevant, ich sags nur so :)).
Auch wParam und lParam gibt es nicht, deswegen habe ich es ja schon nach der Turbopascal Hilfe so umgeschrieben.
Normalerweise benutzt man ja stdcall hinter der Funktion, aber das gibt es bei Turbopascal nicht.
Es wird eben auch vernünftig kompiliert, aber beim Start dann halt... :(
Ist wie als würd man stdcall nicht einbinden bei Delphi.

//BTW: Ich hab ja auch schon Buttons, Edits etc. auf dem Konsolenfenster erstellen können, weil ich den Namen
der Fensterklasse zu Hause nachgeguggt habe (TPWinCrt), nur halt...wie soll man ohne das Hauptfenster auf Aktionen reagieren :gruebel:

jbg 19. Okt 2005 18:22

Re: Fenster erstellen mit TP für Windows?
 
Zitat:

Zitat von Rastaman
Normalerweise benutzt man ja stdcall hinter der Funktion, aber das gibt es bei Turbopascal nicht.

In TurboPascal gab es kein register als wird, wie der Programmiersprachennamen bereits preisgibt, die Aufrufart pascal benutzt, die dem stdcall entspricht.

Es ist zwar schon eine ganze Weile her, dass ich ein Win16 Programm geschrieben habe, aber gibt es da nicht sowas wie callback (oder war das BC++ ?)
Aber die WndProc muss auf alle mit far gekennzeichnet werden (ansonsten kennzeichnet TP sie mit Near).

Rastaman 19. Okt 2005 18:30

Re: Fenster erstellen mit TP für Windows?
 
YOU ARE THE MAN :mrgreen: :thumb:
Perfekt, bestens, SUPA !!
Funzt alles. Hatte vorher schon versucht virtual und all son Kram dran zu hänge, aber das hat nich geklappt :mrgreen:

//Edit: Is ja der Hammer, nich mal die Konsole wird angezeigt ... :hello: :dp:

Traudix 19. Okt 2005 18:54

Re: Fenster erstellen mit TP für Windows?
 
Hallo!

Ich greife den Code mal auf:

Delphi-Quellcode:
program APPNAME;

uses
  WinCrt, WinProcs, WinTypes;

var

  WndClass: TWndClass; //Eine Datenstruktur zur Festlegung der Fenstereigenschaften
  msg: TMSG; //Die Message Struktur

function WNDPROC(hwnd: HWND; uMsg, wParam: WORD; lParam: LongInt): LongInt;
begin
  //Keine Änderung oder Erweiterung. WndProc wird so verwendet, wie sie ist
  WNDPROC := DefWindowProc(hwnd, uMsg, wParam, lParam);
end;
begin

//Hier werden die Fenstereigenschaften definiert
  WndClass.style := CS_OWNDC;
  WndClass.lpfnWndProc := @WNDPROC;
  WndClass.cbClsExtra := 0;
  WndClass.cbWndExtra := 0;
  WndClass.hInstance := hInstance; //??? Wo wurde dieser Zeiger festgelegt???
  WndClass.hIcon := 0;
  WndClass.hCursor := LoadCursor(hInstance, IDC_ARROW);
  WndClass.hbrBackground := COLOR_WINDOW;
  WndClass.lpszMenuName := nil;
  WndClass.lpszClassName := 'WndClass';

//Nun kann das Fenster in eine interne Liste aufgenommen werden
  RegisterClass(WndClass);

//Erst hier wird das Fenster erzeugt, indem es über seinen Textnamen in der internrn
//Liste gesucht wird. Soweit ich mich erinnern kann, muß die Anzeige dieses Fensters
//mit einer Show Prozedur erzwungen werden
  CreateWindowEx(WS_EX_DLGMODALFRAME, 'WndClass',
                 'Bruchrechnen',
                 WS_VISIBLE or WS_CAPTION or WS_SYSMENU,
                 0, 0,    
                 500, 500,
                 0, 0, hInstance, nil);
  while True do
  begin
    if not GetMessage(msg, 0, 0, 0) then //Message holen
      exit;
  //Hier wird die Message in irgendwas übersetzt. Muss selber nachlesen, was diese Anweisung
  //bewirkt. (Wissenslücke)
    TranslateMessage(msg);
  //Und hier wird die Message im Windows System an die anderen Fenster verteilt, falls hier
  //noch nicht verarbeitet, weil vielleicht für anderes Fenster vorgesehen.
    DispatchMessage(msg);
  end;
end.
Ich vermute, das der nicht definierte Zeiger hInstance Schuld an dem Laufzeitfehler ist.

Bitte berichtigt mich bezüglich der Kommentare, falls ich irgendwo falsch liegen sollte.

Traudix

Rastaman 19. Okt 2005 19:12

Re: Fenster erstellen mit TP für Windows?
 
Ich habe doch gesagt es geht alles...Es lag nur an far :roll:

schöni 19. Okt 2005 19:17

Re: Fenster erstellen mit TP für Windows?
 
Hallo!

Zitat:

Zitat von Sharky
Nur weil ein Programm alt ist bedeutet es nicht das die Lizenzverträge nicht mehr gültig sind.
Soweit ich weiss gibt es bei Borland "nur" TurboPascal 5.5 kostenlos zum Downloaden.

Stimmt! Bei Turbo Pascal 7.0 gibt es aber Downloads. Guck mal in Google unter dem gleichnamigen Stichwort.

Rastaman besitzt aber laut seiner Angabe unter seinem Nicknamen eine Delphi 2005 Personal. Warum willer dann mit Macht Turbo Pascal verwenden, wenn dessen Nutzung noch nicht mal legal ist. Der mögliche Download von Turbo Pascal bezieht sich nämlich nur auf des DOS Teil. Für die Schule braucht er aber Windows. Und da kann er mit seinem D2005 Personal seinen Quelltext schreiben und übersetzen.

schöni

Rastaman 19. Okt 2005 21:12

Re: Fenster erstellen mit TP für Windows?
 
Nenene...
1. Schule = Linux mit kleiner Windows Emulation
2. Delphi 2005 hab ich NUR zu Hause, in der Schule ham wir TPW, nix anderes
3. Die CD mit TWP (das steht für Turbo Pascal für Windows, das hat ein richtiges GUI und einen MDI Clienten), ist im ganzen Kurs rumgegangen, da bin ich halt erst mal davon ausgegangen, es ist kostenlos.

schöni 19. Okt 2005 22:51

Re: Fenster erstellen mit TP für Windows?
 
Hallo Rastaman!

Zitat:

3. Die CD mit TWP (das steht für Turbo Pascal für Windows, das hat ein richtiges GUI und einen MDI Clienten), ist im ganzen Kurs rumgegangen, da bin ich halt erst mal davon ausgegangen, es ist kostenlos.
Da deke ich eher, das Deine Schule ne spezielle Lizenz bei den Borlandern gekauft hat, die die Verwendung an der Schule erlaubt. Wahrscheinlich dann auch nur dort und nicht etwa zuhause. Aber dort hast Du ja dann auch Delphi. Mit ner Diskette kannst Du den Quelltext kopieren und dann bei Bedarf auch zuhause weiter bearbeiten, falls dafür Bedarf besteht.

Das sagt

schöni


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:46 Uhr.

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