listdlg obscures longer prompts

20 ビュー (過去 30 日間)
Bruno
Bruno 2013 年 4 月 21 日
コメント済み: Damien Watson 2024 年 1 月 4 日
I'm using a listdlg to get information from users, but the prompt for my dialog is too long to fit on one line. Unfortunately the second line is obscured by the top of the list box. Is there a way to fix this other than making my dialog window unnecessarily wide?
  1 件のコメント
Image Analyst
Image Analyst 2013 年 4 月 21 日
I'd send that in as a bug, or at the very least, a request for enhancement. I mean, you should be able to have more than one short line as a prompt!

サインインしてコメントする。

採用された回答

Bruno
Bruno 2013 年 5 月 5 日
For anyone out there experiencing the same frustration as I was, the solution I've come up with is to enter the prompt string as a cellstr in which the first cell entry is the prompt, and subsequent empty strings {''} are padded onto the end. See below for example.
listdlg('PromptString','This is a long prompt string for the purposes of illustrating my point.','ListString',[{'blah'} {'blah'} {'blah'}])
listdlg('PromptString',[{'This is a long prompt string for the purposes of illustrating my point.'} {''}],'ListString',[{'blah'} {'blah'} {'blah'}])
  4 件のコメント
JohnDylon
JohnDylon 2017 年 1 月 18 日
Add another {''} and problem is solved. See below:
listdlg('PromptString',[{'This is a long prompt string for the purposes of illustrating my point.'} {''} {''}],'ListString',[{'blah'} {'blah'} {'blah'}])
Sokratis Panagiotidis
Sokratis Panagiotidis 2022 年 4 月 2 日
Man your answers were a huge help, thanks a lot!

サインインしてコメントする。

その他の回答 (2 件)

Jan
Jan 2013 年 4 月 21 日
Create a copy of LISTDLG in a user-defined folder and modify it accordingly: You need a modification of the 4th argument of the position in:
listsize = listsize - [0, 32];
listbox = uicontrol('style','listbox', ...
'position', [ffs+fus, ffs+uh+4*fus+(smode==2)*(fus+uh) listsize],...
A smart idea would to perform this dynamically depending on the extent of the prompt:
ext = get(prompt_text, 'Extent');
listsize = listsize - [0, ext(4) + 30];
  2 件のコメント
Bruno
Bruno 2013 年 4 月 22 日
Jan, I'm trying that and Matlab is complaining that the following functions are undefined. How do I resolve this?
warnfiguredialog
getnicedialoglocation
setdefaultbutton
Walter Roberson
Walter Roberson 2013 年 4 月 22 日

サインインしてコメントする。


Marcel
Marcel 2022 年 11 月 7 日
編集済み: Marcel 2022 年 11 月 7 日
Despite the issue being old and already having a answer, i wanted to post my solution as well. By using the following code, those empty {''} values are added automatically for every 32 characters in the string. I at least use this function myself so i can have an easier time calling it etc and since im working on my github repo for matlab hacks, this might be a good thing to post.
Tested in Matlab R2021a.
answer = msgList(["Live", "Statisch"], ...
"This is a lot of text it is amazing the char limit for one line seems" + ...
" to be 32 characters. its amazing to be able to work around it tho", ...
"An interesting title");
function results = msgList(list, prompt, title)
lineBreaks = [];
counter = 1;
for i = 1:strlength(prompt)
if counter == 32
lineBreaks = [{''}, lineBreaks];
counter = 1;
end
counter = counter + 1;
end
[index,tf] = listdlg('PromptString',[{prompt}, lineBreaks], 'ListString',list, "SelectionMode", "single", "Name", title);
results = list{index};
end
  1 件のコメント
Damien Watson
Damien Watson 2024 年 1 月 4 日
Another optimisation could be to calculate lineBreaks using:
numLineBreaks = floor(strlength(prompt) ./ 32);
% For strings
lineBreaks = strings([numLineBreaks, 1]);
% Or for chars
lineBreaks = repmat({''}, [numLineBreaks, 1]);

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeInteractive Control and Callbacks についてさらに検索

タグ

製品

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by