 |
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: 1032 Wohnort: Niederbayern
|
Verfasst am: 19.05.2017, 02:01 Titel: Listboxen mit WinApi erstellen und auswerten |
|
|
Hat schon mal jemand von euch Listboxen mit der WinApi erstellt?
Ich möchte eine Listbox erstellen, die mir vorhandene Artikel anzeigt, die ich auswählen kann und dann in eine Variable übernehme bzw. übernehmen kann! Was brauche ich alles damit der mir die Artikel korrekt anzeigt? Wie muss die Definition aussehen?
Zitat: | hLinks = CreateWindow("listbox", "A",_
WS_BORDER OR WS_CHILD or WS_VISIBLE OR ES_AUTOVSCROLL OR LBS_NOTIFY,_
235, 30, 150, 122, hWnd, NULL,_
cast(LPCREATESTRUCT,lParam)->hInstance,NULL) |
Die Liste sollte (eventuell) Scrollbar sein? Desweiteren sollte gegebenenfalls auch ein Übernahmebutton sichtbar sein. https://i-msdn.sec.s-msft.com/dynimg/IC510700.png
Leider gibt es zu wenig Infomaterial für Freebasic! Die MSDN Seite von Microsoft hilft mir nicht weiter, da ich weder C++ noch perfekt Englisch kann. Vielleicht kann mir jemand ein Beispiel geben? Ich bedanke mich schon mal im Voraus!
Gruß
ALWIM _________________ SHELL SHUTDOWN -s -t 05 |
|
Nach oben |
|
 |
grindstone
Anmeldungsdatum: 03.10.2010 Beiträge: 1175 Wohnort: Ruhrpott
|
Verfasst am: 19.05.2017, 09:34 Titel: |
|
|
Hallo ALWIM
Ich habe dir das Beispiel, das zu dem von dir verlinkten Bild gehört, mal nach FB übersetzt: Code: | #Include "windows.bi"
Type Player
achName As ZString*MAX_PATH
achPosition As ZString*12
nGamesPlayed As Integer
nGoalsScored As Integer
End Type
Dim Shared As Player Roster(0 To ...) = {Type <Player> ("Haas, Jonathan", "Midfield", 18, 4), _
Type <Player> ("Pai, Jyothi", "Forward", 36, 12), _
Type <Player> ("Hanif, Kerim", "Back", 26, 0), _
Type <Player> ("Anderberg, Michael", "Back", 24, 2), _
Type <Player> ("Jelitto, Jacek", "Midfield", 26, 3), _
Type <Player> ("Raposo, Rui", "Back", 24, 3), _
Type <Player> ("Joseph, Brad", "Forward", 13, 3), _
Type <Player> ("Bouchard, Thomas", "Forward", 28, 5), _
Type <Player> ("Salmre, Ivo", "Midfield", 27, 7), _
Type <Player> ("Camp, David", "Midfield", 22, 3), _
Type <Player> ("Kohl, Franz", "Goalkeeper", 17, 0)}
Dim Shared As Integer IDC_LISTBOX_EXAMPLE, IDC_STATISTICS
Function ListBoxExampleProc(hDlg As HWND, message As UInteger, wParam As WPARAM, lParam As LPARAM) As bool
Dim As HWND hwndList
Dim As Integer _pos, i, lbItem
Dim As ZString*MAX_PATH buff
Select Case message
Case WM_INITDIALOG
'Add items to list.
hwndList = GetDlgItem(hDlg, IDC_LISTBOX_EXAMPLE)
For i = 0 To UBound(Roster)
_pos = SendMessage(hwndList, LB_ADDSTRING, 0, Cast(LPARAM, Roster(i).achName))
'Set the array index of the player as item data.
'This enables us to retrieve the item from the array
'even after the items are sorted by the list box.
SendMessage(hwndList, LB_SETITEMDATA, _pos, Cast(LPARAM, i))
Next
'Set input focus to the list box.
SetFocus(hwndList)
Return TRUE
Case WM_COMMAND
Select Case LoWord(wParam)
Case IDOK
Case IDCANCEL
EndDialog(hDlg, LoWord(wParam))
Return TRUE
Case IDC_LISTBOX_EXAMPLE
Select Case HiWord(wParam)
Case LBN_SELCHANGE
hwndList = GetDlgItem(hDlg, IDC_LISTBOX_EXAMPLE)
'Get selected index
lbItem = SendMessage(hwndList, LB_GETCURSEL, 0, 0)
'Get item data
i = SendMessage(hwndList, LB_GETITEMDATA, lbItem, 0)
'Do something With the Data from Roster(i)
StringCbPrintf (buff, SizeOf(buff), _
"Position: %s\nGames played: %d\nGoals: %d", _
Roster(i).achPosition, Roster(i).nGamesPlayed, _
Roster(i).nGoalsScored)
SetDlgItemText(hDlg, IDC_STATISTICS, buff)
Return TRUE
End Select
End Select
Return TRUE
End Select
Return FALSE
End Function
|
Gruß
grindstone _________________ For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen! |
|
Nach oben |
|
 |
ALWIM

Anmeldungsdatum: 08.08.2006 Beiträge: 1032 Wohnort: Niederbayern
|
Verfasst am: 19.05.2017, 14:14 Titel: |
|
|
grindstone hat Folgendes geschrieben: | Hallo ALWIM
Ich habe dir das Beispiel, das zu dem von dir verlinkten Bild gehört, mal nach FB übersetzt: Code: | #Include "windows.bi"
Type Player
achName As ZString*MAX_PATH
achPosition As ZString*12
nGamesPlayed As Integer
nGoalsScored As Integer
End Type
Dim Shared As Player Roster(0 To ...) = {Type <Player> ("Haas, Jonathan", "Midfield", 18, 4), _
Type <Player> ("Pai, Jyothi", "Forward", 36, 12), _
Type <Player> ("Hanif, Kerim", "Back", 26, 0), _
Type <Player> ("Anderberg, Michael", "Back", 24, 2), _
Type <Player> ("Jelitto, Jacek", "Midfield", 26, 3), _
Type <Player> ("Raposo, Rui", "Back", 24, 3), _
Type <Player> ("Joseph, Brad", "Forward", 13, 3), _
Type <Player> ("Bouchard, Thomas", "Forward", 28, 5), _
Type <Player> ("Salmre, Ivo", "Midfield", 27, 7), _
Type <Player> ("Camp, David", "Midfield", 22, 3), _
Type <Player> ("Kohl, Franz", "Goalkeeper", 17, 0)}
Dim Shared As Integer IDC_LISTBOX_EXAMPLE, IDC_STATISTICS
Function ListBoxExampleProc(hDlg As HWND, message As UInteger, wParam As WPARAM, lParam As LPARAM) As bool
Dim As HWND hwndList
Dim As Integer _pos, i, lbItem
Dim As ZString*MAX_PATH buff
Select Case message
Case WM_INITDIALOG
'Add items to list.
hwndList = GetDlgItem(hDlg, IDC_LISTBOX_EXAMPLE)
For i = 0 To UBound(Roster)
_pos = SendMessage(hwndList, LB_ADDSTRING, 0, Cast(LPARAM, Roster(i).achName))
'Set the array index of the player as item data.
'This enables us to retrieve the item from the array
'even after the items are sorted by the list box.
SendMessage(hwndList, LB_SETITEMDATA, _pos, Cast(LPARAM, i))
Next
'Set input focus to the list box.
SetFocus(hwndList)
Return TRUE
Case WM_COMMAND
Select Case LoWord(wParam)
Case IDOK
Case IDCANCEL
EndDialog(hDlg, LoWord(wParam))
Return TRUE
Case IDC_LISTBOX_EXAMPLE
Select Case HiWord(wParam)
Case LBN_SELCHANGE
hwndList = GetDlgItem(hDlg, IDC_LISTBOX_EXAMPLE)
'Get selected index
lbItem = SendMessage(hwndList, LB_GETCURSEL, 0, 0)
'Get item data
i = SendMessage(hwndList, LB_GETITEMDATA, lbItem, 0)
'Do something With the Data from Roster(i)
StringCbPrintf (buff, SizeOf(buff), _
"Position: %s\nGames played: %d\nGoals: %d", _
Roster(i).achPosition, Roster(i).nGamesPlayed, _
Roster(i).nGoalsScored)
SetDlgItemText(hDlg, IDC_STATISTICS, buff)
Return TRUE
End Select
End Select
Return TRUE
End Select
Return FALSE
End Function
|
Gruß
grindstone | Dein Beispiel funktioniert irgendwie nicht! Es lässt sich nicht kompilieren...
Zitat: | C:\Program Files (x86)\FreeBASIC\fbc -s gui "HTML_TEST.bas"
HTML_TEST.bas(4) error 14: Expected identifier, found ' ' in ' achName As ZString*MAX_PATH'
HTML_TEST.bas(10) error 7: Expected ')', found ',' in 'Dim Shared As Player Roster(0 To ...) = {Type <Player> ("Haas, Jonathan", "Midfield", 18, 4), _'
HTML_TEST.bas(25) error 3: Expected End-of-Line, found ' ' in ' Dim As HWND hwndList'
HTML_TEST.bas(26) error 3: Expected End-of-Line, found ' ' in ' Dim As Integer _pos, i, lbItem'
HTML_TEST.bas(27) error 3: Expected End-of-Line, found ' ' in ' Dim As ZString*MAX_PATH buff'
HTML_TEST.bas(28 ) error 3: Expected End-of-Line, found ' ' in ' '
HTML_TEST.bas(29) error 3: Expected End-of-Line, found ' ' in ' Select Case message'
HTML_TEST.bas(30) error 3: Expected End-of-Line, found ' ' in ' Case WM_INITDIALOG'
HTML_TEST.bas(31) error 3: Expected End-of-Line, found ' ' in ' 'Add items to list.'
HTML_TEST.bas(32) error 3: Expected End-of-Line, found ' ' in ' hwndList = GetDlgItem(hDlg, IDC_LISTBOX_EXAMPLE)'
HTML_TEST.bas(32) error 132: Too many errors, exiting
Build error(s)
| Schaffe es nicht, die Fehlermeldungen wegzukriegen.
Ich hoffe, man kann die Liste auch in eine .txt-Datei auslagern und dann vorher einlesen? _________________ SHELL SHUTDOWN -s -t 05 |
|
Nach oben |
|
 |
grindstone
Anmeldungsdatum: 03.10.2010 Beiträge: 1175 Wohnort: Ruhrpott
|
Verfasst am: 20.05.2017, 12:12 Titel: |
|
|
Tut mir leid, deine Fehlermeldungen kann ich nicht nachvollziehen. Das einzige, was ich bei mir bekomme, ist Zitat: | listbox.bas(59) error 41: Variable not declared, StringCbPrintf in 'StringCbPrintf (buff, SizeOf(buff), _' | weil StringCbPrintf in der windows.bi offenbar nicht definiert ist, aber in FB tut's an dieser Stelle auch ein entsprechender PRINT - Befehl.
Zitat: | Ich hoffe, man kann die Liste auch in eine .txt-Datei auslagern und dann vorher einlesen? | Natürlich geht das; entweder vorher in ein Array, oder direkt in dem Block nach
Und zur Information: Das Beispiel ist NICHT das komplette Fenster, sondern "nur" eine Callback - Funktion, über die der Rücksprung der eigentlichen Fensterprozedur umgeleitet werden muß, damit man mit dem Fenster überhaupt eine sinnvolle Aufgabe erledigen kann.
Gruß
grindstone _________________ For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen! |
|
Nach oben |
|
 |
ALWIM

Anmeldungsdatum: 08.08.2006 Beiträge: 1032 Wohnort: Niederbayern
|
Verfasst am: 20.05.2017, 15:41 Titel: |
|
|
grindstone hat Folgendes geschrieben: | Tut mir leid, deine Fehlermeldungen kann ich nicht nachvollziehen. Das einzige, was ich bei mir bekomme, ist Zitat: | listbox.bas(59) error 41: Variable not declared, StringCbPrintf in 'StringCbPrintf (buff, SizeOf(buff), _' | weil StringCbPrintf in der windows.bi offenbar nicht definiert ist, aber in FB tut's an dieser Stelle auch ein entsprechender PRINT - Befehl.
Zitat: | Ich hoffe, man kann die Liste auch in eine .txt-Datei auslagern und dann vorher einlesen? | Natürlich geht das; entweder vorher in ein Array, oder direkt in dem Block nach
Und zur Information: Das Beispiel ist NICHT das komplette Fenster, sondern "nur" eine Callback - Funktion, über die der Rücksprung der eigentlichen Fensterprozedur umgeleitet werden muß, damit man mit dem Fenster überhaupt eine sinnvolle Aufgabe erledigen kann.
Gruß
grindstone |
Dass das Fenster fehlt und das Beispiel nur die Callback-Funktion ist, ist mir schon klar.
Ich habe ja folgendes gepostet:
Code: | hLinks = CreateWindow("listbox", "A",_
WS_BORDER OR WS_CHILD or WS_VISIBLE OR ES_AUTOVSCROLL OR LBS_NOTIFY,_
235, 30, 150, 122, hWnd, NULL,_
cast(LPCREATESTRUCT,lParam)->hInstance,NULL) | Damit sollte die Listbox angezeigt werden. Wie kann ich da jetzt Daten aus einer Variable anzeigen lassen?
Das Fenster habe ich erstellt; mit obigem Post, zeigt der mir ein "Listbox-Fenster" an. Jetzt fehlt nur noch der Inhalt in der Listbox! Das gepostete Beispiel bringe ich ja nicht zum laufen. Egal was ich versuche. Trotzdem Danke für die Hilfe!
Gruß
ALWIM _________________ SHELL SHUTDOWN -s -t 05 |
|
Nach oben |
|
 |
grindstone
Anmeldungsdatum: 03.10.2010 Beiträge: 1175 Wohnort: Ruhrpott
|
Verfasst am: 20.05.2017, 17:40 Titel: |
|
|
So, ich habe mal ein (hoffentlich auch bei dir) lauffähiges Beispiel zusammengebastelt: Code: | #Include "windows.bi"
Const ProgrammName = "ListBoxBeispiel"
Const IDC_LISTBOX_EXAMPLE = 1234
Type Player
achName As ZString*MAX_PATH
achPosition As ZString*12
nGamesPlayed As Integer
nGoalsScored As Integer
End Type
Dim Shared As Player Roster(0 To ...) = {Type <Player> ("Haas, Jonathan", "Midfield", 18, 4), _
Type <Player> ("Pai, Jyothi", "Forward", 36, 12), _
Type <Player> ("Hanif, Kerim", "Back", 26, 0), _
Type <Player> ("Anderberg, Michael", "Back", 24, 2), _
Type <Player> ("Jelitto, Jacek", "Midfield", 26, 3), _
Type <Player> ("Raposo, Rui", "Back", 24, 3), _
Type <Player> ("Joseph, Brad", "Forward", 13, 3), _
Type <Player> ("Bouchard, Thomas", "Forward", 28, 5), _
Type <Player> ("Salmre, Ivo", "Midfield", 27, 7), _
Type <Player> ("Camp, David", "Midfield", 22, 3), _
Type <Player> ("Kohl, Franz", "Goalkeeper", 17, 0)}
Dim As HWND hWnd
Dim As WNDCLASS wndcls
Function ListBoxExampleProc(hDlg As HWND, message As UInteger, wParam As WPARAM, lParam As LPARAM) As Integer
Dim As HWND hWnd = GetParent(hDlg)
Dim As Integer _pos, i, lbItem
Dim As ZString*MAX_PATH buff
Dim As HDC hdc
Dim As PAINTSTRUCT ps
Dim As RECT tr1 = Type<RECT>(100,200,200,500), _
tr2 = Type<RECT>(205,200,400,500)
Select Case message
Case WM_INITDIALOG, WM_CREATE
'Add items to list.
For i = 0 To UBound(Roster)
_pos = SendMessage(hDlg, LB_ADDSTRING, 0, Cast(LPARAM, @Roster(i).achName))
'Set the array index of the player as item data.
'This enables us to retrieve the item from the array
'even after the items are sorted by the list box.
SendMessage(hDlg, LB_SETITEMDATA, _pos, Cast(LPARAM, i))
Next
'Set input focus to the list box.
SetFocus(hDlg)
Return TRUE
Case WM_COMMAND
Select Case LoWord(wParam)
Case IDOK
Case IDCANCEL
EndDialog(hDlg, LoWord(wParam))
Return TRUE
Case IDC_LISTBOX_EXAMPLE
Select Case HiWord(wParam)
Case LBN_SELCHANGE
'Get selected index
lbItem = SendMessage(hDlg, LB_GETCURSEL, 0, 0)
i = SendMessage(hDlg, LB_GETITEMDATA, lbItem, 0)
'Do something With the Data from Roster(i)
InvalidateRect(hWnd, @tr1, TRUE)
InvalidateRect(hWnd, @tr2, TRUE)
hdc = BeginPaint(hWnd, @ps)
buff = "Name:" + Chr(13) +_
"Position:" + Chr(13) +_
"Games played:" + Chr(13) +_
"Goals:"
DrawText(hdc, @buff,Len(buff),@tr1, DT_RIGHT)
buff = Roster(i).achName + Chr(13) +_
Roster(i).achPosition + Chr(13) +_
Str(Roster(i).nGamesPlayed) + Chr(13) +_
Str(Roster(i).nGoalsScored)
DrawText(hdc, @buff,Len(buff),@tr2, DT_LEFT)
EndPaint(hWnd, @ps)
Return TRUE
End Select
End Select
Return TRUE
End Select
Return FALSE
End Function
Function WndProc(hWnd As HWND, message As UInteger, wParam As WPARAM, lParam As LPARAM) As LRESULT
Static As HWND hLinks
Dim As HDC hdc
Dim As PAINTSTRUCT ps
Select Case message
Case WM_DESTROY
PostQuitMessage 0
Return 0
Case WM_CREATE
hLinks = CreateWindow("listbox", "",_
WS_BORDER Or WS_CHILD Or WS_VISIBLE Or LBS_NOTIFY Or _
WS_VSCROLL Or LBS_SORT,_
235, 30, 150, 122, hWnd, Cast(HMENU, IDC_LISTBOX_EXAMPLE),_
NULL,NULL)
ListBoxExampleProc(hLinks, message, (LBN_SELCHANGE Shl 16) + IDC_LISTBOX_EXAMPLE, lParam)
Return 0
Case WM_COMMAND
ListBoxExampleProc(hLinks, message, wParam, lParam)
Return 0
End Select
Return DefWindowProc( hWnd, message, wParam, lParam )
End Function
'#################################
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
hWnd = CreateWindow(ProgrammName, ProgrammName, WS_OVERLAPPED Or WS_SYSMENU,_
CW_USEDEFAULT, CW_USEDEFAULT, 580, 510,_
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
|
Ansonsten kann ich diesen Link empfehlen:
http://www.willemer.de/informatik/windows/winlistb.htm#windowcreate
Gruß
grindstone _________________ For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen! |
|
Nach oben |
|
 |
ALWIM

Anmeldungsdatum: 08.08.2006 Beiträge: 1032 Wohnort: Niederbayern
|
Verfasst am: 20.05.2017, 19:43 Titel: |
|
|
grindstone hat Folgendes geschrieben: | So, ich habe mal ein (hoffentlich auch bei dir) lauffähiges Beispiel zusammengebastelt: Code: | #Include "windows.bi"
Const ProgrammName = "ListBoxBeispiel"
Const IDC_LISTBOX_EXAMPLE = 1234
Type Player
achName As ZString*MAX_PATH
achPosition As ZString*12
nGamesPlayed As Integer
nGoalsScored As Integer
End Type
Dim Shared As Player Roster(0 To ...) = {Type <Player> ("Haas, Jonathan", "Midfield", 18, 4), _
Type <Player> ("Pai, Jyothi", "Forward", 36, 12), _
Type <Player> ("Hanif, Kerim", "Back", 26, 0), _
Type <Player> ("Anderberg, Michael", "Back", 24, 2), _
Type <Player> ("Jelitto, Jacek", "Midfield", 26, 3), _
Type <Player> ("Raposo, Rui", "Back", 24, 3), _
Type <Player> ("Joseph, Brad", "Forward", 13, 3), _
Type <Player> ("Bouchard, Thomas", "Forward", 28, 5), _
Type <Player> ("Salmre, Ivo", "Midfield", 27, 7), _
Type <Player> ("Camp, David", "Midfield", 22, 3), _
Type <Player> ("Kohl, Franz", "Goalkeeper", 17, 0)}
Dim As HWND hWnd
Dim As WNDCLASS wndcls
Function ListBoxExampleProc(hDlg As HWND, message As UInteger, wParam As WPARAM, lParam As LPARAM) As Integer
Dim As HWND hWnd = GetParent(hDlg)
Dim As Integer _pos, i, lbItem
Dim As ZString*MAX_PATH buff
Dim As HDC hdc
Dim As PAINTSTRUCT ps
Dim As RECT tr1 = Type<RECT>(100,200,200,500), _
tr2 = Type<RECT>(205,200,400,500)
Select Case message
Case WM_INITDIALOG, WM_CREATE
'Add items to list.
For i = 0 To UBound(Roster)
_pos = SendMessage(hDlg, LB_ADDSTRING, 0, Cast(LPARAM, @Roster(i).achName))
'Set the array index of the player as item data.
'This enables us to retrieve the item from the array
'even after the items are sorted by the list box.
SendMessage(hDlg, LB_SETITEMDATA, _pos, Cast(LPARAM, i))
Next
'Set input focus to the list box.
SetFocus(hDlg)
Return TRUE
Case WM_COMMAND
Select Case LoWord(wParam)
Case IDOK
Case IDCANCEL
EndDialog(hDlg, LoWord(wParam))
Return TRUE
Case IDC_LISTBOX_EXAMPLE
Select Case HiWord(wParam)
Case LBN_SELCHANGE
'Get selected index
lbItem = SendMessage(hDlg, LB_GETCURSEL, 0, 0)
i = SendMessage(hDlg, LB_GETITEMDATA, lbItem, 0)
'Do something With the Data from Roster(i)
InvalidateRect(hWnd, @tr1, TRUE)
InvalidateRect(hWnd, @tr2, TRUE)
hdc = BeginPaint(hWnd, @ps)
buff = "Name:" + Chr(13) +_
"Position:" + Chr(13) +_
"Games played:" + Chr(13) +_
"Goals:"
DrawText(hdc, @buff,Len(buff),@tr1, DT_RIGHT)
buff = Roster(i).achName + Chr(13) +_
Roster(i).achPosition + Chr(13) +_
Str(Roster(i).nGamesPlayed) + Chr(13) +_
Str(Roster(i).nGoalsScored)
DrawText(hdc, @buff,Len(buff),@tr2, DT_LEFT)
EndPaint(hWnd, @ps)
Return TRUE
End Select
End Select
Return TRUE
End Select
Return FALSE
End Function
Function WndProc(hWnd As HWND, message As UInteger, wParam As WPARAM, lParam As LPARAM) As LRESULT
Static As HWND hLinks
Dim As HDC hdc
Dim As PAINTSTRUCT ps
Select Case message
Case WM_DESTROY
PostQuitMessage 0
Return 0
Case WM_CREATE
hLinks = CreateWindow("listbox", "",_
WS_BORDER Or WS_CHILD Or WS_VISIBLE Or LBS_NOTIFY Or _
WS_VSCROLL Or LBS_SORT,_
235, 30, 150, 122, hWnd, Cast(HMENU, IDC_LISTBOX_EXAMPLE),_
NULL,NULL)
ListBoxExampleProc(hLinks, message, (LBN_SELCHANGE Shl 16) + IDC_LISTBOX_EXAMPLE, lParam)
Return 0
Case WM_COMMAND
ListBoxExampleProc(hLinks, message, wParam, lParam)
Return 0
End Select
Return DefWindowProc( hWnd, message, wParam, lParam )
End Function
'#################################
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
hWnd = CreateWindow(ProgrammName, ProgrammName, WS_OVERLAPPED Or WS_SYSMENU,_
CW_USEDEFAULT, CW_USEDEFAULT, 580, 510,_
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
|
Ansonsten kann ich diesen Link empfehlen:
http://www.willemer.de/informatik/windows/winlistb.htm#windowcreate
Gruß
grindstone |
Bei mir funktioniert das Beispiel nicht! Welche Compilerversion wurde verwendet? Bei mir ist es die aktuellste Version 1.0.5.0! Kann es sein, dass die Bibliothek nicht die aktuellste ist? Anders kann ich mir es nicht erklären, warum das bei mir nicht funktioniert?
Schon komisch? Den Link werde ich mal genauer anschauen! Der sieht interessant aus.
Gruß
ALWIM _________________ SHELL SHUTDOWN -s -t 05 |
|
Nach oben |
|
 |
grindstone
Anmeldungsdatum: 03.10.2010 Beiträge: 1175 Wohnort: Ruhrpott
|
Verfasst am: 21.05.2017, 14:52 Titel: |
|
|
Meine Compilerversion ist 1.05.0 (32bit) mit FbEdit als Editor. Keine Ahnung, warum das bei dir nicht funktioniert. Versuch doch mal, die Zeilen mit den Fehlermeldungen von Hand einzutippen (zumindest einmal probeweise die erste Zeile in der Fehlerliste), um zu sehen, ob der Fehler dann verschwindet.
Damit du sehen kannst, wie das Ganze aussehen würde, habe ich einmal das compilierte Programm hochgeladen.
Gruß
grindstone _________________ For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen! |
|
Nach oben |
|
 |
Elor
Anmeldungsdatum: 12.07.2013 Beiträge: 205 Wohnort: Konstanz
|
Verfasst am: 21.05.2017, 17:39 Titel: |
|
|
Ich weiß zwar nicht obs euch was hilft, aber ich hab Grad mal das Beispiel unter Windows10/32 / FBC 1.0.5 Compilert und ausgeführt und es funktioniert absolut fehlerfrei.
Insofern glaube ich das du ALWIM ein Problem auf deinem System hast. Oder Arbeitest du vielleicht mit einem 64Bit System? Da hängts beim FBC nämlich auch noch in einigen Sachen. |
|
Nach oben |
|
 |
ALWIM

Anmeldungsdatum: 08.08.2006 Beiträge: 1032 Wohnort: Niederbayern
|
Verfasst am: 22.05.2017, 01:37 Titel: |
|
|
Elor hat Folgendes geschrieben: | Ich weiß zwar nicht obs euch was hilft, aber ich hab Grad mal das Beispiel unter Windows10/32 / FBC 1.0.5 Compilert und ausgeführt und es funktioniert absolut fehlerfrei.
Insofern glaube ich das du ALWIM ein Problem auf deinem System hast. Oder Arbeitest du vielleicht mit einem 64Bit System? Da hängts beim FBC nämlich auch noch in einigen Sachen. |
Ja, ich verwende einen Rechner mit 64-Bit! Dann ist es klar, warum das nicht funktioniert. Wenn der Compiler noch nicht so mitmacht, kann es nicht funktionieren! Ihr verwendet dann wahrscheinlich 32-Bit oder? Ich werde das jetzt ohne WinApi lösen. Habe da jetzt schon eine Idee. Wobei mir die WinApi-Lösung eine Idee besser gefallen hat! Sieht gut aus, dass mit der WinApi Liste.
Vielen Dank für den Hinweis mit dem Betriebssystem!
Gruß
ALWIM _________________ SHELL SHUTDOWN -s -t 05 |
|
Nach oben |
|
 |
grindstone
Anmeldungsdatum: 03.10.2010 Beiträge: 1175 Wohnort: Ruhrpott
|
Verfasst am: 22.05.2017, 10:38 Titel: |
|
|
ALWIM hat Folgendes geschrieben: | Ja, ich verwende einen Rechner mit 64-Bit! Dann ist es klar, warum das nicht funktioniert. | Ich halte es für sehr unwahrscheinlich, daß das die Ursache des Problems ist. Ein zum System passender Compiler erzeugt aus jeder (fehlerfreien) Quelldatei ein auf diesem System lauffähiges Programm. Und die anfänglichen Schwierigkeiten mit den WinAPI - Bindings nach Erscheinen des 64bit - Compilers dürften längst behoben sein (der letzte Eintrag zum Thema New Windows API headers im englischen Forum ist von 2015).
Vielleicht kann jemand mit 64bit - System den geposteten Code testen?
Gruß
grindstone _________________ For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen! |
|
Nach oben |
|
 |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1873 Wohnort: D59192
|
Verfasst am: 22.05.2017, 12:43 Titel: |
|
|
Hi,
funktioniert auch unter FB 64Bit aber mit kleinem Warnhinweis.
Zitat: | D:\FB1050_64\fbc -s gui "ListBoxBeispiel.bas"
ListBoxBeispiel.bas(125) warning 4(1): Suspicious pointer assignment
Make done |
bezieht sich auf Code: | .lpfnWndProc = ProcPtr(WndProc) |
EDIT: Code: | .lpfnWndProc = Cast(WNDPROC, @WndProc) |
_________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater. |
|
Nach oben |
|
 |
Elor
Anmeldungsdatum: 12.07.2013 Beiträge: 205 Wohnort: Konstanz
|
Verfasst am: 22.05.2017, 16:10 Titel: |
|
|
Ich sitz Grad vor einem 64Bit Windows und da Funktioniert es, abgesehen von der Warnung die volta schon beschrieben hat, auch. Komisch, da muß doch bei ALWIM voanders der Wurm drin sein oder? |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4559 Wohnort: ~/
|
Verfasst am: 22.05.2017, 18:23 Titel: |
|
|
Die Fehlermeldungen sind auf jeden Fall ziemlich seltsam, die kann ich aus "normalem Betrieb" heraus nicht zuordnen.
Interessant finde ich dagegen, dass der 64bit-Compiler in einem x84-Pfad installiert sein soll:
ALWIM hat Folgendes geschrieben: | C:\Program Files (x86)\FreeBASIC\fbc -s gui "HTML_TEST.bas" |
Da werden hoffentlich nicht 32bit- und 64bit-Komponenten gemixt? _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
St_W

Anmeldungsdatum: 22.07.2007 Beiträge: 947 Wohnort: Austria
|
Verfasst am: 23.05.2017, 13:26 Titel: |
|
|
ALWIM hat vermutlich ein 32-Bit FreeBasic auf einem 64-Bit Windows laufen. Ist aber kein Problem und keine Erklärung für die Fehlermeldungen.
@ALWIM: könntest du zum Testen vielleicht FreeBasic nue herunterladen (die ZIP/7z Variante zum probieren) und prüfen ob es damit funktioniert. Falls ja hast du vermutlich in deiner lokalen Installation einmal an den Headern und/oder Bibliotheken herumgebastelt und dabei etwas vermurkst.
Eine andere Möglichkeit könnte noch sein, dass beim Kopieren aus dem Browser irgendwelche (eventuell unsichtbare) Sonderzeichen mitkopiert wurden, die der fbc nicht mag. _________________ 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: 1032 Wohnort: Niederbayern
|
Verfasst am: 23.05.2017, 17:36 Titel: |
|
|
St_W hat Folgendes geschrieben: | ALWIM hat vermutlich ein 32-Bit FreeBasic auf einem 64-Bit Windows laufen. Ist aber kein Problem und keine Erklärung für die Fehlermeldungen.
@ALWIM: könntest du zum Testen vielleicht FreeBasic nue herunterladen (die ZIP/7z Variante zum probieren) und prüfen ob es damit funktioniert. Falls ja hast du vermutlich in deiner lokalen Installation einmal an den Headern und/oder Bibliotheken herumgebastelt und dabei etwas vermurkst.
Eine andere Möglichkeit könnte noch sein, dass beim Kopieren aus dem Browser irgendwelche (eventuell unsichtbare) Sonderzeichen mitkopiert wurden, die der fbc nicht mag. | Ich habe das ganze auf einem Laptop mit XP und 32-bit getestet! Auch da geht es nicht. Es ist wie ihr schon sagtet bzw. ich oben geschrieben habe, möglicherweise ein Problem mit den Bibliotheken! Werde Freebasic nochmals neu runterladen und testen. Irgendwo muss doch das Problem liegen?
Zitat: | Eine andere Möglichkeit könnte noch sein, dass beim Kopieren aus dem Browser irgendwelche (eventuell unsichtbare) Sonderzeichen mitkopiert wurden, die der fbc nicht mag.
| Das kann ich ausschließen, da ich Buchstabe für Buchstabe selber eingegeben habe!
Edit:
Problem wurde gefunden! Beim kopieren aus dem Browser heraus, wurden tatsächlich Zeichen mit kopiert, die der Compiler nicht schluckt!!! Diese Leerzeichen waren dran schuld! Dachte zunächst, dass es an dem Kopieren nicht liegen kann, aber ich habe mich doch etwas getäuscht. Leerzeichen entfernt und schon klappt es. Nur noch 1 Fehlermeldung, aber die kriege ich alleine weg. Da fehlt jetzt noch eine Deklarierung und dann sollte es klappen! Der Tipp mit dem Kopieren war gut!!!
War schon ein wenig am Verzweifeln...
Edit2:
Jetzt klappt es! Hehehe...
Für welche Lösung ich mich nun entscheide, weiß ich noch nicht? Angefangen habe ich jetzt mal das ganze selber zu schreiben, ohne WinApi! Wenn ich wüsste, ob man da auch eine Eintragssuche machen kann, würde ich vielleicht doch auf die WinApi Funktion zurückgreifen? Zumindest habe ich was, womit man arbeiten kann.
Ich bedanke mich recht herzlich, bei allen für die Hilfe!
Gruß
ALWIM _________________ SHELL SHUTDOWN -s -t 05
Zuletzt bearbeitet von ALWIM am 24.05.2017, 00:14, insgesamt einmal bearbeitet |
|
Nach oben |
|
 |
grindstone
Anmeldungsdatum: 03.10.2010 Beiträge: 1175 Wohnort: Ruhrpott
|
Verfasst am: 23.05.2017, 20:23 Titel: |
|
|
Hallo ALWIM!
Schön, daß es doch noch geklappt hat.
Hier noch eine Version, bei der die Daten nicht aus einem Array, sondern wie gewünscht aus aus einer Datei gelesen werden. Die Lese- und Schreibroutinen sind als Property in den Type eingebettet. Du brauchst nur noch die Datei im entsprechenden Modus zu öffnen (Input, Output oder Append), und die Dateinummer in die entsprechende Variable (.lesen / .schreiben) zu schreiben. Die Property liest bzw schreibt dann einen kompletten Datensatz aus der bzw. in die Datei. Ein Leerstring als Rückgabewert bedeutet Dateiende. Code: | #Include "windows.bi"
Const ProgrammName = "ListBoxBeispiel"
Const IDC_LISTBOX_EXAMPLE = 1234
Type Player
achName As ZString*MAX_PATH
achPosition As ZString*12
nGamesPlayed As Integer
nGoalsScored As Integer
Declare Property lesen(fnr As Integer)
Declare Property schreiben(fnr As Integer)
End Type
Property Player.lesen(fnr As Integer)
achName = ""
achPosition = ""
nGamesPlayed = 0
nGoalsScored = 0
If Eof(fnr) Then
Return
Else
Line Input #fnr, achName
Line Input #fnr, achPosition
Input #fnr, nGamesPlayed
Input #fnr, nGoalsScored
EndIf
End Property
Property Player.schreiben(fnr As Integer)
Print #fnr, achName
Print #fnr, achPosition
Print #fnr, nGamesPlayed
Print #fnr, nGoalsScored
End Property
Dim As HWND hWnd
Dim As WNDCLASS wndcls
Dim Shared As String datei
datei = ExePath + "\daten.txt"
'------------ TESTDATEI ERSTELLEN -------------------------------------------
Dim As Integer ff
Dim As Player Roster(0 To ...) = {Type <Player> ("Haas, Jonathan", "Midfield", 18, 4), _
Type <Player> ("Pai, Jyothi", "Forward", 36, 12), _
Type <Player> ("Hanif, Kerim", "Back", 26, 0), _
Type <Player> ("Anderberg, Michael", "Back", 24, 2), _
Type <Player> ("Jelitto, Jacek", "Midfield", 26, 3), _
Type <Player> ("Raposo, Rui", "Back", 24, 3), _
Type <Player> ("Joseph, Brad", "Forward", 13, 3), _
Type <Player> ("Bouchard, Thomas", "Forward", 28, 5), _
Type <Player> ("Salmre, Ivo", "Midfield", 27, 7), _
Type <Player> ("Camp, David", "Midfield", 22, 3), _
Type <Player> ("Kohl, Franz", "Goalkeeper", 17, 0)}
'Datei aus Array erstellen
ff = FreeFile
Open datei For Output As #ff
For x As Integer = 0 To UBound(Roster)
roster(x).schreiben = ff
Next
Close ff
'----------------------------------------------------------------------------
Function ListBoxExampleProc(hDlg As HWND, message As UInteger, wParam As WPARAM, lParam As LPARAM) As Integer
Dim As HWND hWnd = GetParent(hDlg)
Dim As Integer _pos, i, lbItem, zaehler, ff
Dim As ZString*MAX_PATH buff
Dim As HDC hdc
Dim As PAINTSTRUCT ps
Dim As RECT tr1 = Type<RECT>(100,200,200,500), _
tr2 = Type<RECT>(205,200,400,500)
Dim As Player pl
Select Case message
Case WM_INITDIALOG, WM_CREATE
'Add items to list.
ff = FreeFile
Open datei For Input As #ff
zaehler = 0
Do
pl.lesen = ff 'liest einen datensatz aus der datei
If pl.achName = "" Then 'dateiende
Exit Do
EndIf
_pos = SendMessage(hDlg, LB_ADDSTRING, 0, Cast(LPARAM, @pl.achName))
'Set the array index of the player as item data.
'This enables us to retrieve the item from the array
'even after the items are sorted by the list box.
SendMessage(hDlg, LB_SETITEMDATA, _pos, Cast(LPARAM, zaehler))
zaehler += 1
Loop
'Set input focus to the list box.
SetFocus(hDlg)
Return TRUE
Case WM_COMMAND
Select Case LoWord(wParam)
Case IDOK
Case IDCANCEL
EndDialog(hDlg, LoWord(wParam))
Return TRUE
Case IDC_LISTBOX_EXAMPLE
Select Case HiWord(wParam)
Case LBN_SELCHANGE
'Get selected index
lbItem = SendMessage(hDlg, LB_GETCURSEL, 0, 0)
ff = FreeFile
Open datei For Input As #ff
'bis zum gesuchten datensatz lesen
For i = 0 To SendMessage(hDlg, LB_GETITEMDATA, lbItem, 0)
pl.lesen = ff
Next
Close ff
'Do something With the Data from Roster(i)
InvalidateRect(hWnd, @tr1, TRUE)
InvalidateRect(hWnd, @tr2, TRUE)
hdc = BeginPaint(hWnd, @ps)
buff = "Name:" + Chr(13) +_
"Position:" + Chr(13) +_
"Games played:" + Chr(13) +_
"Goals:"
DrawText(hdc, @buff,Len(buff),@tr1, DT_RIGHT)
buff = pl.achName + Chr(13) +_
pl.achPosition + Chr(13) +_
Str(pl.nGamesPlayed) + Chr(13) +_
Str(pl.nGoalsScored)
DrawText(hdc, @buff,Len(buff),@tr2, DT_LEFT)
EndPaint(hWnd, @ps)
Return TRUE
End Select
End Select
Return TRUE
End Select
Return FALSE
End Function
Function WndProc(hWnd As HWND, message As UInteger, wParam As WPARAM, lParam As LPARAM) As LRESULT
Static As HWND hLinks
Dim As HDC hdc
Dim As PAINTSTRUCT ps
Select Case message
Case WM_DESTROY
PostQuitMessage 0
Return 0
Case WM_CREATE
hLinks = CreateWindow("listbox", "",_
WS_BORDER Or WS_CHILD Or WS_VISIBLE Or LBS_NOTIFY Or _
WS_VSCROLL Or LBS_SORT,_
235, 30, 150, 122, hWnd, Cast(HMENU, IDC_LISTBOX_EXAMPLE),_
NULL,NULL)
ListBoxExampleProc(hLinks, message, (LBN_SELCHANGE Shl 16) + IDC_LISTBOX_EXAMPLE, lParam)
Return 0
Case WM_COMMAND
ListBoxExampleProc(hLinks, message, wParam, lParam)
Return 0
End Select
Return DefWindowProc( hWnd, message, wParam, lParam )
End Function
'#################################
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
hWnd = CreateWindow(ProgrammName, ProgrammName, WS_OVERLAPPED Or WS_SYSMENU,_
CW_USEDEFAULT, CW_USEDEFAULT, 580, 510,_
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
|
Gruß
grindstone _________________ For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen! |
|
Nach oben |
|
 |
ALWIM

Anmeldungsdatum: 08.08.2006 Beiträge: 1032 Wohnort: Niederbayern
|
Verfasst am: 24.05.2017, 00:12 Titel: |
|
|
grindstone hat Folgendes geschrieben: | Hallo ALWIM!
Schön, daß es doch noch geklappt hat.
Hier noch eine Version, bei der die Daten nicht aus einem Array, sondern wie gewünscht aus aus einer Datei gelesen werden. Die Lese- und Schreibroutinen sind als Property in den Type eingebettet. Du brauchst nur noch die Datei im entsprechenden Modus zu öffnen (Input, Output oder Append), und die Dateinummer in die entsprechende Variable (.lesen / .schreiben) zu schreiben. Die Property liest bzw schreibt dann einen kompletten Datensatz aus der bzw. in die Datei. Ein Leerstring als Rückgabewert bedeutet Dateiende. Code: | #Include "windows.bi"
Const ProgrammName = "ListBoxBeispiel"
Const IDC_LISTBOX_EXAMPLE = 1234
Type Player
achName As ZString*MAX_PATH
achPosition As ZString*12
nGamesPlayed As Integer
nGoalsScored As Integer
Declare Property lesen(fnr As Integer)
Declare Property schreiben(fnr As Integer)
End Type
Property Player.lesen(fnr As Integer)
achName = ""
achPosition = ""
nGamesPlayed = 0
nGoalsScored = 0
If Eof(fnr) Then
Return
Else
Line Input #fnr, achName
Line Input #fnr, achPosition
Input #fnr, nGamesPlayed
Input #fnr, nGoalsScored
EndIf
End Property
Property Player.schreiben(fnr As Integer)
Print #fnr, achName
Print #fnr, achPosition
Print #fnr, nGamesPlayed
Print #fnr, nGoalsScored
End Property
Dim As HWND hWnd
Dim As WNDCLASS wndcls
Dim Shared As String datei
datei = ExePath + "\daten.txt"
'------------ TESTDATEI ERSTELLEN -------------------------------------------
Dim As Integer ff
Dim As Player Roster(0 To ...) = {Type <Player> ("Haas, Jonathan", "Midfield", 18, 4), _
Type <Player> ("Pai, Jyothi", "Forward", 36, 12), _
Type <Player> ("Hanif, Kerim", "Back", 26, 0), _
Type <Player> ("Anderberg, Michael", "Back", 24, 2), _
Type <Player> ("Jelitto, Jacek", "Midfield", 26, 3), _
Type <Player> ("Raposo, Rui", "Back", 24, 3), _
Type <Player> ("Joseph, Brad", "Forward", 13, 3), _
Type <Player> ("Bouchard, Thomas", "Forward", 28, 5), _
Type <Player> ("Salmre, Ivo", "Midfield", 27, 7), _
Type <Player> ("Camp, David", "Midfield", 22, 3), _
Type <Player> ("Kohl, Franz", "Goalkeeper", 17, 0)}
'Datei aus Array erstellen
ff = FreeFile
Open datei For Output As #ff
For x As Integer = 0 To UBound(Roster)
roster(x).schreiben = ff
Next
Close ff
'----------------------------------------------------------------------------
Function ListBoxExampleProc(hDlg As HWND, message As UInteger, wParam As WPARAM, lParam As LPARAM) As Integer
Dim As HWND hWnd = GetParent(hDlg)
Dim As Integer _pos, i, lbItem, zaehler, ff
Dim As ZString*MAX_PATH buff
Dim As HDC hdc
Dim As PAINTSTRUCT ps
Dim As RECT tr1 = Type<RECT>(100,200,200,500), _
tr2 = Type<RECT>(205,200,400,500)
Dim As Player pl
Select Case message
Case WM_INITDIALOG, WM_CREATE
'Add items to list.
ff = FreeFile
Open datei For Input As #ff
zaehler = 0
Do
pl.lesen = ff 'liest einen datensatz aus der datei
If pl.achName = "" Then 'dateiende
Exit Do
EndIf
_pos = SendMessage(hDlg, LB_ADDSTRING, 0, Cast(LPARAM, @pl.achName))
'Set the array index of the player as item data.
'This enables us to retrieve the item from the array
'even after the items are sorted by the list box.
SendMessage(hDlg, LB_SETITEMDATA, _pos, Cast(LPARAM, zaehler))
zaehler += 1
Loop
'Set input focus to the list box.
SetFocus(hDlg)
Return TRUE
Case WM_COMMAND
Select Case LoWord(wParam)
Case IDOK
Case IDCANCEL
EndDialog(hDlg, LoWord(wParam))
Return TRUE
Case IDC_LISTBOX_EXAMPLE
Select Case HiWord(wParam)
Case LBN_SELCHANGE
'Get selected index
lbItem = SendMessage(hDlg, LB_GETCURSEL, 0, 0)
ff = FreeFile
Open datei For Input As #ff
'bis zum gesuchten datensatz lesen
For i = 0 To SendMessage(hDlg, LB_GETITEMDATA, lbItem, 0)
pl.lesen = ff
Next
Close ff
'Do something With the Data from Roster(i)
InvalidateRect(hWnd, @tr1, TRUE)
InvalidateRect(hWnd, @tr2, TRUE)
hdc = BeginPaint(hWnd, @ps)
buff = "Name:" + Chr(13) +_
"Position:" + Chr(13) +_
"Games played:" + Chr(13) +_
"Goals:"
DrawText(hdc, @buff,Len(buff),@tr1, DT_RIGHT)
buff = pl.achName + Chr(13) +_
pl.achPosition + Chr(13) +_
Str(pl.nGamesPlayed) + Chr(13) +_
Str(pl.nGoalsScored)
DrawText(hdc, @buff,Len(buff),@tr2, DT_LEFT)
EndPaint(hWnd, @ps)
Return TRUE
End Select
End Select
Return TRUE
End Select
Return FALSE
End Function
Function WndProc(hWnd As HWND, message As UInteger, wParam As WPARAM, lParam As LPARAM) As LRESULT
Static As HWND hLinks
Dim As HDC hdc
Dim As PAINTSTRUCT ps
Select Case message
Case WM_DESTROY
PostQuitMessage 0
Return 0
Case WM_CREATE
hLinks = CreateWindow("listbox", "",_
WS_BORDER Or WS_CHILD Or WS_VISIBLE Or LBS_NOTIFY Or _
WS_VSCROLL Or LBS_SORT,_
235, 30, 150, 122, hWnd, Cast(HMENU, IDC_LISTBOX_EXAMPLE),_
NULL,NULL)
ListBoxExampleProc(hLinks, message, (LBN_SELCHANGE Shl 16) + IDC_LISTBOX_EXAMPLE, lParam)
Return 0
Case WM_COMMAND
ListBoxExampleProc(hLinks, message, wParam, lParam)
Return 0
End Select
Return DefWindowProc( hWnd, message, wParam, lParam )
End Function
'#################################
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
hWnd = CreateWindow(ProgrammName, ProgrammName, WS_OVERLAPPED Or WS_SYSMENU,_
CW_USEDEFAULT, CW_USEDEFAULT, 580, 510,_
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
|
Gruß
grindstone | Vielen herzlichen Dank, aber das hätte ich selber auch noch hinbekommen!
An so was banales, wie den fehlerhaften Quellcode denkt man am Anfang gar nicht! Der Quellcode sieht auf den ersten Blick ja nicht fehlerhaft aus.
Gruß
ALWIM _________________ SHELL SHUTDOWN -s -t 05 |
|
Nach oben |
|
 |
ALWIM

Anmeldungsdatum: 08.08.2006 Beiträge: 1032 Wohnort: Niederbayern
|
Verfasst am: 13.08.2021, 17:27 Titel: |
|
|
Ich muss jetzt den Titel nochmals ausgraben. Bei den geposteten Beispielen wird die Listbox mit Zstrings befüllt. Was mache ich, wenn ich ganz normale Strings habe? Wie befülle ich die Listbox durch solche Variablen:
Code: | DIM AS STRING AUTO(0 TO 4)
Auto(1) = "BWM"
Auto(2) = "Mini"
Auto(3) = "Rolls Royce"
Auto(4) = "Tesla" |
Sobald ich die Variablen so wie oben verwende, dann zeigt der mir in der Listbox kryptische Zeichen an! Auf jeden Fall nicht das, was ich will. Oder zum Teil gar nichts.
Ich müsste irgendwie STRINGS in ZSTRINGS umwandeln, oder von Haus aus STRINGS verwenden können? _________________ SHELL SHUTDOWN -s -t 05 |
|
Nach oben |
|
 |
grindstone
Anmeldungsdatum: 03.10.2010 Beiträge: 1175 Wohnort: Ruhrpott
|
Verfasst am: 14.08.2021, 17:31 Titel: |
|
|
Die Pointerübergabe direkt aus einem Array funktioniert nicht, die WinAPI mag offenbar keine FB - Arrays.
Mit einem Hilfsstring lässt sie sich aber recht einfach überlisten: Code: | ...
Dim As String g = Auto(x) + Chr(0)
_pos = SendMessage(hDlg, LB_ADDSTRING, 0, Cast(LPARAM, StrPtr(g)))
... |
Gruß
grindstone _________________ For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen! |
|
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.
|
|