Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Button nach Klick deaktivieren? (Win API)

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
ALWIM



Anmeldungsdatum: 08.08.2006
Beiträge: 1048
Wohnort: Niederbayern

BeitragVerfasst am: 14.07.2014, 21:55    Titel: Button nach Klick deaktivieren? (Win API) Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 15.07.2014, 01:11    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
ALWIM



Anmeldungsdatum: 08.08.2006
Beiträge: 1048
Wohnort: Niederbayern

BeitragVerfasst am: 15.07.2014, 17:36    Titel: Antworten mit Zitat

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. zwinkern

Gruß
ALWIM
_________________
SHELL SHUTDOWN -s -t 05
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 15.07.2014, 19:52    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
ALWIM



Anmeldungsdatum: 08.08.2006
Beiträge: 1048
Wohnort: Niederbayern

BeitragVerfasst am: 15.07.2014, 21:23    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
St_W



Anmeldungsdatum: 22.07.2007
Beiträge: 956
Wohnort: Austria

BeitragVerfasst am: 15.07.2014, 23:06    Titel: Antworten mit Zitat

ALWIM hat Folgendes geschrieben:
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
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
Benutzer-Profile anzeigen Private Nachricht senden
ALWIM



Anmeldungsdatum: 08.08.2006
Beiträge: 1048
Wohnort: Niederbayern

BeitragVerfasst am: 16.07.2014, 21:10    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
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.

 Impressum :: Datenschutz