![]() |
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:
stdcall gibts bei Turbopascal nicht :wall:
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. |
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:
Das Edit wird auch auf der Konsole erstellt, aber WM_SETTEXT funktioniert nicht :?
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. |
Re: Fenster erstellen mit TP für Windows?
Ich denk ma darauf weiß eh keiner ne Antwort, aber n letzter Versuch: *PUSH* :duck:
|
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
|
Re: Fenster erstellen mit TP für Windows?
Zitat:
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. |
Re: Fenster erstellen mit TP für Windows?
Zitat:
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. |
Re: Fenster erstellen mit TP für Windows?
Guck dir mal meine nonVCL Tutorials an:
![]() |
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: |
Re: Fenster erstellen mit TP für Windows?
Zitat:
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). |
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: |
Re: Fenster erstellen mit TP für Windows?
Hallo!
Ich greife den Code mal auf:
Delphi-Quellcode:
Ich vermute, das der nicht definierte Zeiger hInstance Schuld an dem Laufzeitfehler ist.
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. Bitte berichtigt mich bezüglich der Kommentare, falls ich irgendwo falsch liegen sollte. Traudix |
Re: Fenster erstellen mit TP für Windows?
Ich habe doch gesagt es geht alles...Es lag nur an far :roll:
|
Re: Fenster erstellen mit TP für Windows?
Hallo!
Zitat:
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 |
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. |
Re: Fenster erstellen mit TP für Windows?
Hallo Rastaman!
Zitat:
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