 |
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 |
Elektronix
Anmeldungsdatum: 29.06.2006 Beiträge: 742
|
Verfasst am: 04.07.2009, 17:03 Titel: Toolbar funktioniert nicht (erledigt) |
|
|
Hallo, ihr Lieben,
ich versuche eine Toolbar (Symbolleiste) mit drei Schaltflächen zu erstellen. Die Symbole dazu sind in einer gemeinsamen Bitmap abgelegt, die über die Resourcendatei geladen und über Indices mit dem Schaltflächen verknüpft wird. Folgendes Problem:
Auf der ersten schaltfläche erscheint richtig das erste Symbol, auf der zweiten erscheint jedoch das dritte Symbol. Auf der dritten Schaltfläche erscheint wiederum das erste Symbol, aber gegraut, und die Schalfläche ist inaktiviert. das zweite Symbol erscheint überhaupt nicht. Außerdem werden die IDs nicht in der WM_COMMAND übermittelt.
Dieses Fehlerbild ergibt sich seltsamerweise nur, wenn ich die TB_ADDBUTTONS-Nachricht in der Schleife an die Toolbar sende. Wenn ich das einzeln bei jedem Button mache, sieht der Fehler ganz anders aus. Schwer zu verstehen.
Hier ist der Code dazu:
Code: | function Fenster(byval hWnd as HWND, byval message as UINTEGER,_ 'Nachrichtenauswertung
byval wParam as WPARAM, byval lParam as LPARAM) as LRESULT
Dim As Integer Numbuttons = 3
Dim As HWND hToolBar
Select Case message
Case WM_CREATE
'****** Erstellen der Toolbar ********
Dim As INITCOMMONCONTROLSEX InitComEx
With InitComEx
.dwSize = Len(InitCommonControlsEx)
.dwICC = ICC_BAR_CLASSES
End With
InitCommonControlsEx(@InitComEx)
'##### Es reicht auch "InitCommonControls() ohne UDT"
hToolBar = CreateWindowEx(0, _
TOOLBARCLASSNAME, _
cast(LPSTR,NULL), _
WS_CHILD or WS_VISIBLE, _
0, 0, 0, 0, _
hwnd, _
NULL, _
hInst, _
NULL)
Dim As TBBUTTON ToolButton(Numbuttons)
Dim As TBADDBITMAP bitid
With bitid
.hInst = hInst
/'##### GetModuleHandle(NULL) oder hInst- falls diese vorher mit
GetModuleHandle gesichert oder global (shared) declariert wurde!!!
Das nur, wenn die Bitmap
aus einer Datei geladen wird. Ansonten NULL.'/
.nID = IDB_BITMAP3
End With
Dim Index As Integer = SendMessage(hToolBar, TB_BUTTONSTRUCTSIZE, Len(TBBUTTON), 0)
SendMessage(hToolBar, TB_ADDBITMAP, Numbuttons, Cast(LPARAM,@bitid))
'Sendet das Bitmap an die Toolbar
/'##### Manch einer unternimmt bei Len(TBBUTTON) und Numbuttons ein Typecasting zu WPARAM,
ist aber nicht unbedingt notwendig'/
'*** Erstellen der Buttons ***
With Toolbutton(1)
'.iBitmap = 0
.idCommand = IDM_TB_EXIT
.fsState = TBSTATE_ENABLED
.fsStyle = TBSTYLE_BUTTON
.dwData = 0
.iString = 0
End With
With Toolbutton(2)
'.iBitmap = 1
.idCommand = IDM_TB_HIDESHOW
.fsState = TBSTATE_ENABLED
.fsStyle = TBSTYLE_BUTTON
.dwData = 0
.iString = 0
End With
With Toolbutton(3)
'.iBitmap = 2
.idCommand = IDM_TB_SHOW
.fsState = TBSTATE_ENABLED
.fsStyle = TBSTYLE_BUTTON
.dwData = 0
.iString = 0
End With'/
Dim i As Integer
For i = 1 To Numbuttons
'Verknüpft die Buttons mit der Toolbar und die Bitmaps mit den Buttons
Toolbutton(i).iBitmap = 1'i-1 ergibt falsches Ergebnis
SendMessage(hToolBar, TB_ADDBUTTONS, Cast(Integer,i-1), Cast(Integer,@ToolButton(Numbuttons)))
Next i
'******************************************************************************
Case WM_COMMAND
Select Case LoWord(wParam)
Case IDM_FILE_EXIT
DestroyWindow(hWnd)
Return (0)
Case IDM_TB_EXIT
MessageBox(hWnd, "erste Schaltfläche gedrückt", "Symbolleiste", MB_OK)
Case IDM_TB_HIDESHOW
MessageBox(hWnd, "zweite Schaltfläche gedrückt", "Symbolleiste", MB_OK)
End select
Case WM_DESTROY
PostQuitMessage (0)
return 0
Case else
return DefWindowProc(hWnd, message, wParam, lParam)
End select
end Function
|
An der Größe der Bitmapsliegt es nicht, habe schon mit TB_SETBITMAPSIZE experimentiert, hat aber nix gebracht.
Was mache ich da falsch?
Das Programm ist eine Übersetzung aus einem C-Prog, dort läuft das problemlos. Vielleicht kennt jemand ein Tutorial für Toolbars in FB? _________________ Und die Grundgebihr is aa scho drin- DOS is jo nett.
Zuletzt bearbeitet von Elektronix am 17.07.2009, 11:08, insgesamt einmal bearbeitet |
|
Nach oben |
|
 |
28398
Anmeldungsdatum: 25.04.2008 Beiträge: 1917
|
Verfasst am: 10.07.2009, 10:10 Titel: |
|
|
Ich habe bis jetzt nur den Toolbarmaker von FBEdit benutzt, allerdings gab es da auch manchmal Probleme, dass man die TB einfach nicht gesehen hat, oder sie keine Bilder hat etc.
Den Grund dafür habe ich nie gefunden, es war irgendwie Glücksspiel. Bei einigen Progs hats funktioniert bei anderen wiederrum nicht - auch ohne nennenswerten Unterschied im Programm selbst. |
|
Nach oben |
|
 |
Elektronix
Anmeldungsdatum: 29.06.2006 Beiträge: 742
|
Verfasst am: 10.07.2009, 13:11 Titel: |
|
|
Hurra - eine Antwort nach 6 Tagen!!!
Toolbarmaker in FBEdit? Wo finde ich denn den? _________________ Und die Grundgebihr is aa scho drin- DOS is jo nett. |
|
Nach oben |
|
 |
Elektronix
Anmeldungsdatum: 29.06.2006 Beiträge: 742
|
Verfasst am: 17.07.2009, 11:15 Titel: |
|
|
So, die Toolbar funktioniert endlich, hat einigen Schweiß gekostet. Ich habe mich an den Beispielen im Examples-Ordner von FBEdit orientiert. Das Vorgehen ist an einigen Stellen anders, als ich es unter Borland C++ gewohnt war.
Mir scheint allerdings, daß FBEdit noch von einigen Bugs geplagt wird. Die neuste Version (1.0.7.0) compiliert mein Prog ganz anders als die frühere, vor allem zeigt die neue immer noch das Consolen-Fenster trotz der Compiler-Option -s gui. Auch einige andere Fehler tauchen darin auf. Irgendwie ziehe ich die alte Version vor.
Der ToolbarMaker ist irgendwie nicht wirklich hilfreich, denn das Verfahren damit ist gänzlich anders als die "normale" Routine in den Examples. Oder ich habs noch nicht wirklich geschnallt...  _________________ Und die Grundgebihr is aa scho drin- DOS is jo nett. |
|
Nach oben |
|
 |
28398
Anmeldungsdatum: 25.04.2008 Beiträge: 1917
|
Verfasst am: 17.07.2009, 12:05 Titel: |
|
|
In der Hilfe ist ein Tutorial dazu  |
|
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.
|
|