 |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
ALWIM

Anmeldungsdatum: 08.08.2006 Beiträge: 1048 Wohnort: Niederbayern
|
Verfasst am: 14.07.2014, 21:55 Titel: Button nach Klick deaktivieren? (Win API) |
|
|
Code: | DestroyWindow(hs0)
hs0 = CreateWindow("button", "All delete!",_
WS_VISIBLE OR WS_CHILD OR WS_DISABLED,_
200, 40, 100,20, hWnd, NULL,_
cast(LPCREATESTRUCT,lParam)->hInstance,NULL)
SendMessage hs0, BM_SETCHECK, BST_CHECKED, 0 |
Zitat: | Aborting due to runtime error 12 ("segmentation violation" signal) |
Bei einem Programm das mit der Win Api geschrieben wurde will ich einen Button nach einem Mausklick deaktivieren. Wenn ich das mit obigen Quellcode mache, schmiert mir das Programm mit einem segmentation violation ab.
Gibt es eine Möglichkeit den Fehler zu beheben?
Verwende aktuellsten Compiler!
Gruß
ALWIM _________________ SHELL SHUTDOWN -s -t 05 |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 15.07.2014, 01:11 Titel: |
|
|
Der Fehler wird vermutlich irgendwo bei dem Cast liegen, aber da du ja netterweise den relevanten Code außenrum entfernt hast, können wir da auch nur orakeln. Die Zeilen für sich so können fehlerfrei durchlaufen, sie können aber auch crashen - je nachdem, was dein lParam ist. _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
ALWIM

Anmeldungsdatum: 08.08.2006 Beiträge: 1048 Wohnort: Niederbayern
|
Verfasst am: 15.07.2014, 17:36 Titel: |
|
|
Jojo hat Folgendes geschrieben: | Der Fehler wird vermutlich irgendwo bei dem Cast liegen, aber da du ja netterweise den relevanten Code außenrum entfernt hast, können wir da auch nur orakeln. Die Zeilen für sich so können fehlerfrei durchlaufen, sie können aber auch crashen - je nachdem, was dein lParam ist. |
Der relevante Quellcode außenrum funktioniert ohne Probleme! Das wurde mehrmals getestet (sogar mit -exx)! Sobald ich obige Zeilen hinzufüge gibt es Probleme!!!
Kann den Quellcode aus Datenschutzgründen nicht posten, da dieser teil eines offiziellen Projektes ist! Da schreibt noch ein anderer mit dran.
Gruß
ALWIM _________________ SHELL SHUTDOWN -s -t 05 |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 15.07.2014, 19:52 Titel: |
|
|
Der gepastete Codeschnippsel funktioniert ohne den Code außenrum nicht. Was ist daran so schwer zu verstehen, dass der Crash von dem Code außenrum abhängen kann, auch wenn der für sich gesehen keinen Fehler enthält?
Aber okay, ich brauch dir auch nicht zu helfen, wenn der "Datenschutz" (lol) dir wichtiger ist, als dass der Code überhaupt funktioniert. Ciao.
PS: Mit Datenschutz hat das übrigens überhaupt nichts zu tun. Und was zur Hölle ist ein "offizielles" Projekt?
Falls es dir nicht aufgefallen sein sollte, habe ich übrigens schon den Grund genannt, warum der Code crashen könnte (was aber vom umliegenden Code abhängt). So lange wie du schon programmierst, solltest du mit diesem Tipp das Problem ja selbstständig lösen können. _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
ALWIM

Anmeldungsdatum: 08.08.2006 Beiträge: 1048 Wohnort: Niederbayern
|
Verfasst am: 15.07.2014, 21:23 Titel: |
|
|
Zitat: | Und was zur Hölle ist ein "offizielles" Projekt? |
kommerzielles Projekt um genau zu sein!
Deswegen kann ich auch keinen Quellcode posten. Leider!
Mal schauen, ob ich den Fehler so finde? Wobei! Da war doch noch was:
http://forum.qbasic.at/viewtopic.php?t=7562&highlight=segmentation+violation
Gruß
ALWIM _________________ SHELL SHUTDOWN -s -t 05 |
|
Nach oben |
|
 |
St_W

Anmeldungsdatum: 22.07.2007 Beiträge: 956 Wohnort: Austria
|
Verfasst am: 15.07.2014, 23:06 Titel: |
|
|
Ja was jetzt? Kommt der Fehler beim Kompilieren oder beim Ausführen des Programms? Deiner bisherigen Beschreibung zufolge wäre ich ja von letzterem ausgegangen.
Falls es doch anders sein sollte:
ALWIM hat Folgendes geschrieben: | Verwende aktuellsten Compiler! | Stable oder Head-Version? Falls der Fehler beim kompilieren auftritt probiere eine/mehrere andere Compilerversion(en).
Wenn der Fehler beim Ausführen deines Programmes auftritt brauchst du gar keinen Gedanken an den Compiler verschwenden, sondern musst den Fehler im eigenen Code suchen. _________________ Aktuelle FreeBasic Builds, Projekte, Code-Snippets unter http://users.freebasic-portal.de/stw/
http://www.mv-lacken.at Musikverein Lacken (MV Lacken) |
|
Nach oben |
|
 |
ALWIM

Anmeldungsdatum: 08.08.2006 Beiträge: 1048 Wohnort: Niederbayern
|
Verfasst am: 16.07.2014, 21:10 Titel: |
|
|
Code: | ''' Lutz Ifers WinAPI-Tutorial
'''
''' Kapitel 4.6 - "Auf Buttons reagieren"
#include "windows.bi"
const ProgrammName = "Buttons"
declare function WndProc(byval hWnd as HWND, byval message as UINTEGER,_
byval wParam as WPARAM, byval lParam as LPARAM) as LRESULT
declare function SubProc(byval hWnd as HWND, byval message as UINTEGER,_
byval wParam as WPARAM, byval lParam as LPARAM) as LRESULT
dim as WNDCLASS wndcls
with wndcls
.style = CS_HREDRAW or CS_VREDRAW
.lpfnWndProc = ProcPtr(WndProc)
.cbClsExtra = 0
.cbWndExtra = 0
.hInstance = GetModuleHandle(NULL)
.hCursor = LoadCursor(NULL, IDC_ARROW)
.hIcon = LoadIcon(NULL, IDI_APPLICATION)
.hbrBackground = GetSysColorBrush(COLOR_WINDOW)
.lpszClassName = StrPtr(ProgrammName)
.lpszMenuName = NULL
end with
RegisterClass @wndcls
dim as HWND hWnd = CreateWindow(_
ProgrammName, ProgrammName, WS_OVERLAPPED or WS_SYSMENU,_
CW_USEDEFAULT, CW_USEDEFAULT, 180, 210,_
NULL, NULL, GetModuleHandle(NULL), NULL)
ShowWindow hWnd, SW_NORMAL
UpdateWindow hWnd
dim as MSG msg
do while getmessage(@msg, NULL, 0, 0) <> 0
DispatchMessage @msg
loop
end msg.wParam
function WndProc(byval hWnd as HWND, byval message as UINTEGER,_
byval wParam as WPARAM, byval lParam as LPARAM) as LRESULT
static as HWND hBeenden, hLinks, hMitte, hRechts
static as HWND hfoo, hbar, hfrage
static as HWND hrot, hblau, hgruen
select case message
case WM_DESTROY
PostQuitMessage 0
return 0
case WM_CREATE
hBeenden = CreateWindow("button", "Beenden",_
WS_CHILD or WS_VISIBLE,_
5, 5, 160, 22, hWnd, NULL,_
cast(LPCREATESTRUCT,lParam)->hInstance,NULL)
hLinks = CreateWindow("button", "A",_
WS_CHILD or WS_VISIBLE,_
5, 30, 50, 22, hWnd, NULL,_
cast(LPCREATESTRUCT,lParam)->hInstance,NULL)
hMitte = CreateWindow("button", "B",_
WS_CHILD or WS_VISIBLE,_
60, 30, 50, 22, hWnd, NULL,_
cast(LPCREATESTRUCT,lParam)->hInstance,NULL)
hRechts = CreateWindow("button", "C",_
WS_CHILD or WS_VISIBLE,_
115, 30, 50, 22, hWnd, NULL,_
cast(LPCREATESTRUCT,lParam)->hInstance,NULL)
hfoo = CreateWindow("button", "foo",_
BS_AUTOCHECKBOX or WS_VISIBLE or WS_CHILD or WS_CLIPSIBLINGS,_
5, 60, 40,20, hWnd, NULL,_
cast(LPCREATESTRUCT,lParam)->hInstance,NULL)
hbar = CreateWindow("button", "bar",_
BS_AUTOCHECKBOX or WS_VISIBLE or WS_CHILD or WS_CLIPSIBLINGS,_
50, 60, 45,20, hWnd, NULL,_
cast(LPCREATESTRUCT,lParam)->hInstance,NULL)
hfrage = CreateWindow("button", "Sicher?",_
BS_CHECKBOX or WS_VISIBLE or WS_CHILD or WS_CLIPSIBLINGS,_
100, 60, 70,20, hWnd, NULL,_
cast(LPCREATESTRUCT,lParam)->hInstance,NULL)
CreateWindow("button", "Lieblingsfarbe?",_
WS_CHILD or WS_VISIBLE or WS_GROUP or BS_GROUPBOX,_
5,90,160, 90, hWnd, NULL,_
cast(LPCREATESTRUCT,lParam)->hInstance,NULL)
hrot = CreateWindow("button", "Rot",_
BS_AUTORADIOBUTTON or WS_VISIBLE or WS_CHILD or WS_GROUP,_
10, 110, 70,20, hWnd, NULL,_
cast(LPCREATESTRUCT,lParam)->hInstance,NULL)
hblau = CreateWindow("button", "Blau",_
BS_AUTORADIOBUTTON or WS_VISIBLE or WS_CHILD,_
10, 130, 70,20, hWnd, NULL,_
cast(LPCREATESTRUCT,lParam)->hInstance,NULL)
hgruen = CreateWindow("button", "Grün",_
BS_AUTORADIOBUTTON or WS_VISIBLE or WS_CHILD,_
10, 150, 70,20, hWnd, NULL,_
cast(LPCREATESTRUCT,lParam)->hInstance,NULL)
SendMessage hrot, BM_SETCHECK, BST_CHECKED, 0
return 0
''' Auf Buttons
''' reagieren
case WM_COMMAND
if HIWORD(wParam) <> BN_CLICKED then return 0
select case lParam
case hLinks
DestroyWindow(hLinks)
hLinks = CreateWindow("button", "A",_
WS_CHILD or WS_VISIBLE OR WS_DISABLED,_
5, 30, 50, 22, hWnd, NULL,_
cast(LPCREATESTRUCT,lParam)->hInstance,NULL)
MessageBox hWnd, "klick","Button A", 0
case hMitte
DestroyWindow(hMitte)
hMitte = CreateWindow("button", "B",_
WS_CHILD or WS_VISIBLE OR WS_DISABLED,_
60, 30, 50, 22, hWnd, NULL,_
cast(LPCREATESTRUCT,lParam)->hInstance,NULL)
MessageBox hWnd, "klick","Button B", 0
case hRechts
DestroyWindow(hRechts)
hRechts = CreateWindow("button", "C",_
WS_CHILD or WS_VISIBLE OR WS_DISABLED,_
115, 30, 50, 22, hWnd, NULL,_
cast(LPCREATESTRUCT,lParam)->hInstance,NULL)
MessageBox hWnd, "klick","Button C", 0
case hFrage
if SendMessage(hFrage, BM_GETCHECK, 0, 0) = BST_CHECKED then
SendMessage hFrage, BM_SETCHECK, BST_UNCHECKED, 0
elseif MessageBox(hWnd, "Wirklich auswählen?", "Frage",_
MB_YESNO or MB_ICONQUESTION) = IDYES then
SendMessage hFrage, BM_SETCHECK, BST_CHECKED, 0
end if
case hBeenden
dim as string sText = "angeklickte Buttons:"+chr(13,10)
if SendMessage(hfoo, BM_GETCHECK,0,0) = BST_CHECKED then _
sText += "foo "
if SendMessage(hbar, BM_GETCHECK,0,0) = BST_CHECKED then _
sText += "bar "
if SendMessage(hfrage,BM_GETCHECK,0,0) = BST_CHECKED then _
sText += "sicher"
sText += chr(13, 10, 13, 10) + "Die Lieblingsfarbe ist "
if SendMessage(hrot, BM_GETCHECK,0,0) = BST_CHECKED then _
sText += "rot"
if SendMessage(hblau, BM_GETCHECK,0,0) = BST_CHECKED then _
sText += "blau"
if SendMessage(hgruen,BM_GETCHECK,0,0) = BST_CHECKED then _
sText += "grün"
sText += chr(13, 10, 13, 10) + "Wirklich Beenden?"
if MessageBox(hWnd, sText, "Beenden",_
MB_YESNO or MB_ICONQUESTION) = IDYES then
SendMessage(hWnd, WM_CLOSE, 0, 0)
end if
end select
return 0
end select
return DefWindowProc( hWnd, message, wParam, lParam )
end function
|
Dieser Quellcode funktioniert auch nicht! Zumindest konnte ich das bei einem der Buttons feststellen mit -exx!!!
Dann ist da auch schon der Wurm drin? An wem liegt's?
Gruß
ALWIM _________________ SHELL SHUTDOWN -s -t 05 |
|
Nach oben |
|
 |
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|