purebasic.info

PureBasic forum
Текущее время: Сб июн 23, 2018 10:27 pm

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 4 ] 
Автор Сообщение
СообщениеДобавлено: Пн фев 19, 2018 8:52 am 
Не в сети
ассистент

Зарегистрирован: Пн фев 19, 2018 8:40 am
Сообщений: 17
Благодарил (а): 2 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Имеется вот такой код:
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
;Autor: Kurzer
;http://www.purebasic.fr/german/viewtopic.php?p=250562#p250562
 
;EnableExplicit
 
Procedure SetGadgetItemIcon(iGadgetNr.i, iRow.i, iCol.i, iIcon.i, iSet.i)
  Protected lvi.lv_item
  lvi\mask     = #LVIF_IMAGE
  lvi\iItem    = iRow     ; row number for change
  lvi\iSubItem = iCol     ; 2nd subitem
  lvi\pszText  = #Null   ; text to change to
   If iSet
     lvi\iImage   = iIcon   ; Icon setzen
   Else
     lvi\iImage   = -1            ; Icon lцschen
   EndIf
  SendMessage_(GadgetID(iGadgetNr), #LVM_SETITEM, 0, @lvi)
EndProcedure
 
Define iGadgetNr.i, hListIconGadget.i, hImlImages.i, iStyle.i, Event.i, Center.LV_COLUMN, Column
Define sText.s
 
If OpenWindow(0, 100, 100, 450, 200, "Icons in allen ListIcon-Spalten, nicht nur in der ersten.", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
 
   ; ListIconGadget anlegen
   iGadgetNr = ListIconGadget(#PB_Any, 5, 5, 440, 190, "Dummy", 50, #PB_ListIcon_GridLines|#PB_ListIcon_HeaderDragDrop|#PB_ListIcon_FullRowSelect|#PB_ListIcon_AlwaysShowSelection)
 
   ; 4 weitere Spalten zufьgen
   AddGadgetColumn(iGadgetNr, 1, "1", 16)
   AddGadgetColumn(iGadgetNr, 2, "2", 100)
   AddGadgetColumn(iGadgetNr, 3, "3", 80)
   AddGadgetColumn(iGadgetNr, 4, "4", 80)
   
   ; Und drei Beispiel-Zeilen erzeugen
   AddGadgetItem(iGadgetNr, -1, #LF$ + "" + #LF$ + " Ernst" + #LF$ + " hungrig")
   AddGadgetItem(iGadgetNr, -1, #LF$ + "" + #LF$ + " Karl" + #LF$ + " faul")
   AddGadgetItem(iGadgetNr, -1, #LF$ + "" + #LF$ + " Gabi" + #LF$ + " schцn")
 
    hListIconGadget = GadgetID(iGadgetNr)
 
   ; Eine Imagelist aufbauen
   CatchImage(0, ?Test)
   hImlImages = ImageList_Create_(16, 16, #ILC_COLOR32 | #ILC_MASK, 0, 8)   ; | #ILC_MASK
    ImageList_AddMasked_(hImlImages, ImageID(0), #CLR_NONE)
   
   ; Das "PB-eigenen" Image ist jetzt nicht mehr nцtig, weil es in die ImageList kopiert wurde
   FreeImage(0)
 
   ; Die Imagelist dem ListIconGadget zuordnen
   SendMessage_(hListIconGadget, #LVM_SETIMAGELIST, #LVSIL_SMALL, hImlImages)
   
   ; Jetzt dem ListIconGadget sagen, daЯ es auch in SubItems Icons anzeigel soll/darf
  iStyle = SendMessage_(hListIconGadget, #LVM_GETEXTENDEDLISTVIEWSTYLE , 0, 0) | #LVS_EX_SUBITEMIMAGES
  SendMessage_(hListIconGadget, #LVM_SETEXTENDEDLISTVIEWSTYLE , 0, iStyle)
 
;   SendMessage_(hListIconGadget, #LVM_SETTEXTBKCOLOR , 0, #White)
;   SendMessage_(hListIconGadget, #LVM_SETBKCOLOR, 0, #White)
 
   ;Die blцden, per default gesetzen Icons in Spalte 0 entfernen
    SetGadgetItemIcon(iGadgetNr, 0, 0, 0, #False)
    SetGadgetItemIcon(iGadgetNr, 1, 0, 0, #False)
    SetGadgetItemIcon(iGadgetNr, 2, 0, 0, #False)
 
   ;Jetzt die Icons nachtrдglich in die Spalten setzen
    SetGadgetItemIcon(iGadgetNr, 0, 1, 2, #True)
    SetGadgetItemIcon(iGadgetNr, 1, 1, 2, #True)
    SetGadgetItemIcon(iGadgetNr, 2, 1, 2, #True)
   
    SetGadgetItemIcon(iGadgetNr, 0, 2, 1, #True)
    SetGadgetItemIcon(iGadgetNr, 1, 2, 1, #True)
    SetGadgetItemIcon(iGadgetNr, 2, 2, 0, #True)
   
    SetGadgetItemIcon(iGadgetNr, 0, 4, 2, #True)
    SetGadgetItemIcon(iGadgetNr, 1, 4, 2, #True)
    SetGadgetItemIcon(iGadgetNr, 2, 4, 2, #True)
   
    ;;;;;;;;;;;;;;;; Center
    Center.LV_COLUMN\mask=#LVCF_FMT
    Center\fmt=#LVCFMT_CENTER
    For i=0 To 4
      SendMessage_(GadgetID(iGadgetNr), #LVM_SETCOLUMN,i,@Center)
    Next
    ;;;;;;;;;;;;;;;;
   
    Repeat
      Event = WaitWindowEvent()
    Until Event = #PB_Event_CloseWindow
   
    ; Am Ende die Imagelist wieder freigeben
    ImageList_Destroy_(hImlImages)
EndIf
 
DataSection
   ; Dies ist ein 16 Farben BMP Image mit 48 x 16 Pixeln AusmaЯe (also quasi drei 16 x 16 Pixel groЯe Images nebeneinander)
   Test:
  ; IncludeBinary "test.bmp"
  Data.l $01F64D42,$00000000,$00760000,$00280000,$00300000,$00100000,$00010000,$00000004,$01800000,$00000000
  Data.l $00000000,$00000000,$00000000,$02040000,$FEFC00FC,$02FC00FC,$00000004,$FC820000,$3A00002D,$3C0000FF
  Data.l $00000091,$5500007C,$01000001,$02000000,$00000000,$E9910000,$43B10061,$003700AC,$007E0080,$1111007C
  Data.l $11111111,$11111111,$11111111,$11111111,$11111111,$11111111,$11111111,$11111111,$11111111,$11111111
  Data.l $11111111,$11111111,$11111111,$10111111,$10111101,$11111101,$11111111,$11111111,$11222211,$11111111
  Data.l $00111100,$11111111,$11111111,$11111111,$21222212,$11111111,$01000010,$11111111,$11111111,$11111111
  Data.l $22111122,$11111111,$11000011,$11111111,$11881811,$12111111,$12111121,$11111121,$11111111,$11111111
  Data.l $81888811,$11111111,$11211211,$11111111,$11011011,$11111111,$88888818,$11111111,$11211211,$11111111
  Data.l $11011011,$11111111,$88888818,$11111111,$11211211,$11111111,$11011011,$11111111,$88888818,$12111111
  Data.l $12111121,$10111121,$10111101,$11111101,$81888811,$22111111,$22111122,$00111122,$00111100,$11111100
  Data.l $11881811,$22111111,$22111122,$00111122,$00111100,$11111100,$11111111,$12111111,$12111121,$10111121
  Data.l $10111101,$11111101,$11111111,$11111111,$11111111,$11111111,$11111111,$11111111,$11111111,$11111111
  Data.l $11111111,$11111111,$11111111,$11111111,$11111111
  Data.b $11,$11
  TestEnd:
EndDataSection


Помогите расположить иконки по центру колонки.
То есть в колонке будет только картинка, без текста.
Я только смог расположить текст по центру, вписав код выделенный текстом ;;;;;;;;;;;;;;;; Center
И если возможно, то вместо bmp изображения, хотелось бы использовать png с прозрачным фоном.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Вт май 22, 2018 6:18 pm 
Не в сети
док

Зарегистрирован: Вс июл 05, 2009 5:55 pm
Сообщений: 76
Благодарил (а): 1 раз.
Поблагодарили: 2 раз.
Пункты репутации: 0
Цитата:
То есть в колонке будет только картинка, без текста.


А вобще в винде в меню (любого вида), в треегаджетах или подобных именно системных такое видел, я неприпоминаю.
Можеш до своей картинки добавить слева пустой фон(прозрачный или как удобно), получится пустой фон и твоя картинка, но это одна картинка, просто их вместе соедини на один идешник.
Чем ты их будеш соединять неважно хоть тут StartDrawing, возможно он с альфа каналом работает(краем уха слышал) , может Петр или другие подскажут если так печет, а проще в какомто редакторе дорисовать и сохранить готовый.
(я надеюсь понял, но еще раз: создаеш картинку шириной нужной и в конце наложеш свою пнже картинку).

_________________
искатель истины


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Вс май 27, 2018 9:02 am 
Не в сети
профессор

Зарегистрирован: Вт май 13, 2014 4:12 am
Сообщений: 624
Благодарил (а): 66 раз.
Поблагодарили: 20 раз.
Пункты репутации: 5
есть такая штука winapi_library, вот там куча примеров с иконками
сама прога криво написана, проблемы с кодировкой, она не всё видит, так что открывай папку с кодами и там смотри
тут другая прблема, имена файлов написаны по немецки, ну всё с кракозяблами


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Вс май 27, 2018 1:04 pm 
Не в сети
док

Зарегистрирован: Чт фев 09, 2017 10:37 am
Сообщений: 165
Благодарил (а): 17 раз.
Поблагодарили: 31 раз.
Пункты репутации: 0
Посмотрел в AutoIt3, там функция SetItemIndent (установить отступ пункту), внутри функции используется структура LVITEM с полем Indent и ширина отступа кратно ширине иконке. То есть применить авто-размер для колонки LVSCW_AUTOSIZE = -1, тогда оступов с краёв не будет совсем или добавить 1 отступ шириной в иконку. А если выровнять по центру совместно с текстом, то иконки будут плясать, не будет ровного столбика.


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 4 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 9


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group (блог о phpBB)
Сборка создана CMSart Studio
Русская поддержка phpBB