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:

[Ressourcen/WinAPI|GELÖST] Textfeld auslesen...

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



Anmeldungsdatum: 07.01.2007
Beiträge: 2292
Wohnort: Zwischen Sessel und Tastatur

BeitragVerfasst am: 30.07.2007, 15:43    Titel: [Ressourcen/WinAPI|GELÖST] Textfeld auslesen... Antworten mit Zitat

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.... neutral
_________________
If hilfreicher_Beitrag then klick(location.here)

Klick


Zuletzt bearbeitet von csde_rats am 31.07.2007, 12:37, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
PMedia



Anmeldungsdatum: 14.08.2006
Beiträge: 2847

BeitragVerfasst am: 30.07.2007, 15:50    Titel: Antworten mit Zitat

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 happy
...hat leider nicht ganz geklappt peinlich

Gibt garantiert auch dafür ne API... unter XProfan gabs auch einen Befehl, aber um Verwirrung zu vermeiden lass ich das mal lieber happy
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Elektronix



Anmeldungsdatum: 29.06.2006
Beiträge: 742

BeitragVerfasst am: 30.07.2007, 16:00    Titel: Re: [Ressourcen/WinAPI] hWnd von einem Textfeld beschaffen.. Antworten mit Zitat

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


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



Anmeldungsdatum: 07.01.2007
Beiträge: 2292
Wohnort: Zwischen Sessel und Tastatur

BeitragVerfasst am: 30.07.2007, 16:24    Titel: Antworten mit Zitat

JA.
Ich habe aber _kein_ hEdit. Ich habe da auh nirgendwo was alla CreateWindow/CreateWindowEx zwinkern
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)' neutral
_________________
If hilfreicher_Beitrag then klick(location.here)

Klick
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Elektronix



Anmeldungsdatum: 29.06.2006
Beiträge: 742

BeitragVerfasst am: 30.07.2007, 16:26    Titel: Antworten mit Zitat

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



Anmeldungsdatum: 07.01.2007
Beiträge: 2292
Wohnort: Zwischen Sessel und Tastatur

BeitragVerfasst am: 30.07.2007, 16:29    Titel: Antworten mit Zitat

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



Anmeldungsdatum: 29.06.2006
Beiträge: 742

BeitragVerfasst am: 30.07.2007, 16:45    Titel: Antworten mit Zitat

Ja, das ist das Ressourcen-Script. Wie wird das denn im Quelltext aufgerufen?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
csde_rats



Anmeldungsdatum: 07.01.2007
Beiträge: 2292
Wohnort: Zwischen Sessel und Tastatur

BeitragVerfasst am: 30.07.2007, 17:35    Titel: Antworten mit Zitat

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 mit dem Kopf durch die Mauer wollen
_________________
If hilfreicher_Beitrag then klick(location.here)

Klick
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Elektronix



Anmeldungsdatum: 29.06.2006
Beiträge: 742

BeitragVerfasst am: 30.07.2007, 19:00    Titel: Antworten mit Zitat

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... zwinkern ).
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
csde_rats



Anmeldungsdatum: 07.01.2007
Beiträge: 2292
Wohnort: Zwischen Sessel und Tastatur

BeitragVerfasst am: 30.07.2007, 19:19    Titel: Antworten mit Zitat

neutral
Durch das C-Listings blick ich net durch. neutral
Wie heißt denn die entsprechende Funktion?
_________________
If hilfreicher_Beitrag then klick(location.here)

Klick
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Elektronix



Anmeldungsdatum: 29.06.2006
Beiträge: 742

BeitragVerfasst am: 31.07.2007, 08:58    Titel: Antworten mit Zitat

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

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



Anmeldungsdatum: 07.01.2007
Beiträge: 2292
Wohnort: Zwischen Sessel und Tastatur

BeitragVerfasst am: 31.07.2007, 12:23    Titel: Antworten mit Zitat

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 neutral


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....). neutral

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!!!! vor Freude klatschen vor Freude klatschen vor Freude klatschen Hammer Hammer Yahooo!!!! Yahooo!!!! Yahooo!!!!

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, 12:39, insgesamt 2-mal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Elektronix



Anmeldungsdatum: 29.06.2006
Beiträge: 742

BeitragVerfasst am: 31.07.2007, 12:34    Titel: Antworten mit Zitat

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, 12:41, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
csde_rats



Anmeldungsdatum: 07.01.2007
Beiträge: 2292
Wohnort: Zwischen Sessel und Tastatur

BeitragVerfasst am: 31.07.2007, 12:38    Titel: Antworten mit Zitat

@Elektonix:
Echt vieeeelmaaals danke für deine Hilfe *in-helper-list-eintrag*
_________________
If hilfreicher_Beitrag then klick(location.here)

Klick
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Elektronix



Anmeldungsdatum: 29.06.2006
Beiträge: 742

BeitragVerfasst am: 31.07.2007, 12:44    Titel: Antworten mit Zitat

Gern geschehen. vor Freude klatschen Was länge gährt, wird endlich.... nee, irgendwie falsch... Mal in den Duden schauen
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 -> Windows-spezifische Fragen 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