  | 
					
						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 | 
	 
	
		csde_rats
 
  
  Anmeldungsdatum: 07.01.2007 Beiträge: 2292 Wohnort: Zwischen Sessel und Tastatur
  | 
		
			
				 Verfasst am: 30.07.2007, 14:43    Titel: [Ressourcen/WinAPI|GELÖST] Textfeld auslesen... | 
				     | 
			 
			
				
  | 
			 
			
				Joahr.
 
Man hat in einem Ressourcen Skript ein Textfeld definiert. Jetzt will man mit einem 	  | Code: | 	 		  | GetWindowText (???, Usr, GetWindowTextLength(???)) | 	  Den Inhalt auslesen, doch woher bekommt man den Windowhandle? findwindow geht da ja net....    _________________ If hilfreicher_Beitrag then klick(location.here)
 
 
 
Klick
  Zuletzt bearbeitet von csde_rats am 31.07.2007, 11:37, insgesamt einmal bearbeitet | 
			 
		  | 
	 
	
		| Nach oben | 
		 | 
	 
	
		  | 
	 
	
		PMedia
 
 
  Anmeldungsdatum: 14.08.2006 Beiträge: 2847
 
  | 
		
			
				 Verfasst am: 30.07.2007, 14:50    Titel:  | 
				     | 
			 
			
				
  | 
			 
			
				Hehe, das Problem hatte Max06 letztens im IRC auch, ich habs net lösen können...
 
Ich habs probiert indem ich darin einen Text stehen lassen hab und dann das Handle per FindWindow gesucht hab  
 
...hat leider nicht ganz geklappt    
 
 
Gibt garantiert auch dafür ne API... unter XProfan gabs auch einen Befehl, aber um Verwirrung zu vermeiden lass ich das mal lieber   | 
			 
		  | 
	 
	
		| Nach oben | 
		 | 
	 
	
		  | 
	 
	
		Elektronix
 
 
  Anmeldungsdatum: 29.06.2006 Beiträge: 742
 
  | 
		
			
				 Verfasst am: 30.07.2007, 15:00    Titel: Re: [Ressourcen/WinAPI] hWnd von einem Textfeld beschaffen.. | 
				     | 
			 
			
				
  | 
			 
			
				 	  | csderats hat Folgendes geschrieben: | 	 		  Joahr.
 
Man hat in einem Ressourcen Skript ein Textfeld definiert. Jetzt will man mit einem 	  | Code: | 	 		  | GetWindowText (???, Usr, GetWindowTextLength(???)) | 	  Den Inhalt auslesen, doch woher bekommt man den Windowhandle? findwindow geht da ja net....    | 	  
 
 
Das wird beim erstellen des Editfeldes gleich beim Erstellen zugewiesen.
 
 	  | Code: | 	 		  
 
hEdit = CreateWindow(...)
 
 
GetDlgItemText( hEdit, IDC_EDIT1, chk_pswd, sizeof(chk_pswd)-1); | 	  
 
( ist jetzt C-Syntax) | 
			 
		  | 
	 
	
		| Nach oben | 
		 | 
	 
	
		  | 
	 
	
		csde_rats
 
  
  Anmeldungsdatum: 07.01.2007 Beiträge: 2292 Wohnort: Zwischen Sessel und Tastatur
  | 
		
			
				 Verfasst am: 30.07.2007, 15:24    Titel:  | 
				     | 
			 
			
				
  | 
			 
			
				JA.
 
Ich habe aber _kein_ hEdit. Ich habe da auh nirgendwo was alla CreateWindow/CreateWindowEx  
 
Alles mit den FBedit internen resse editorgemacht.
 
und ein 
 
 	  | Code: | 	 		  | Usr = GetDlgItemText( NULL, Login3, Usr, Len(Usr)-1) | 	  
 
ist Invalid assignment/conversion in 'Usr = GetDlgItemText( NULL, Login3, Usr, Len(Usr)-1)'    _________________ If hilfreicher_Beitrag then klick(location.here)
 
 
 
Klick | 
			 
		  | 
	 
	
		| Nach oben | 
		 | 
	 
	
		  | 
	 
	
		Elektronix
 
 
  Anmeldungsdatum: 29.06.2006 Beiträge: 742
 
  | 
		
			
				 Verfasst am: 30.07.2007, 15:26    Titel:  | 
				     | 
			 
			
				
  | 
			 
			
				Wenn Du ein hWnd hast, gibts auch ein Fenster dazu.
 
Wie haste denn das Editfeld erstellt? Soweit ich weiß, geht das nur mit DialogBox(), CreateDialog() oder CreateWindow(), und die liefern (bei Erfolg) das Handle zurück. | 
			 
		  | 
	 
	
		| Nach oben | 
		 | 
	 
	
		  | 
	 
	
		csde_rats
 
  
  Anmeldungsdatum: 07.01.2007 Beiträge: 2292 Wohnort: Zwischen Sessel und Tastatur
  | 
		
			
				 Verfasst am: 30.07.2007, 15:29    Titel:  | 
				     | 
			 
			
				
  | 
			 
			
				 	  | Code: | 	 		  Login DIALOGEX 6,6,216,85
 
CAPTION "ICiv - Login"
 
FONT 8,"MS Sans Serif",400,0
 
STYLE WS_CAPTION|WS_VISIBLE|WS_SYSMENU|WS_GROUP|DS_CENTER
 
BEGIN
 
  CONTROL "Username:",Login1,"Static",WS_CHILD|WS_VISIBLE,13,18,74,9
 
  CONTROL "Passwort:",Login2,"Static",WS_CHILD|WS_VISIBLE,13,43,77,9
 
  CONTROL "",Login3,"Edit",WS_CHILD|WS_VISIBLE|WS_TABSTOP,96,15,110,12,WS_EX_CLIENTEDGE
 
  CONTROL "",Login4,"Edit",WS_CHILD|WS_VISIBLE|WS_TABSTOP|ES_PASSWORD,96,40,110,12,WS_EX_CLIENTEDGE
 
  CONTROL "OK",Login5,"Button",WS_CHILD|WS_VISIBLE|WS_TABSTOP,80,64,57,16
 
END | 	  Ein 
 
 	  | Code: | 	 		  | DialogBoxParam(GetModuleHandle(NULL), Cast(zstring ptr,Login), NULL, @LoginProc, NULL) | 	   Macht den ganzen dialog und alle controls. _________________ If hilfreicher_Beitrag then klick(location.here)
 
 
 
Klick | 
			 
		  | 
	 
	
		| Nach oben | 
		 | 
	 
	
		  | 
	 
	
		Elektronix
 
 
  Anmeldungsdatum: 29.06.2006 Beiträge: 742
 
  | 
		
			
				 Verfasst am: 30.07.2007, 15:45    Titel:  | 
				     | 
			 
			
				
  | 
			 
			
				| Ja, das ist das Ressourcen-Script. Wie wird das denn im Quelltext aufgerufen? | 
			 
		  | 
	 
	
		| Nach oben | 
		 | 
	 
	
		  | 
	 
	
		csde_rats
 
  
  Anmeldungsdatum: 07.01.2007 Beiträge: 2292 Wohnort: Zwischen Sessel und Tastatur
  | 
		
			
				 Verfasst am: 30.07.2007, 16:35    Titel:  | 
				     | 
			 
			
				
  | 
			 
			
				 	  | Code: | 	 		  #include once "windows.bi"
 
#include once "inc/cryptlib.bi"
 
#include once "win/commctrl.bi"
 
 
#include "ICiv.bi"
 
 
declare function LoginProc(byval hWnd as HWND, byval uMsg as UINT, byval wParam as WPARAM, byval lParam as LPARAM) as integer
 
Declare function MainProc(byval hWin as HWND,byval uMsg as UINT,byval wParam as WPARAM,byval lParam as LPARAM) as integer
 
Declare function PrefProc(byval hDlg as HWND,byval uMsg as UINT,byval wParam as WPARAM,byval lParam as LPARAM) as bool
 
 
 
dim SHARED hInstance as HINSTANCE
 
hInstance = GetModuleHandle(NULL)
 
'''
 
''' Program start
 
'''
 
 
   ''
 
   '' Create the Dialog
 
   ''
 
   DialogBoxParam(GetModuleHandle(NULL), Cast(zstring ptr,Login), NULL, @LoginProc, NULL)
 
   'DialogBoxParam(hInstance, Cast(ZString Ptr, Main), NULL, @MainProc, NULL)
 
   'DialogBoxParam(hInstance, Cast(ZString Ptr, Preferences), NULL, @PrefProc, NULL)
 
   ''
 
   '' Program has ended
 
   ''
 
 
   ExitProcess(0)
 
   end
 
 
'''
 
''' Program end
 
'''
 
function LoginProc(byval hWin as HWND,byval uMsg as UINT,byval wParam as WPARAM,byval lParam as LPARAM) as integer
 
   dim as long id, event, x, y
 
   dim hBtn as HWND
 
   Dim As HWND hUsr, hPW
 
   dim rect as RECT
 
   Dim As String PW, Usr
 
   
 
   select case uMsg
 
      case WM_INITDIALOG
 
         '
 
      case WM_CLOSE
 
         EndDialog(hWin, 0)
 
         '
 
      case WM_COMMAND
 
         id=loword(wParam)
 
         event=hiword(wParam)
 
         select case id
 
            case Login5
 
               EndDialog(hWin, 0)
 
               hUsr=GetDlgItem(hWin,Login3)
 
               hPW=GetDlgItem(hWin,Login4)
 
               GetDlgItemText( hUsr, Login3, Usr, len(Usr)-1)
 
               'GetWindowText (Login4, PW, GetWindowTextLength(Login4))
 
               If Usr = "csde_rats" Then
 
                  'If *PW = "123" then
 
                     DialogBoxParam(hInstance, Cast(ZString Ptr, Main), NULL, @MainProc, NULL)
 
                  'End if
 
               End if
 
               '
 
         end select
 
      case WM_SIZE
 
         GetClientRect(hWin,@rect)
 
         hBtn=GetDlgItem(hWin,Login5)
 
         x=rect.right-100
 
         y=rect.bottom-35
 
         MoveWindow(hBtn,x,y,97,31,TRUE)
 
         '
 
      case else
 
         return FALSE
 
         '
 
   end select
 
   return TRUE
 
 
end function | 	  
 
 
Wenn ich da auf "OK" klicke: ICiv.exe hat ein Problem festgestellt und muss beendet werden    _________________ If hilfreicher_Beitrag then klick(location.here)
 
 
 
Klick | 
			 
		  | 
	 
	
		| Nach oben | 
		 | 
	 
	
		  | 
	 
	
		Elektronix
 
 
  Anmeldungsdatum: 29.06.2006 Beiträge: 742
 
  | 
		
			
				 Verfasst am: 30.07.2007, 18:00    Titel:  | 
				     | 
			 
			
				
  | 
			 
			
				Also, wie schon gesagt: Einen Dialog erstellt man mit CreateDialog oder (in Deinem Fall wohl eher angebracht) mit DialogBox. Der Rückgabewert ist das Handle des Dialogfensters. In der zugehörigen Dialogprozedur müssen bei WM_INITDIALOG die verschiedenen Elemente des Dialogs initialisiert werden, d. h., da wird für das Editfeld die ID zugewiesen. Fensterhandle und ID des Editfeldes werden dann in GetDlgItemText abgefragt.
 
 
Hier ein Beispiel, allerdings in C: http://pronix.linuxdelta.de/C/win32/win32_5.shtml
 
(Leider gibt es solche Tutorials noch nicht in FB, wäre mal ne Aufgabe für einen fleißigen Progger...   ). | 
			 
		  | 
	 
	
		| Nach oben | 
		 | 
	 
	
		  | 
	 
	
		csde_rats
 
  
  Anmeldungsdatum: 07.01.2007 Beiträge: 2292 Wohnort: Zwischen Sessel und Tastatur
  | 
		 | 
	 
	
		| Nach oben | 
		 | 
	 
	
		  | 
	 
	
		Elektronix
 
 
  Anmeldungsdatum: 29.06.2006 Beiträge: 742
 
  | 
		
			
				 Verfasst am: 31.07.2007, 07:58    Titel:  | 
				     | 
			 
			
				
  | 
			 
			
				Aufruf des Dialogs:
 
 	  | Code: | 	 		  
 
case ID_EDITFELD: 'Erstellen des Dialogs
 
                        DialogBox( hInst,
 
                                 MAKEINTRESOURCE(IDR_TEXTDIALOG),
 
                                   hWnd,
 
                                   (DLGPROC)CheckEditProc );
 
                        break;
 
 | 	  
 
In diesem Fall wird der Dialog in einem Menü aufgerufen (ID_EDITFELD). Du kannst ihn natürlich  direct bei WM_CREATE des Hauptfensters erstellen.
 
Ich hoffe, Du kennst Dich mit MAKEINTRESSOURCE aus.   
 
 
In der Dialogprozedur steht dann folgendes:
 
 	  | Code: | 	 		  switch( uMsg )
 
   {
 
      'Beim Initialisieren mit bestimmten Werten besehen
 
      case WM_INITDIALOG :
 
         SetDlgItemText( hDlg, IDC_EDIT1, "passwort");
 
         SetDlgItemInt ( hDlg, IDC_EDIT2, 12345, TRUE);
 
         break;
 
      'die Eingabefelder auswerten
 
      case WM_COMMAND :
 
(...)
 
 | 	  
 
Wie gesagt, es ist C-Syntax. Aber so furchtbar groß sind die Unterschiede in dem Fall nicht, es sind alles nur API-Aufrufe.
 
Das switch ist das C-Pendant zur select-case-Anweisung in Basic. | 
			 
		  | 
	 
	
		| Nach oben | 
		 | 
	 
	
		  | 
	 
	
		csde_rats
 
  
  Anmeldungsdatum: 07.01.2007 Beiträge: 2292 Wohnort: Zwischen Sessel und Tastatur
  | 
		
			
				 Verfasst am: 31.07.2007, 11:23    Titel:  | 
				     | 
			 
			
				
  | 
			 
			
				 	  | Zitat: | 	 		  | DialogBoxParam(hInstance, Cast(ZString Ptr, Main), NULL, @MainProc, NULL) | 	  In das fett hinterlegte NULL wird also der hWnd des Fensters geschrieben... ok.
 
 
MAKEINTRESSOURCE? Hmmm noch nie von gehört  
 
 
 
Ahh
 
 	  | Code: | 	 		  | SetDlgItemText(hWin, Login3, "passwort")  | 	   setzt schonmal den Text *thumbup*
 
 
edit:
 
Hmm.
 
Wenn ich es so mache: 	  | Code: | 	 		  hUsr=GetDlgItem(hWin,Login3)
 
               hPW=GetDlgItem(hWin,Login4)
 
               GetDlgItemText(hUsr, Login3, Usr, 30 )
 
               GetDlgItemText(hPW, Login4, PW, 30) | 	  Stürzt es ab (ICiv hat ein Problem festgestellt....).  
 
 
So liest er nichts: 	  | Code: | 	 		  GetDlgItemText(hWin, Login3, Usr, 30 )
 
               GetDlgItemText(hWin, Login4, PW, 30) | 	  Was für Strings müssen Usr und PW eigtl. sein? Normaler (jetzt der Fall), ZString oder WString?
 
 
nochma edit:
 
 	  | Code: | 	 		  Dim As ZString * 31 PW, Usr
 
GetDlgItemText(hWin, Login3, Usr, 30 )
 
               GetDlgItemText(hWin, Login4, PW, 30) | 	  
 
ES FUNKTIONIERT!!!!                         
 
 
EInfach EIN Zeichen größer dimmen *thumbup*
 
und schon stürzt es nicht mehr ab *freu* _________________ If hilfreicher_Beitrag then klick(location.here)
 
 
 
Klick
  Zuletzt bearbeitet von csde_rats am 31.07.2007, 11:39, insgesamt 2-mal bearbeitet | 
			 
		  | 
	 
	
		| Nach oben | 
		 | 
	 
	
		  | 
	 
	
		Elektronix
 
 
  Anmeldungsdatum: 29.06.2006 Beiträge: 742
 
  | 
		
			
				 Verfasst am: 31.07.2007, 11:34    Titel:  | 
				     | 
			 
			
				
  | 
			 
			
				MAKEINTRESSOURCE (Make Int (to) Ressource) ist ein Makro, mit dem die ID einer Ressource in den zugehörigen Integerwert umgewandelt wird. Vereinfacht das Einbinden der Ressourcen im Quelltext.
 
 
Die Strings können normale Strings sein. Z- oder W- ist unnötig.
  Zuletzt bearbeitet von Elektronix am 31.07.2007, 11:41, insgesamt einmal bearbeitet | 
			 
		  | 
	 
	
		| Nach oben | 
		 | 
	 
	
		  | 
	 
	
		csde_rats
 
  
  Anmeldungsdatum: 07.01.2007 Beiträge: 2292 Wohnort: Zwischen Sessel und Tastatur
  | 
		 | 
	 
	
		| Nach oben | 
		 | 
	 
	
		  | 
	 
	
		Elektronix
 
 
  Anmeldungsdatum: 29.06.2006 Beiträge: 742
 
  | 
		
			
				 Verfasst am: 31.07.2007, 11:44    Titel:  | 
				     | 
			 
			
				
  | 
			 
			
				Gern geschehen.   Was länge gährt, wird endlich.... nee, irgendwie falsch...   | 
			 
		  | 
	 
	
		| 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.
  | 
   
 
     |