Вверх ↑
Этот топик читают: Гость
Этот топик был перемещен из раздела "Помощь по среде"
Ответов: 4470
Рейтинг: 715
#16: 2021-08-30 16:06:32 ЛС | профиль | цитата
Ну, оно будет наезжать только в открытом виде, когда пользователя все равно ничего не интересует, кроме содержимого списка.
карма: 26

0
Разработчик
Ответов: 25687
Рейтинг: 2088
#17: 2021-08-30 17:51:00 ЛС | профиль | цитата
Netspirit писал(а):
Ну, оно будет наезжать только в открытом виде, когда пользователя все равно ничего не интересует, кроме содержимого списка.

При очень длинном тексте некрасиво смотрится, а делать короче, опять все упирается в отсутствие Hint-а. А при наличии Hint-a расширение списка нафиг не нужно.

Я так понимаю, что нужно что-то типа такого


Редактировалось 3 раз(а), последний 2021-08-30 17:56:37
карма: 20

0
Ответов: 28
Рейтинг: 0
#18: 2021-08-30 19:04:27 ЛС | профиль | цитата
Подскажите, а как вычисляется ширина элемента по отношению к длине строки?
карма: 1

0
Разработчик
Ответов: 25687
Рейтинг: 2088
#19: 2021-08-31 00:13:13 ЛС | профиль | цитата
Вариант выпадающего списка с изменяемой шириной. Ширину скроллинга при малом количестве элементов списка убрать не получилось, слишком много заморочек.



Схема

Add(MainForm,10377423,266,231)
{
Width=730
Height=295
Position=1
Point(onMouseEnter)
}
Add(ComboBox,7723821,378,161)
{
Left=75
Top=30
Width=155
Height=21
Strings=#29:12321797000008638863667888888|5:11113|5:57396|35:97957395050930593988590385935395035|5:45464|5:67867|5:87867|5:34535|5:adaad|
ReadOnly=0
Point(PHandle)
Point(onMouseLeave)
Point(onMouseEnter)
Point(onMouseWheel)
link(onMouseEnter,995737:doWork2,[(417,188)(417,153)(326,153)(326,244)])
}
Add(InlineCode,3059356,392,231)
{
WorkPoints=#13:doGetTrackIdx|
EventPoints=#13:onGetTrackIdx|13:onGetTrackTxt|
VarPoints=#7:sHandle|
DataPoints=#7:PHandle|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|38:uses kol,Share,Debug,Windows,Messages;|0:|5:const|26: CB_SETMINVISIBLE = 5889;|26: CB_GETMINVISIBLE = 5890;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|24: sControl: PControl;|25: Info: TComboBoxInfo;|9: public|19: onGetTrackIdx,|19: onGetTrackTxt,|24: PHandle: THI_Event;|58: procedure doGetTrackIdx(var _Data:TData; Index:word);|57: procedure sHandle(var _Data:TData; Index:word); |34: destructor Destroy; override;|5: end;|0:|14:implementation|0:|3:var|23: sDefWndProc: Pointer;|22: global: integer = 0;|22: fclass: THiAsmClass;|33: Size_Params: TNCCalcSizeParams;|24: itemidx: integer = -1;|15: dRect: TRect;|15: sRect: TRect;|0:|88:function MyWndProc(wnd: THandle; wMsg: Cardinal; wParam, lParam: DWORD): DWORD; stdcall;|3:var|18: i, len: integer;|16: buffer: PChar;|13: st: string;|5:begin|14: case wMsg of|14: WM_MOUSEMOVE:|10: begin;|47: i:= SendMessage(wnd, LB_GETCURSEL, 0, 0);|27: if i <> itemidx then|11: begin|53: len := SendMessage(wnd, LB_GETTEXTLEN, i, 0);|32: GetMem(buffer, len + 1);|57: SendMessage(wnd, LB_GETTEXT, i, integer(buffer));|35: SetString(st, buffer, len);|24: FreeMem(buffer);|45: _hi_onEvent(fclass.onGetTrackIdx, i);|46: _hi_onEvent(fclass.onGetTrackTxt, st);|12: end; |19: itemidx := i;|11: end; |18: WM_NCCALCSIZE:|9: begin|48: Size_Params := PNCCalcSizeParams(lParam)^;|35: sRect := Size_Params.rgrc[0];|110: SetWindowPos(wnd,0,0,0, dRect.Right - dRect.Left, sRect.Bottom - sRect.Top, SWP_NOMOVE or SWP_NOZORDER);|11: end; |12: WM_SIZE:|6: begin|43:// ShowScrollBar(wnd, SB_VERT, false);|10: end; |6: end;|67: Result := CallWindowProc(sDefWndProc, wnd, wMsg, wParam, lParam);|4:end;|0:|31:destructor THiAsmClass.Destroy;|5:begin|38: if not Assigned(sControl) then exit;|34: ZeroMemory(@Info, SizeOf(Info));|30: Info.cbSize := SizeOf(Info);|41: GetComboBoxInfo(sControl.Handle, Info);|68: SetWindowLong(Info.hwndList, GWL_WNDPROC, cardinal(@sDefWndProc));|16: inherited; |6:end; |0:|65:procedure THiAsmClass.doGetTrackIdx(var _Data:TData; Index:word);|3:var|25: i, len, count: integer;|16: buffer: PChar;|13: st: string;|11: pDC: HDC;|18: hOldFont: HFONT;|18: SizeFont: TSize;|5:begin|48: sControl := PControl(ToIntegerEvent(PHandle));|38: if not Assigned(sControl) then exit;|0:|34: ZeroMemory(@Info, SizeOf(Info));|30: Info.cbSize := SizeOf(Info);|41: GetComboBoxInfo(sControl.Handle, Info);|0:|20: if global = 0 then|7: begin|70: sDefWndProc := Pointer(GetWindowLong(Info.hwndList, GWL_WNDPROC));|68: SetWindowLong(Info.hwndList, GWL_WNDPROC, cardinal(@MyWndProc));|43: GetWindowRect(Info.hwndList,dRect); |16: global := 1;|19: fclass := Self;|6: end;|57: count := SendMessage(Info.hwndList, LB_GETCOUNT, 0, 0);|0:|28: for i := 0 to count - 1 do|7: begin|59: len := SendMessage(Info.hwndList, LB_GETTEXTLEN, i, 0);|28: GetMem(buffer, len + 1);|63: SendMessage(Info.hwndList, LB_GETTEXT, i, integer(buffer));|31: SetString(st, buffer, len);|20: FreeMem(buffer);|32: pDC := GetDC(Info.hwndList);|56: hOldFont := SelectObject(pDC, sControl.Font.Handle);|63: GetTextExtentPoint32(pDC, PChar(st), Length(st), SizeFont);|32: SelectObject(pDC, hOldFont);|18: DeleteDC(pDC);|71: if SizeFont.cx + 23 > (dRect.Right - dRect.Left) then |53: dRect.Right := SizeFont.cx - dRect.Left + 23; |6: end;|4:end;|0:|59:procedure THiAsmClass.sHandle(var _Data:TData; Index:word);|5:begin|48: sControl := PControl(ToIntegerEvent(PHandle));|38: if not Assigned(sControl) then exit;|0:|34: ZeroMemory(@Info, SizeOf(Info));|30: Info.cbSize := SizeOf(Info);|41: GetComboBoxInfo(sControl.Handle, Info);|2: |33: dtInteger(_Data,Info.hwndList);|5:end; |0:|4:end.|
link(onGetTrackIdx,11182890:doText,[])
link(onGetTrackTxt,4062415:doText,[(459,244)(459,279)])
link(PHandle,7723821:PHandle,[])
}
Add(ChanelToIndex,995737,336,231)
{
link(onIndex,3059356:doGetTrackIdx,[])
}
Add(Edit,11182890,469,231)
{
Left=240
Top=30
Text=""
}
Add(Edit,4062415,469,273)
{
Left=300
Top=30
Width=255
Text=""
}


Редактировалось 3 раз(а), последний 2021-08-31 00:17:52
карма: 20

0
Ответов: 441
Рейтинг: 153
#20: 2021-09-12 23:55:10 ЛС | профиль | цитата
Serascer писал(а):
У меня такой вопрос. Можете подсказать как сделать добавление текста в FormatSTR и далее в MEMO с помощью CheckBox. Т.е. есть несколько флажков например USB, USB 3.2, Type-C и так далее. Нужно ставить галочку напротив каждого из нужных и этот текст добавляется. Объясню для чего это нужно: есть внешние накопители ССД или жесткие диски с несколькими портами. И в описании товара нужно их перечислить. Я могу сделать это просто с ComboBox, но это не всегда удобно, проще галочки поставить )

Serascer, Ещё один вариант
Пример 2


Add(ChildPanel,11540617,238,84)
{
link(onEvent1,16717496:doText,[])
}
BEGIN_SDK
Add(EditMulti,16735778,21,21)
{
EventCount=1
WorkCount=1
Width=566
Height=361
VOffset=70
link(doWork1,3289887:doEnum,[])
}
Add(Panel,10362096,231,140)
{
Left=15
Top=20
Width=160
Height=22
BorderWidth=0
BevelWidth=0
Point(doHeight)
}
Add(MTStrTbl,13193754,84,140)
{
Width=160
Height=22
Align=5
Font=[Arial,9,0,0,204]
Name="TAB0"
Columns=#15:Выбор диска=138|
ColumnClick=1
ColorItems=0
CheckBoxes=0
Grid=0
Point(onMouseDown)
link(onColumnClick,7944574:doFor,[(132,153)(132,209)])
AddHint(-11,94,42,13,Name)
}
Add(StrList,1162954,168,35)
{
Strings=#3:USB|5:USB 2|7:USB 3.2|6:Type-C|46:1111111111111111111111111111111111111111111111|5:22222|5:33333|46:7777777777777777777777777777777777777777777777|
Point(onGetString)
Point(doGetString)
}
Add(MST_RowAction,9085956,287,77)
{
MSTControl="TAB0"
}
Add(MT_String,15768347,231,77)
{
link(onResult,9085956:doRowAction,[])
}
Add(ArrayEnum,3289887,182,91)
{
link(onItem,15768347:doMTString,[])
link(Array,1162954:Array,[])
}
Add(MST_CheckBoxes,7749493,280,203)
{
MSTControl="TAB0"
link(Mode,10047104:Value,[])
}
Add(MT_Enum,15422557,287,273)
{
PColor(MT,255)
link(onItem,4301875:doChkEMatrix,[])
link(onEndEnum,3120253:doData,[(335,286)(335,328)])
link(MT,7749493:AllCheck,[])
}
Add(MST_Matrix,4301875,343,266)
{
X=-1
MSTControl="TAB0"
Point(doChkEMatrix)
link(onEMatrix,3672772:doStr,[])
}
Add(MT_String,3672772,399,266)
{
link(onResult,3239822:doStrCat,[])
}
Add(Hub,11532305,245,245)
{
link(onEvent1,7121245:doClear,[(492,251)(492,279)])
link(onEvent2,15422557:doEnum,[(277,258)(277,279)])
}
Add(StrCat,7121245,504,266)
{
Point(doClear)
link(Str1,12868434:Var3,[(510,257)(558,257)(558,310)])
}
Add(DoData,3120253,504,322)
{
link(onEventData,16735778:onEvent1,[(573,328)(573,97)])
link(Data,12868434:Var2,[])
}
Add(GetDataEx,12868434,504,305)
{
link(Data,7121245:Result,[])
}
Add(StrCat,3239822,448,266)
{
Str2="; "
Point(doClear)
link(onStrCat,7121245:doStrCat,[])
}
Add(Switch,14569566,175,147)
{
DataOn=Integer(200)
DataOff=Integer(22)
Point(onOn)
Point(onOff)
link(onSwitch,10362096:doHeight,[])
link(onOff,11532305:doEvent1,[(221,167)(221,251)])
}
Add(Memory,10047104,287,140)
{
Default=Integer(0)
}
Add(For,7944574,238,203)
{
link(onEvent,7749493:doCheckBox,[])
link(End,13193754:Count,[(251,187)(104,187)])
}
Add(Switch,12421892,42,49)
{
DataOn=String(4)
DataOff=String(6)
link(onSwitch,13807484:doCaption,[])
}
Add(Hub,5569828,126,49)
{
link(onEvent1,14569566:doSwitch,[(158,55)(158,153)])
link(onEvent2,12421892:doSwitch,[(148,62)(148,37)(29,37)(29,55)])
}
Add(Button,13807484,84,49)
{
Left=140
Top=2
Width=18
Height=18
Font=[Webdings,10,0,0,2]
Caption="6"
Point(doCaption)
link(onClick,5569828:doEvent1,[])
}
END_SDK
Add(MainForm,6728510,182,70)
{
Top=2
Width=615
Height=288
Position=1
link(onCreate,11540617:doWork1,[])
}
Add(Memo,16717496,294,63)
{
Left=190
Top=15
Width=405
Height=165
}

карма: 4

0
20
Сообщение
...
Прикрепленные файлы
(файлы не залиты)