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:

WinAPI kleinere und größere Problemchen :)
Gehe zu Seite 1, 2  Weiter
 
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
Eternal_pain



Anmeldungsdatum: 08.08.2006
Beiträge: 1783
Wohnort: BW/KA

BeitragVerfasst am: 07.03.2014, 14:34    Titel: WinAPI kleinere und größere Problemchen :) Antworten mit Zitat

Hab nun mal von vorne angefangen... und erstmal eine kleine Fensterklasse geschrieben die soweit auch funktioniert...

Jetzt wollte ich aber wenn ich ein Fenster schließe diese 'behandeln' daten löschen, zähler setzen ect... aber immer wenn ich vor oder hinter PostQuitMessage(0) bei WM_DESTROY und/oder WM_CLOSE was setze wird es nicht ausgeführt...

wie muss ich das richtig behandeln?

In Window_Ext_Window.bas hab ich unten das kurze Beispiel zum testen drin mit ein paar fenster.
Die WndProc ist in Window_Ext.bas die noch die Window_Ext.bi benötigt...

Wenn ich nun ein Fenster schließe soll in der WndProc die FensterListe entsprechend geändert werden (Eintrag löschen = speicher freigeben und zähler neu setzen)
Was ungefähr so aussehen sollte
Code:
            DestroyWindow(Cast(Node_Windows ptr,CDTPTR)->WindowHandle)
            Globals.WindowList.DelWindow(Cast(Node_Windows ptr,CDTPTR))       
            If Globals.WindowList.WindowCount = 0 Then end


Edit: Problem Gefunden weinen
Zitat:
....ght-boundb.left,boundb.bottom-boundb.top,cast(HWND,p),NULL,Globals.hInstance,@NewWin)

_________________
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
Eternal_pain



Anmeldungsdatum: 08.08.2006
Beiträge: 1783
Wohnort: BW/KA

BeitragVerfasst am: 07.03.2014, 18:39    Titel: ParentWindows und ChildWindows Antworten mit Zitat

Bin nun grad meine Windowsklasse am testen und experimentieren...

Jetzt hab ich ein Childwindow in einem ParentWindow... funktioniert soweit... problem ist, wie handle ich es am sinnvollsten das wenn ich das parent schließe, auch die daten vom child gelöscht werden (das fenster selbst verschwindet ja mit dem parent, aber die daten bleiben im speicher)

Edit: bin heut zu voreilig... gelöst...

Code:

'...
'...
'******************************************************************************************************************************************************************************************************************'
' ENUMPROC
Function EnumProc(byval h_wnd as HWND, byval lParam as LPARAM) as LRESULT
    Static as Integer           Question
    Dim as Integer              Retval
    Dim as String               WindowText
    Dim as String               WindowClass
    Dim as Node_Windows ptr     Temp
   

   
    ' Fenstertext ermitteln
    WindowText  = Space(GetWindowTextLength(h_wnd) + 1)
    Retval      = GetWindowText(h_wnd, WindowText, Len(WindowText))
    WindowText  = Left(WindowText, Retval)

    ' Fensterklasse ermitteln
    WindowClass = Space(256)
    Retval      = GetClassName(h_wnd, WindowClass, Len(WindowClass))
    WindowClass = Left(WindowClass, Retval)
   
    If (WindowClass = Globals.ClassName) Then
        Temp = Globals.WindowList.FirstWindow
       
        For l as Integer = 0 to Globals.WindowList.WindowCount-1
            If Temp andalso Temp->WindowHandle = h_wnd Then
                cast(integer ptr,lParam)[0] += 1
                Exit For
            End If

            Temp = Temp -> NextWindow
        Next l
       
        If Temp Then
            If Question = 0 Then
                If MessageBox(NULL,"The Window contains one or more ChildWindows! Are you sure to close","Warning!", MB_YESNO) = IDYES Then
                    Question = 1
                    If Question Then cast(integer ptr,lParam)[0] = FALSE
                Else
                    return TRUE
                End If
            End If
            'destroy childs
            DestroyWindow(Temp -> WindowHandle)
            Globals.WindowList.DelWindow(Temp)       
            return TRUE
        End If
    End If
    If Question Then cast(integer ptr,lParam)[0] = FALSE
    Question = 0
    return TRUE
End Function


Namespace Message ' Standard Message Handles
    Function Msg_WM_CLOSE(byref CDTPTR as any ptr) as Integer
        If (CDTPTR = 0) Then return 0
        Dim as Integer  ChildWarn = 0
        Dim as HWND     WindowHandle = Cast(Node_Windows ptr, CDTPTR) -> WindowHandle
       
        EnumChildWindows(WindowHandle, @EnumProc, @ChildWarn)
       
        If ChildWarn = FALSE Then
            DestroyWindow(WindowHandle)
            Globals.WindowList.DelWindow(Cast(Node_Windows ptr,CDTPTR))       
            If Globals.WindowList.WindowCount = 0 Then end 
        End If
       
        return FALSE
    End Function
End Namespace
'...
'...

_________________
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
Eternal_pain



Anmeldungsdatum: 08.08.2006
Beiträge: 1783
Wohnort: BW/KA

BeitragVerfasst am: 08.03.2014, 16:52    Titel: Antworten mit Zitat

Versuche grad mein erstes Gadget mit einzubinden... eine Textbox, dabei ergeben sich mehere Probleme



1. Das Childfenster sollte nicht von einem Gadget verdeckt werden:
Muss ich da eine Message im Fenster oder im Gadget behandeln?
Und welche?

2. Bei der Textbox würd ich gern mit ESC und ENTER arbeiten... in beiden fällen soll der fokus auf die box weg...
bei esc möchte ich den alten zustand herstelen (oldtext) und enter halt neu setzten, das wär aber eher intern...
laut msdn wird bei enter auf ein standardbutton verwiesen, so eins habe ich nicht
und weiß auch nicht wie ich eines definieren soll... derzeit macht es immer nur 'BING'

Ok, Fokus und Sound ist erledigt:
Code:
       case WM_CHAR
         Select case lobyte(wParam)
                Case VK_ESCAPE
                    Return FALSE
                Case VK_RETURN
                    RETURN FALSE
            End Select           
       
        case WM_KEYDOWN
         Select case lobyte(wParam)
                Case VK_ESCAPE
                    ?"ESC"   ''Alten String wieder herstellen und Focus verlassen
                    SetFocus(Cast(EditData ptr,EDTPTR)->WindowHandle)
                    Return TRUE
                Case VK_RETURN
                    ?"ENTER" ''Neuen String setzen und Fokus verlassen
                    SetFocus(Cast(EditData ptr,EDTPTR)->WindowHandle)
                    RETURN TRUE
            End Select


Das mit dem Childfenster ist aber noch immer ein Problem
_________________
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
Eternal_pain



Anmeldungsdatum: 08.08.2006
Beiträge: 1783
Wohnort: BW/KA

BeitragVerfasst am: 17.03.2014, 02:29    Titel: Antworten mit Zitat

Inzwischen geht das meiste eigentlich recht zuverlässig,
aber nun hab ich Probleme mit den Tabstops

Mit Tab soll man ins nächste Control wechseln angeführt einem
WS_GROUP Element und Controls mit WS_TABSTOP Style

Im Grunde funktioniert auch alles, wenn ich im Fokus ein Control habe
kann ich ins nächste wechseln, alles prima... in einem vorherigen
Versuch klappte auch was nun nicht mehr geht ohne das ich einen
gravierenden Unterschied zwischen beiden Versuchen finden kann.

Wenn ich mein Programm starte steht das Fenster im Fokus ohne ein
Control ausgewählt zu haben... wenn ich nun TAB drücke will ich ins erste
Control wechseln (so das man halt auch alles ohne Maus steuern kann)

Wie gesagt hatte es in einem vorherigen versuch geklappt, aber es gibt
keine Unterschiede zu meinem jetztigen und hier klappt es leider nicht...


Meine Fenster styles
Code:
Style:WS_TABSTOP OR WS_GROUP OR WS_VISIBLE OR WS_CLIPSIBLINGS OR WS_CLIPCHILDREN OR WS_CAPTION OR WS_OVERLAPPED OR WS_SYSMENU OR WS_MINIMIZEBOX
ExStyle:WS_EX_CLIENTEDGE OR WS_EX_CONTROLPARENT


Das setzen des Globalen Handles für die Messageloop
Code:
        Case WM_ACTIVATE
            If wParam Then   
                Globals.tabstophandle = h_Wnd
            Else
                Globals.tabstophandle = NULL
            End If
            return FALSE

Alternativ könnte ich auch ItemData -> whwnd setzen, sind aber immer identisch zu h_Wnd

Und hier die Messageloop die ich in meiner Mainloop aufrufe
Code:

Sub Win_Ext_Update(byval break as integer = 0)
    Dim as MSG      u_Msg   
    '
   
    while PeekMessage(@u_Msg,NULL,0,0,PM_REMOVE) 'Then
        If (Globals.tabstophandle = NULL) orelse (IsDialogMessage(Globals.tabstophandle, @u_Msg) = NULL) Then
            TranslateMessage(@u_Msg)
            DispatchMessage(@u_Msg)
        End If
    wend'End If

    If break Then sleep break
End Sub


Es macht übrigens auch keinen unterschied of ich While/Wend oder If/Then benutze...

Wie gesagt funktioniert das Tabben ja eigentlich, aber erst dann wenn ich
bereits im Fokus eines Kontrols durch mausklick bin.

Edit:
Ich hatte in meiner Proc bei der Verarbeitung der WM_GETDLGCODE immer DLGC_WANTMESSAGE zurückgegeben um einige Dinge weiterverarbeiten zu können, es macht bisher jedoch keine probleme wenn ich 0 zurückgebe und das Tab vom Fenster aus ins erste Control funktioniert tadellos...
_________________
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
Eternal_pain



Anmeldungsdatum: 08.08.2006
Beiträge: 1783
Wohnort: BW/KA

BeitragVerfasst am: 17.03.2014, 19:13    Titel: Antworten mit Zitat

Inzwischen bin ich wieder bei meiner ImageDropDown angekommen,
diese kann sich nach bedarf automatisch anpassen oder eine fixe Größe
haben, mit Tab erreichbar und mit Pfeiltasten (und natürlich Maus) auswählbar...

Was mich allerdings stört ist die Optik bei der Auswahl.. ich kenne zwar
DrawFocusRect... und hab auch schon ein kleines highlight drum 'gemalt'
aber ich hätte doch lieber dieses standard selectieren.. also ein
transparentes rectangle in highlightfarbe... weiß leider nicht wie ich das
anstellen kann... finde in der msdn und google nichts


_________________
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
Jojo
alter Rang


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

BeitragVerfasst am: 17.03.2014, 21:22    Titel: Antworten mit Zitat

Eternal_pain hat Folgendes geschrieben:
Was mich allerdings stört ist die Optik bei der Auswahl.. ich kenne zwar
DrawFocusRect... und hab auch schon ein kleines highlight drum 'gemalt'
aber ich hätte doch lieber dieses standard selectieren.. also ein
transparentes rectangle in highlightfarbe... weiß leider nicht wie ich das
anstellen kann... finde in der msdn und google nichts

Bei welchem Teil weißt du nicht weiter?

BTW: Für die Input-Felder mit Spin-Button solltest du dir mal den Style "UDS_AUTOBUDDY" für das Spin-Control anschauen. Wenn das Spin-Control dann den nächsthöheren Tab-Index als ein Eingabefeld hat, wird es automatisch in das Eingabefeld eingelassen, so wie man das von Windows kennt. Das hängt dann nicht so hässlichen neben der Eingabebox rum.
_________________
» 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
Eternal_pain



Anmeldungsdatum: 08.08.2006
Beiträge: 1783
Wohnort: BW/KA

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

Naja, ich suche nach einer Art Standardverhalten bei dem Selektieren vom Bildern

DrawFocusRect erkennt man kaum alleine
InvertRect hab ich noch gefunden, ist aber etwas drastisch
hab schon mit HatchBrush experimentiert (zB HS_CROSS) aber das sah auch nicht toll aus....

Zitat:

BTW: Für die Input-Felder mit Spin-Button solltest du dir mal den Style "UDS_AUTOBUDDY" für das Spin-Control anschauen. Wenn das Spin-Control dann den nächsthöheren Tab-Index als ein Eingabefeld hat, wird es automatisch in das Eingabefeld eingelassen, so wie man das von Windows kennt. Das hängt dann nicht so hässlichen neben der Eingabebox rum.

Sehe keinen wirklichen unterschied....


Edit:
Ein ganz anderes Problem mit der SpinBox ist, das ich das ganze grad mal unter windows XP getestet habe und die SpinBoxen alle nicht erstellt werden können....

Edit2:
habe mal als Fix CreateUpDownControl falls CreateWindowEx(NULL, UPDOWN_CLASS,... fehlschlägt hinzugefügt, scheint soweit zu funktionieren...
_________________
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
Jojo
alter Rang


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

BeitragVerfasst am: 18.03.2014, 14:41    Titel: Antworten mit Zitat

Eternal_pain hat Folgendes geschrieben:
Naja, ich suche nach einer Art Standardverhalten bei dem Selektieren vom Bildern

DrawFocusRect erkennt man kaum alleine
InvertRect hab ich noch gefunden, ist aber etwas drastisch
hab schon mit HatchBrush experimentiert (zB HS_CROSS) aber das sah auch nicht toll aus....

Liefer doch mal ein Beispiel, wie es aussehen soll. Das "Standardverhalten" ist eben DrawFocusRect meiner Meinung nach.

Zitat:

Sehe keinen wirklichen unterschied....


Dann hast du was falsch gemacht. Die Rahmenpixel links vom Spinbutton sollen da nicht sein. Wie gesagt, die Tab-Reihenfolge muss dazu auch stimmen, d.h. die Elemente müssen direkt nacheinander erzeugt werden und müssen vmtl beide auch WS_TABSTOP haben. Eventuell braucht man dazu noch ein paar mehr Flags. Hier mal eben aus einer Ressourcendatei kopiert, was ich so verwende (sollte sich leicht auf einen CreateWindowEx-Call ummappen lassen), und funktioniert auch unter XP:

Code:

CONTROL         "",IDC_SPIN_SAMPVOL1,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS,258,24,11,14

_________________
» 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
Eternal_pain



Anmeldungsdatum: 08.08.2006
Beiträge: 1783
Wohnort: BW/KA

BeitragVerfasst am: 18.03.2014, 14:54    Titel: Antworten mit Zitat

Ein Beispiel habe ich gerade nicht zur Hand, ich hab es vorerst bei InvertRect und DrawFocusRect belassen...

die Styles für mein UpDownControl
Code:

WS_VISIBLE OR WS_CHILD OR WS_CLIPSIBLINGS OR UDS_ARROWKEYS OR UDS_ALIGNRIGHT OR UDS_NOTHOUSANDS OR UDS_SETBUDDYINT OR UDS_AUTOBUDDY

ExStyle ist NULL

Die Editbox hat:
Code:
WS_VISIBLE OR WS_CHILD OR ES_LEFT OR WS_CLIPCHILDREN OR ES_NUMBER OR WS_CLIPSIBLINGS OR WS_TABSTOP

als ExStyle noch WS_EX_CLIENTEDGE

wenn ich ExStyle NULL nehme sieht die Box so aus


Finde ich sieht allerdings unschön aus...

Habe aber schon wieder ein ganz neues Problem... möchte ebenfalls für die Auswahl der Font so eine Dropdownliste... leider haben manche fonts scheinbar spacings die mir das automatische anpassen verhauen...



Kann ich das irgendwie verhindern, das die font auf 0,0 in der rect ausgegeben wird?
die höhe des Textes lese ich mit GetTextExtentPoint32(fDC,FontName,len(FontName),@fSize) aus, aber da ist scheinbar das spacing nicht mit eingerechnet...
_________________
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
Jojo
alter Rang


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

BeitragVerfasst am: 18.03.2014, 15:36    Titel: Antworten mit Zitat

Eternal_pain hat Folgendes geschrieben:
wenn ich ExStyle NULL nehme sieht die Box so aus

Es sollte so aussehen, wenn alles richtig ist lächeln


Wie gesagt, Autobuddy braucht einen Tab-Index, von daher solltest du WS_TABSTOP bei der Edit-Box und Spin-Control angeben (sollte man sowieso bei allen Controls angeben, damit sie per Tastatur erreicht werden können).

Zitat:

Habe aber schon wieder ein ganz neues Problem... möchte ebenfalls für die Auswahl der Font so eine Dropdownliste... leider haben manche fonts scheinbar spacings die mir das automatische anpassen verhauen...

Naja, das problem scheint mir eher, dass du alle Items in der Liste mit der gleichen größe Renderst, oder? Du solltest bei jedem Item die passende Höhe angeben. Hast du denn folgendes Flag verwender?
MSDN hat Folgendes geschrieben:
CBS_OWNERDRAWVARIABLE The owner of the list box is responsible for drawing its contents; the items in the list box are variable in height.

_________________
» 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
Eternal_pain



Anmeldungsdatum: 08.08.2006
Beiträge: 1783
Wohnort: BW/KA

BeitragVerfasst am: 18.03.2014, 15:44    Titel: Antworten mit Zitat

Zitat:
Wie gesagt, Autobuddy braucht einen Tab-Index, von daher solltest du WS_TABSTOP bei der Edit-Box und Spin-Control angeben (sollte man sowieso bei allen Controls angeben, damit sie per Tastatur erreicht werden können).

Ne, tabstop hab ich extra raus damit ich den nicht zusätzlich mit tab erreiche da die updown ja mit den Pfeiltasten gesteuert werden ansonsten wüsste ich grade nicht welches style jetzt dafür verantwortlich ist.. wegen tabstop will ich per tab in die nächste spinbox (oder was auch immer das nächste control ist) springen und nicht extra in die Pfeile... finde die Optik jetzt auch nicht so schlimm... werd ich mir wohl nochmal ansehen müssen :S

ja, hatte noch einen Fehler... die Auswahl hab ich jetzt auf eine fixe Größe gesetzt... das Problem macht nur eine Schriftart im Moment



Würde gern das ausgewählte Element (-1) vertikal zentriert zeichnen, weiß leider noch nicht ganz wie ich das anstelle... wenn ich sie in der liste versuche vertikal zentriert zu zeichnen geht irgendwie einiges schief...
_________________
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
Jojo
alter Rang


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

BeitragVerfasst am: 18.03.2014, 15:48    Titel: Antworten mit Zitat

Eternal_pain hat Folgendes geschrieben:
Ne, tabstop hab ich extra raus damit ich den nicht zusätzlich mit tab erreiche da die updown ja mit den Pfeiltasten gesteuert werden ansonsten wüsste ich grade nicht welches style jetzt dafür verantwortlich ist..

Wie gesagt, wenn die Elemente richtig gruppiert sind (einen Auto-Buddy haben), bekommt das Spin-Control auch keinen Extra-Fokus, da es ja in die Edit-Box integriert 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
Eternal_pain



Anmeldungsdatum: 08.08.2006
Beiträge: 1783
Wohnort: BW/KA

BeitragVerfasst am: 18.03.2014, 16:15    Titel: Antworten mit Zitat

nagut...

Optisch funktioniert es auch mit Tabstop, aber nun funktionieren die Pfeiltasten (hoch/runter) nicht mehr... oder aber nehme zusätzlich noch UDS_SETBUDDYINT dann gehen zwar die pfeiltasten wieder aber hab wieder das problem das ich das UpDown Control mit tab erreiche...

Die FontAuswahlBox funktioniert nun aber wie geollt, auch mit meinem seltsamen Problemfont in ungewöhnlicher Höhe lächeln


_________________
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
Jojo
alter Rang


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

BeitragVerfasst am: 18.03.2014, 17:52    Titel: Antworten mit Zitat

Also an UDS_SETBUDDYINT alleine sollte es sicher nicht liegen, dass die Buttons den Fokus bekommen können.

Bei der Font ist ja "Math" im Namen, was mich vermuten lässt, dass da eventuell Platz für irgendwelche großen mathematischen Symbole in der Schrift "reserviert" ist. Da wird man vermutlich nichts dran ändern 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
Eternal_pain



Anmeldungsdatum: 08.08.2006
Beiträge: 1783
Wohnort: BW/KA

BeitragVerfasst am: 18.03.2014, 18:04    Titel: Antworten mit Zitat

Keine Ahnung was ich grade anders gemacht habe als vorhin, aber nun funktioniert die SpinBox richtig, also danke für den Tipp lächeln sieht wirklich besser aus...

Naja, komische Schrift halt happy
Einzige was noch etwas blöd ist, das es nicht Sortiert ist... kann im Moment auch nicht CBS_SORT benutzen weil die sonst eingestellten höhen nicht mehr zu dem jeweiligen String und somit Font passen... muss wohl noch einen Zwischenschritt vor dem einsortieren machen...
_________________
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
Jojo
alter Rang


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

BeitragVerfasst am: 18.03.2014, 19:49    Titel: Antworten mit Zitat

Naja, das sollte auch mit CBS_SORT funktionieren. Eventuell kannst du ja im ItemData-Bereich des jeweiligen ComboBox-items eine eindeutige ID hinterlegen, die dir sagt, welches Item "in Wirklichkeit" gerade gerendet wird? (Dokumentation dazu: CB_GETITEMDATA / CB_SETITEMDATA)
_________________
» 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
Eternal_pain



Anmeldungsdatum: 08.08.2006
Beiträge: 1783
Wohnort: BW/KA

BeitragVerfasst am: 19.03.2014, 07:34    Titel: Antworten mit Zitat

Naja, das Problem ist das ich derzeit die Höhe einmalig beim erstellen der Liste bzw. des Listenitems mit CB_SETITEMHEIGHT einstelle, die ID die ich dabei nutze ist abhängig von der Reihenfolge in der sie einsortiert werden, in der WM_MEASUREITEM findet die Liste keine weitere Beachtung mehr...
Durch CBS_SORT ändert sich intern die ID, hab noch nicht versucht herauszufinden ob sie sich einmalig ändert oder mehrfach beim hinzufügen neuer Items (was ich wohl vermute) so müsste ich ja dann am ende nochmal alle Listenitems durchgehen und entsprechend die höhe setzen oder das ganze so umschreiben das ich die Höhe in der WM_MEASUREITEM setze... aber in der ItemData steht ja nur der String hier der Fontname...
_________________
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
Jojo
alter Rang


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

BeitragVerfasst am: 19.03.2014, 14:06    Titel: Antworten mit Zitat

Ich kenne jetzt nicht deine genauen internen Strukturen, aber evtl kannst du ja statt des Strings einen Index in ein Array in die ItemData packen. Das Array würde dann die passende ID (bzw hwnd/dc/whatever) und den String enthalten... oder so irgendwie. Ist kein unlösbares Problem. zwinkern
_________________
» 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
Eternal_pain



Anmeldungsdatum: 08.08.2006
Beiträge: 1783
Wohnort: BW/KA

BeitragVerfasst am: 19.03.2014, 18:06    Titel: Antworten mit Zitat

Ich glaube das einfachste ist wenn ich die Strings nicht während der
enumproc einsortiere sondern in eine liste zwischenspeichere kurz mit
qsort drüber und dann erst erstelle... sollte da wohl auch noch etwas
performance beim ertellen rausholen können denke ich... soll nu grad
nicht das problem sein, ansonsten funktionierts gut lächeln

Hab noch ein fehler bei der spinbox gefunden und beseitigt...

neues element, neues problem grinsen

RadioButtons:
Das erstellen war jetzt eigentlich recht einfach, das erste der gruppe mit
WS_GROUP und WS_TABSTOP die anderen der selben gruppe ohne...
Der einfachheit wegen halt BS_AUTORADIOBUTTON

Funktioniert auf den ersten klick auch super...
Problem ist nun wenn ich manuell im code eine andere als die standard
erste 'checked' stelle.. habe ich plötzlich zwei gecheckte radiobuttons..
das soll so ja nicht sein... mit maus/tastatur im fenster selbst gehts
richtig... wie kann ich es am sinnvollsten anstellen das wenn ich einen
button der gruppe 'checked' mache die anderen entsprechen 'unchecked'
werden?

Eine Idee wäre ja, ich erweitere mein Radiobutton Type um eine liste so
das ich diese in einem subhandle gruppiere und nach einem check die liste
durchgehe und alle anderen unchecke... wäre aber recht viel Aufwand
der sich möglicherweise vermeiden lässt?
_________________
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
Jojo
alter Rang


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

BeitragVerfasst am: 20.03.2014, 01:17    Titel: Antworten mit Zitat

Du verwendest vermutlich nicht CheckRadioButton? Die Funktion automatisiert das Ganze für eine Gruppe von Radiobuttons.
_________________
» 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
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
Gehe zu Seite 1, 2  Weiter
Seite 1 von 2

 
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