Hi.
Bei allen meinen Projekten fällt mir schon länger eine Sache unangenehm auf. Wenn man einen String mit Umlauten aus einer SQLite Datenbank ausliest, werden die Umlaute nicht oder falsch dargestellt. Aber eben nur in Labeln. An anderer Stelle, Listen, Comboboxen usw) wird der String richtig dargestellt. Mal ein Beispiel- Screenshot:
Beispiel.jpg
In der mittleren Liste wird der String korrekt dargestellt, in den Labeln rechts fehlt das & bzw wird durch ein _ ersetzt... Das ist so bei allen meinem Programmen. Also mache ich etwas grundsätzliches falsch oder es handelt sich um einen Bug in AutoIt.
Da der Code des Beispiels ziemlich umfangreich ist (über 5500 Zeilen), stelle ich hier nur mal den Abschnitt ein, der für diesen Bereich zuständig ist.
Die Liste und die Label dieses Tabs werden so erzeugt:
#Region ;Generate EPG Data TVGuide.com GUI (3-5)
Global $label_35_01 = GUICtrlCreateLabel($lng_epgdata & " - TVGuide.com", 20, 180, 600, 50)
GUICtrlSetFont(-1, 20, 700, 0, "Georgia")
Global $pic_35_01 = GUICtrlCreatePic(@ScriptDir & "\Images\TVGuidecom-Logo.bmp", 920, 173, 50, 50)
Global $check_35_01 = GUICtrlCreateCheckbox("TVGuide.com - " & $lng_notvdb, 20, 530, 320)
Global $label_35_11 = GUICtrlCreateLabel($lng_selectchannel, 350, 250, 300, 20)
GUICtrlSetFont(-1, 10, 700, 0, "Verdana")
Global $listview_35_11 = GUICtrlCreateList("", 350, 280, 260, 320, $LBS_DISABLENOSCROLL + $WS_BORDER + $WS_VSCROLL, $ES_READONLY)
Global $label_35_21 = GUICtrlCreateLabel($lng_channelsettings, 700, 250, 300, 20)
GUICtrlSetFont(-1, 10, 700, 0, "Verdana")
Global $label_35_22 = GUICtrlCreateLabel("", 700, 270, 250, 20)
GUICtrlSetFont(-1, 10, 700, 0, "Verdana")
Global $label_35_23 = GUICtrlCreateLabel($lng_xmltv_name, 700, 300, 250, 20)
Global $label_35_24 = GUICtrlCreateLabel("", 700, 330, 250, 20)
Global $label_35_25 = GUICtrlCreateLabel($lng_channeldbname, 700, 360, 250, 20)
Global $input_35_21 = GUICtrlCreateInput("----------", 700, 340, 250, 20)
Global $combo_35_21 = GUICtrlCreateCombo("----------", 700, 380, 250, 20)
GUICtrlSetData($combo_35_21, "----------", "----------")
Global $check_35_21 = GUICtrlCreateCheckbox($lng_loadtvdb, 700, 450, 250, 20)
Global $check_35_22 = GUICtrlCreateCheckbox("", 700, 420, 300, 20)
Global $label_35_26 = GUICtrlCreateLabel($lng_daysgrab, 65, 583, 250, 20)
Global $input_35_22 = GUICtrlCreateInput($ini_maxdays_tvguide, 20, 580, 40, 20)
If $ini_notvdb_tvguide = "1" Then
GUICtrlSetState($check_35_01, $GUI_CHECKED)
Else
GUICtrlSetState($check_35_01, $GUI_UNCHECKED)
EndIf
Dim $Array_GUI_Elements_35[1]
_ArrayAdd($Array_GUI_Elements_35, $check_35_01)
_ArrayAdd($Array_GUI_Elements_35, $label_35_01)
;~ _ArrayAdd($Array_GUI_Elements_35, $label_35_03)
_ArrayAdd($Array_GUI_Elements_35, $label_35_11)
_ArrayAdd($Array_GUI_Elements_35, $label_35_21)
_ArrayAdd($Array_GUI_Elements_35, $label_35_22)
_ArrayAdd($Array_GUI_Elements_35, $label_35_26)
_ArrayAdd($Array_GUI_Elements_35, $listview_35_11)
_ArrayAdd($Array_GUI_Elements_35, $input_35_22)
_ArrayAdd($Array_GUI_Elements_35, $pic_35_01)
Dim $Array_GUI_Elements_35_6[1]
_ArrayAdd($Array_GUI_Elements_35_6, $check_35_21)
_ArrayAdd($Array_GUI_Elements_35_6, $check_35_22)
_ArrayAdd($Array_GUI_Elements_35_6, $input_35_21)
_ArrayAdd($Array_GUI_Elements_35_6, $label_35_23)
Dim $Array_GUI_Elements_35_7[1]
_ArrayAdd($Array_GUI_Elements_35_7, $check_35_21)
_ArrayAdd($Array_GUI_Elements_35_7, $check_35_22)
_ArrayAdd($Array_GUI_Elements_35_7, $combo_35_21)
_ArrayAdd($Array_GUI_Elements_35_7, $label_35_23)
_ArrayAdd($Array_GUI_Elements_35_7, $label_35_24)
_ArrayAdd($Array_GUI_Elements_35_7, $label_35_25)
#EndRegion
Alles anzeigen
Und die Daten werden dann so eingefügt:
Global $channel_query5, $channel_array5, $channel_Rows5, $channel_Columns5
...
; Read Available Channels for TVGuide
$channel_query5 = "SELECT NAME, MAX_DAYS, CATEGORY, XMLTV_ID, RUN_E2T FROM TVGUIDE_CHANNELS ORDER BY UPPER(NAME) ;"
$channel_Rval5 = _SQLite_GetTable2d($buddy_db, $channel_query5, $channel_array5, $channel_Rows5, $channel_Columns5)
...
;Function to Update controls.
Func _SetData_Channel_35($item)
Local $index
_WriteLog("Info - _SetData_Channel_35 started")
_ShowGui_Channellist_35()
$index = _ArraySearch($channel_array5, $item)
If $ini_loglevel = 1 Then _WriteLog("Debug - Set Channels TVGuide Data - List Item = " & $item)
If $ini_loglevel = 1 Then _WriteLog("Debug - Set Channels TVGuide Data - List Index = " & $index)
_SetData($input_35_21, $channel_array5[$index][3])
_SetData($label_35_22, $channel_array5[$index][0])
_SetData($label_35_24, $channel_array5[$index][3])
_SetData($combo_35_21, "----------")
If GUICtrlRead($check_35_01) = 1 Then
GUICtrlSetState($check_35_21, $GUI_UNCHECKED)
GUICtrlSetState($check_35_21, $GUI_DISABLE)
Else
GUICtrlSetState($check_35_21, $GUI_ENABLE)
If $channel_array5[$index][4] = "True" Then
GUICtrlSetState($check_35_21, $GUI_CHECKED)
Else
GUICtrlSetState($check_35_21, $GUI_UNCHECKED)
EndIf
EndIf
If $channel_array5[$index][1] > 0 Then
GUICtrlSetState($check_35_22, $GUI_CHECKED)
Else
GUICtrlSetState($check_35_22, $GUI_UNCHECKED)
EndIf
_SetData($check_35_22, $channel_array5[$index][3] & " " & $lng_grabfrom & " TVGuide?")
EndFunc
...
Func _SetData($cControl, $sData)
If GUICtrlRead($cControl) <> $sData Then GUICtrlSetData($cControl, $sData)
EndFunc
Alles anzeigen
In der Liste werden die Sonderzeichen richtig dargestellt, in den Labeln nicht. Warum?
Vielen Dank schon mal...
Grüße, Claus.