Fenster Close Button abfragen

Übersicht BlitzBasic Allgemein

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen

EPS

Betreff: Fenster Close Button abfragen

BeitragMi, Apr 27, 2005 0:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi zusammen,

Es gibt ja die Möglichkeit den CloseButton am BlitzBasic Fenster inaktiv zu schalten.

Ich hätte es aber gerne so das der Button aktiv bleibt und ich erfasse wann er betätigt wurde um dann einen Requester zu bringen der abfragt ob beendet werden soll oder nicht - in Abhängigkeit vom Programm, also nicht über Apptitle()

Kann man das irgendwie abfragen?

Ich hoffe das war halbwegs verständlich.

Vielen Dank schonmal.
mGUI - Graphical User Interface für Blitz3D...Informationen gibt es hier

Man kann sich öfter als zweimal im Leben halb tot lachen.
 

FBI-blitz

BeitragMi, Apr 27, 2005 7:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Vielleicht mit Dlls!
Bin mir aber auch nicht sicher!
Computer 1: AMD Athlon64 3500+ | nVidia GF 7900GT | 1024 MB DDR-RAM | ASUS A8N-SLI Preimium | 250 GB SATA 2 || WindowsXP | Blitz3D | Blitz+
Computer 2: AMD AthlonXP 2400+ | ATI Radeon 9500 | 512 MB DDR-RAM | MSI K7N2 | 80 GB IDE | 160 GB IDE || WindowsXP | Blitz3D | Blitz+
Computer 3: Intel Pentium MMX | onBoard-Grafik | 32 MB RAM | 1 GB IDE || Windows 98 SE | Blitz+
 

David

BeitragMi, Apr 27, 2005 7:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi!

http://www.blitzbasic.co.nz/co...p?code=831

Sowas in der Art?

grüße

EPS

BeitragMi, Apr 27, 2005 12:04
Antworten mit Zitat
Benutzer-Profile anzeigen
@FBI-Blitz - naja, ich denke mal wenn dann mit DLL - nur wie - das ist die Frage

@David - wenn du helfen möchtest, sei so gut, lies dir die Frage bitte auch durch. Ich mag es nicht wenn Leute eine Frage nicht erfassen und die Frage selbst als Antwort schreiben.

noch ein paar Ideen vielleicht?
mGUI - Graphical User Interface für Blitz3D...Informationen gibt es hier

Man kann sich öfter als zweimal im Leben halb tot lachen.
 

SebastianB

BeitragMi, Apr 27, 2005 13:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,

so weit ich weiß, geht das mit der Blitzsys-dll. Aber sonst glaube ich müsstest du mit Events arbeiten und das geht mit Blitz3D nicht.

MfG Sebastian
Never change a running system

EPS

BeitragMi, Apr 27, 2005 13:22
Antworten mit Zitat
Benutzer-Profile anzeigen
hmm, also in der Beschreibung zur BlitzSys hab ich nix dergeleichen gefunden.

Danke trotzdem, weitere Vorschläge?
mGUI - Graphical User Interface für Blitz3D...Informationen gibt es hier

Man kann sich öfter als zweimal im Leben halb tot lachen.
 

SebastianB

BeitragMi, Apr 27, 2005 22:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,

so ichs hab's nochmal nachgeschaut. Die Funktion heißt DLLFindBlitzRuntimeHwnd(sAppName$,[sClosePrompt$]). Für sClosePrompt$ gibst du deine Meldung ein, wenn jemand das Fenster schließt. Wenn du mir nicht glaubst: Du kannst ja in der Hilfe von BlitzSys nachgucken.

MfG Sebastian
Never change a running system
 

Apocalyptic

BeitragMi, Apr 27, 2005 22:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich glaube mich zu erinnern, dass diese Funktion auch nur den "AppTitle-Requester" benutzt...

[Edit]: Jepp, ich hatte recht:BlitzBasic: [AUSKLAPPEN]
Function DLLFindBlitzRuntimeHwnd(sAppName$,sClosePrompt$ = \"\")
Local windowHandle,sAppTempName$,sRandomString$ = \" \"

SeedRnd MilliSecs()

For a = 0 To 50
sRandomString$ = sRandomString$ + Chr(Rnd(65,90))
Next
sAppTempName$ = sAppName$ + sRandomString$
AppTitle sAppTempName$
windowHandle = DLLFindWindow(sAppTempName$)
SeedRnd 0

; If this happens, there is a REAL problem, so closing the program should be fine..
If windowHandle = False Then RuntimeError(\"Blitz window could not be found! Program Terminating!\")
AppTitle sAppName$,sClosePrompt$
Return windowHandle
End Function


Die Möglichkeit, diesen Button abzufragen, habe ich früher auch gesucht. Aber ich habe keine für B2D gefunden, so dass ich einfach eine eigene Gui geschrieben habe und den Windowsrahmen mit der BlitzSys.dll entfernt habe.
Suum cuique

[ www.ffs-net.de.vu ] [ Raycaster ]

EPS

BeitragMi, Apr 27, 2005 23:09
Antworten mit Zitat
Benutzer-Profile anzeigen
ja...ich dachte mir schon das das nicht so direkt geht.

Das Erzeugen eines einfachen Abfragefensters kann man halt auch per Apptitle machen. Aber das ist es ja nicht was ich möchte.

Bleibt mir wohl nix anderes übrig als die Lösung mit der verborgenen Titelleiste.

Vielen Dank trotzdem.
mGUI - Graphical User Interface für Blitz3D...Informationen gibt es hier

Man kann sich öfter als zweimal im Leben halb tot lachen.

Sebastian

BeitragDo, Apr 28, 2005 17:34
Antworten mit Zitat
Benutzer-Profile anzeigen
EPS hat Folgendes geschrieben:

Bleibt mir wohl nix anderes übrig als die Lösung mit der verborgenen Titelleiste.

Nicht unbeding ....

Ich glaube man könnte mit C# ne kleine Dll Coden mit der sowas geht.
Wenn ich Zeit hab (was äußerst unwarscheinlich ist) werd ich mich vielleicht mal dran versuchen .....
Seit 2 Jahren kein BlitzBasic und kein Windows mehr, und stolz darauf !

EPS

BeitragDo, Apr 28, 2005 17:42
Antworten mit Zitat
Benutzer-Profile anzeigen
hmm, das wäre prima, zu schade das du keine Zeit hast...nimm dir doch mal Zeit

B I T T E .......... Razz
mGUI - Graphical User Interface für Blitz3D...Informationen gibt es hier

Man kann sich öfter als zweimal im Leben halb tot lachen.

Sebastian

BeitragDo, Apr 28, 2005 17:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Na wenn man so lieb fragt :

Zitat:
#include <windows.h>

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow)
{
MSG msg;
HWND hWnd;
WNDCLASS wc;

const char szAppName[] = "Symenu buttons";

wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hbrBackground = (HBRUSH) GetStockObject(LTGRAY_BRUSH);
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wc.hInstance = hInstance;
wc.lpfnWndProc = WndProc;
wc.lpszClassName = szAppName;
wc.lpszMenuName = NULL;
wc.style = CS_HREDRAW | CS_VREDRAW;

RegisterClass(&wc);

hWnd = CreateWindow( szAppName,
szAppName,
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
300,
60,
NULL,
NULL,
hInstance,
NULL);

ShowWindow(hWnd, iCmdShow);
UpdateWindow(hWnd);

while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}

return msg.wParam;
}

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
static HWND hButton;

switch (message)
{
case WM_CREATE:
{
hButton = CreateWindow( "button",
"Beenden",
WS_CHILD | WS_VISIBLE,
0, 0, 0, 0,
hWnd,
NULL,
((LPCREATESTRUCT) lParam) -> hInstance,
NULL);
return 0;
}
case WM_SIZE:
{
MoveWindow(hButton, LOWORD(lParam) / 2 - 80, HIWORD(lParam) - 30,
160, 22, TRUE);
return 0;
}

case WM_COMMAND:
{
if (lParam == (LPARAM)hButton)
{
if (HIWORD(wParam) == BN_CLICKED)
SendMessage(hWnd, WM_CLOSE, 0, 0);
}
return 0;
}


case WM_SYSCOMMAND :
{
if(wParam == SC_CLOSE)
{
MessageBox(hWnd,"Hey,Someone closes me !!","What are you doing ??",MB_OK);
return 0;
}
else
return DefWindowProc(hWnd, message, wParam, lParam);
}





case WM_DESTROY:
{
PostQuitMessage(0);
return 0;
}
}
return DefWindowProc(hWnd, message, wParam, lParam);
}



Erst mal das Grundprinzip ....
Ich hab meinen ersten WinAIP-cpp-Source enstsprechend frisirt.
Man muss die WM_SYSMENU-Nachricht abfangen und checken ob sie SC_CLOSE als wParam hat.
Jetzt muss ich nur noch ne Dll proggen die sich diese nachricht vom BB-Window krallt und auswerted.

@ESP :
Hast recht C++ ist sowieso einfacher als meine Gedichtinterpretation für Deutsch. Laughing
Seit 2 Jahren kein BlitzBasic und kein Windows mehr, und stolz darauf !

Vertex

BeitragDo, Apr 28, 2005 18:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi!
Also theoretisch müsste man es so lösen, das man eine eigene CallBack-Funktion schreibt, die dann das Close-Event abfängt, alles andere jedoch an die Blitz3D-CallBack-Funktion weiterleitet.

Das WindowHandle(hWnd) kann man einfach per hWnd = Int(SystemProperty$("AppHWND")) herausfinden.

Weiterhin ist BlitzSys veraltet. Ist jetzt alles auch direkt mit Blitz machbar.

mfg olli
vertex.dreamfall.at | GitHub

Sebastian

BeitragDo, Apr 28, 2005 19:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Gennau !!

Das könnte so aussehen :
Zitat:

EXPORT int CALLBACK GetSysmenuState(HWND hWnd) {

MSG msg;
GetMessage(&msg,hWnd,0,0); /* Wir zapfen die MSG-Queue an */

if(msg.message = WM_SYSCOMMAND){ /* Wir nehmen nur SYSCOMMANDs */
if (msg.wParam = SC_CLOSE) /* Wir kucken ob es SC_CLOSE ist */
return 1;
}
else /* und geben den rest zurück */
CallWindowProc((WNDPROC) GetWindowLong(hWnd,GWL_WNDPROC),hWnd,msg.message,msg.wParam,msg.lParam);
return 0;
}


Ich glaube aber dass ich mir über dir Parameter von GetMessage auch nur die SYSCOMMANDS hole kann. Dann spar ich mir den CallWindowProc ....

Aber Zunächs mal :
Es ist scheißlam und funct nicht immer ......
Irgentwie nicht ganz das wahre! lol !

@Vertex : der Ansatzt ist gut oder ?????
Seit 2 Jahren kein BlitzBasic und kein Windows mehr, und stolz darauf !

EPS

BeitragDo, Apr 28, 2005 20:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi, na ist doch schon mal klasse das es einen Ansatz gibt - oder ist das schon ne Lösung???

Kann man das mal irgendwie so zusammenfassen das ichs kapiere bzw. in Blitz nutzen kann?

Ich wäre euch sehr verbunden - DANKE
mGUI - Graphical User Interface für Blitz3D...Informationen gibt es hier

Man kann sich öfter als zweimal im Leben halb tot lachen.

Sebastian

BeitragSa, Apr 30, 2005 10:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Das ist (k)eine Lösung ......

Die ganze ist noch nicht ganz ausgereift .....
Ich konnte gestern nichts machen da ich auf ner kleinen LAN-Party war (ist schon toll wenn man als einzer im Dorf nen 100mbit Switch zu hause hat).

Ich schätze das ich in den nächsten paar tagen was escheites basteln kann.
(Setz meine Fortschritte hier in den Thread)
Seit 2 Jahren kein BlitzBasic und kein Windows mehr, und stolz darauf !

EPS

BeitragSa, Apr 30, 2005 12:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Prima, ich danke dir. Es eilt ja auch nicht, wäre aber toll wenn du da dran bleibst, könnte ja auch für andere interessant sein.

Also: DANKE
mGUI - Graphical User Interface für Blitz3D...Informationen gibt es hier

Man kann sich öfter als zweimal im Leben halb tot lachen.

Sebastian

BeitragSa, Apr 30, 2005 15:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Folgendes Problem :

Wenn GetMessage eine leere Message-warteschleife für das Window findet wartet es bis eine Message ankommt ......

So lange kann die Dll-function aber nicht brauchen !!!

Gibst da Alternativen ??????

Ich google mal .......
Seit 2 Jahren kein BlitzBasic und kein Windows mehr, und stolz darauf !

Vertex

BeitragSa, Apr 30, 2005 16:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
Unlike GetMessage, the PeekMessage function does not wait for a message to be posted before returning.
vertex.dreamfall.at | GitHub

Sebastian

BeitragSo, Mai 01, 2005 15:05
Antworten mit Zitat
Benutzer-Profile anzeigen
ALso ich hab mir mal was aus den Fingern gesaugt :
BlitzBasic: [AUSKLAPPEN]


Das ist keine Lösung sondern nur ein einfacher Ansatz um meine Fortschritte zu ziegen ....

Ich denke nächste woche um die Zeit hab ich die fertige Dll online !
Seit 2 Jahren kein BlitzBasic und kein Windows mehr, und stolz darauf !

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group