WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Einzelne Buchstaben im Edit-Feld ändern (Farbe/Größe)

 

Matlab_Fürst
Forum-Anfänger

Forum-Anfänger


Beiträge: 22
Anmeldedatum: 19.11.14
Wohnort: Brandenburg
Version: Matlab 2009
     Beitrag Verfasst am: 06.03.2015, 11:44     Titel: Einzelne Buchstaben im Edit-Feld ändern (Farbe/Größe)
  Antworten mit Zitat      
Hallo liebe Helfer,

Mein Vorhaben:

Im erzeugten Edit-Feld Schriftfarbe und Schriftgröße ändern.
Später soll der modifizierte Text in einer "Textbox" in einem Axes ausgeben werden.

Problem:

Die Farbe und Größe des Textes lässt sich nur komplett ändern. Also einzelne Buchstaben oder Wörter bekomm ich nicht geändert.

Anmerkung:

Anbei der Code wo das alles passieren soll. Die Einfärbung des Wortes "Rot" im Popup gelingt mir mittels HTML-Code. Wenn ich die gleiche Heransgehensweise im Edit-Feld (im Text-Feld auch nicht möglich) anwende, wird mir nur der HTML-Code ausgegeben.

Könnt ihr mir da weiter helfen? (Matlab 2009b)

Vielen Dank im voraus

Code:

handles.textbox=figure;
set(handles.textbox,'Position',[100 100 320 250]);
textfeld=uicontrol('parent',handles.textbox,'Style','edit','tag','edit1','Position',[25 25 150 150],'HorizontalAlignment','left','Max',2);
uicontrol('parent',handles.textbox,'Style','text','tag','text1','String','Textgröße:','Position',[185 160 60 15],'BackgroundColor',[0.8 0.8 0.8],'HorizontalAlignment','left');
uicontrol('parent',handles.textbox,'Style','text','tag','text2','String','Textfarbe:','Position',[185 110 60 15],'BackgroundColor',[0.8 0.8 0.8],'HorizontalAlignment','left');
uicontrol('parent',handles.textbox,'Style','popupmenu','tag','popupgross','String',[2:2:26],'Position',[185 132 45 25]);
uicontrol('parent',handles.textbox,'Style','popupmenu','tag','popupfarbe','String',[{'Blau'},{'<HTML><font color="#FF0000">Rot</font></HTML>'},{'Grün'},{'Gelb'},{'Schwarz'},{'Magenta'}],'Position',[185 82 75 25]);
uicontrol('parent',handles.textbox,'Style','pushbutton','String','Übernehemen','Position',[185 25 100 25],'Value',0,'Callback',{@Callback_text,hObject});

function Callback_text(handles,hObject,event)
handles=guidata(event);
text=get(findall(get(handles.textbox,'Children'),'Style','edit'),'String');
%Hier wollte ich den Text bearbeiten
set(findall(get(handles.textbox,'Children'),'Style','edit'),'String',text)
%Zum Porbieren gedacht
 

_________________

Wer schwindelt der lügt.
Private Nachricht senden Benutzer-Profile anzeigen


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 06.03.2015, 22:58     Titel: Re: Einzelne Buchstaben im Edit-Feld ändern (Farbe/Größe)
  Antworten mit Zitat      
Hallo Matlab_Fürst,

Vielleicht hilft Dir diese Seite weiter:
http://undocumentedmatlab.com/blog/rich-matlab-editbox-contents

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Matlab_Fürst
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 22
Anmeldedatum: 19.11.14
Wohnort: Brandenburg
Version: Matlab 2009
     Beitrag Verfasst am: 09.03.2015, 15:30     Titel:
  Antworten mit Zitat      
Hi Jan,

vielen dank für dein Tipp.
Hab heute den ganzen Tag daran gesessen aber folgende Sache will mir nicht gelingen..

Ich schreibe beliebig viele Zeilen in meine Edit-Box. Dann markiere ich mehrere Buchstaben/Wörter über mehrere Zeilen hinweg.
Ich kann zwar den selektierten Teil mir ausgeben lassen und auch Start/Stop der Selektion aber kann diesen Teil ebend nicht nach meinen Wünschen(Schriftstärke/Schriftgröße/Schriftdicke) ändern.
Die Option "selectedTextColor" gibt es zwar aber dann fehlen mir noch die andern beiden sachen.

Hättest du da eine Idee?
_________________

Wer schwindelt der lügt.
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 09.03.2015, 22:27     Titel:
  Antworten mit Zitat      
Hallo Matlab_Fürst,

Bitte erkläre, was Du erreichen möchtest.

Zitat:
... aber kann diesen Teil ebend nicht nach meinen Wünschen(Schriftstärke/Schriftgröße/Schriftdicke) ändern.
Die Option "selectedTextColor" gibt es zwar aber dann fehlen mir noch die andern beiden sachen.

Wo gibt es die "Option selectedTextColor"? Wie versuchst Du was bisher?

Gruß, Jan

Zuletzt bearbeitet von Jan S am 10.03.2015, 10:43, insgesamt einmal bearbeitet
Private Nachricht senden Benutzer-Profile anzeigen
 
Matlab_Fürst
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 22
Anmeldedatum: 19.11.14
Wohnort: Brandenburg
Version: Matlab 2009
     Beitrag Verfasst am: 10.03.2015, 07:40     Titel:
  Antworten mit Zitat      
Morgen Jan,

Also mein komplettes Vorhaben ist wie folgt:
Ich habe eine "Hauptgui", in der eine uitabgroup mit mehreren uitab´s,
die verschiedenen Diagramme angezeigt.
Nach erstellen der Diagramme möchte ich in den Diagrammen Kommentare einfügen.
Beim betätigen eines Pushbuttons wird ein Fenster geöffnet(siehe den obrigen Code). In diesem Fenster soll man in einer Edit-Box (über mehrere Zeilen) etwas schreiben können.
Bis hierhin klappt alles.
Nur soll man jetzt auch das Geschriebene bearbeiten können. Hätte gern eine Optionale Einstellmöglichkeit der Schriftgröße, Schriftfarbe und der Schriftdicke.
1. Es soll beim schreiben die Werte aus den dazugehörigen Popupmenus genutzt werden.
2. Es soll auch nach dem Schreiben des Textes möglich sein diesen zuverändern (markieren des gewünschten Textes und übernahme der Werte aus den Popupmenus durch betätigen eines Pushbuttons).

Wollte das alles über die HTML Programmierung machen aber vielleicht gibt es ja noch eine andere Lösung?

Hoffe konnte es diesmal verständlich rüberbringen ...

Weiterhin vielen Dank Cool
_________________

Wer schwindelt der lügt.
Private Nachricht senden Benutzer-Profile anzeigen
 
Matlab_Fürst
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 22
Anmeldedatum: 19.11.14
Wohnort: Brandenburg
Version: Matlab 2009
     Beitrag Verfasst am: 10.03.2015, 08:39     Titel:
  Antworten mit Zitat      
Ergänzung:

Wenn ich den Text fertig bearbeitet habe, möchte ich diesen, nach betätigen eines Pushbuttons, als Kommentar in meinem Diagramm einfügen (z.B. als Textbox).

Die Möglichkeit über "selectedTextColor" die Farbe des markierten Textes zu ändern, ergibt sich wenn man die Seite durcharbeitet (den Link den du am Anfang geschickt hattest).
Der Code dazu:

Code:

jScrollPane = findjobj(findall(get(handles.textbox,'Children'),'Style','edit'));
jViewPort = jScrollPane.getViewport;
jEditbox = jViewPort.getComponent(0);
box=get(jEditbox);
 


Das m-File "findjobj" musste ich mir noch aus dem Netz ziehen.

Dabei ist "handles.textbox" mein Edittext-Feld.
Wenn man dann die Eigenschaften von "box" durchgeht, stößt man dort auf "selectedTextColor".
Somit könnte man die Farbe des markierten Textes ändern.
Das Problem ist aber das dann die Größe und dicke des Textes nicht berücksichtig werden.


Das Thema macht mich noch irre.
Wenn es funktioniert werde ich den Code dazu noch Online stellen. Hab dazu schon öfter Nachfragen gelesen und keine brauchbare Antwort gefunden.
_________________

Wer schwindelt der lügt.
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 10.03.2015, 10:51     Titel:
  Antworten mit Zitat      
Hallo Matlab_Fürst,

Die selectedTextColor betrifft aber nur den aktuell selektierten Text. Das verschwindet doch wieder, wenn man etwas anderes selektiert.

Du möchtest also ein Edit-Feld erstellen, in dem Du die Eigenschaften der Buchstaben ändern kannst. Das ist ziemlich ambitioniert in Matlab. Bist Du sicher, dass sich der Aufwand lohnt?
In Java gibt es da bestimmt eine Lösung, so dass ich erstmal hier weiter suchen würde.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Matlab_Fürst
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 22
Anmeldedatum: 19.11.14
Wohnort: Brandenburg
Version: Matlab 2009
     Beitrag Verfasst am: 10.03.2015, 13:47     Titel:
  Antworten mit Zitat      
Also wenn die Selektierung nach dem Bearbeiten verschwendet ist das doch ok.

Wenn man hier sein Beitrag eingibt hat man doch auch die Möglichkeit den Text beliebig zu ändern. Und die Selektierung verschwindet nach der Änderung auch.

Aber nach langem Suchen glaub ich auch das es über Java besser geht.

Wenn ich eine Lösung gefunden habe, werde ich sie posten.

Vielen Dank nochmal
_________________

Wer schwindelt der lügt.
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 10.03.2015, 16:05     Titel:
  Antworten mit Zitat      
Hallo Matlab_Fürst,

Zitat:
Also wenn die Selektierung nach dem Bearbeiten verschwendet ist das doch ok.

Damit verschwindet aber auch die selectedTextColor. Dir geht es ja nicht darum, welche Farbe die Text-Selection hat, sondern Du möchtest den ausgewählten Text dauerhaft ändern. Es ist also wie hier im Forum-Editor den Text markieren (dann wird er je nach OS und Browser invers&farbig dargestellt) und dann an eine andere Stelle zu klicken, so dass der Text wieder normal ist.

Viel Erfolg bei der Suche! Möglicherweise könnte auch ein ActiveX-Objekt hilfreich sein.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Matlab_Fürst
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 22
Anmeldedatum: 19.11.14
Wohnort: Brandenburg
Version: Matlab 2009
     Beitrag Verfasst am: 02.04.2015, 10:17     Titel:
  Antworten mit Zitat      
Wie versprochen die Lösung bzw. ein Lösungsvorschlag:

Callback eines Pushbuttons meiner GUI:

Code:


function text_fug_2_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton44 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
handles.textbox=figure;
set(handles.textbox,'Position',[100 100 820 500],'WindowButtonUpFcn',{@stopDragFcn,handles});
uicontrol('parent',handles.textbox,'Style','edit','tag','edit1','Position',[25 25 650 150],'HorizontalAlignment','left','Max',2);
u=uipanel('parent',handles.textbox,'tag','uipan','BackgroundColor',[0.8 0.8 0.8],'Units','pixels','Position',[25 200 650 250],'Title','Vorschau','Visible','on');
h=axes('parent',handles.textbox,'Units','pixels','Position',[27 202 640 240],'Visible','off','tag','fa');
t=text(0.05, 0.5,' ', 'Parent',h,'tag','Textfeld');
uicontrol('parent',handles.textbox,'Style','text','tag','text1','String','Schriftgröße:','Position',[685 160 65 15],'BackgroundColor',[0.8 0.8 0.8],'HorizontalAlignment','left');
uicontrol('parent',handles.textbox,'Style','text','tag','text2','String','Schriftfarbe:','Position',[685 116 65 15],'BackgroundColor',[0.8 0.8 0.8],'HorizontalAlignment','left');
uicontrol('parent',handles.textbox,'Style','popupmenu','tag','popupgross','String',[1:1:28],'Position',[685 134 45 25],'Value',4,'Callback',{@Callback_pop1,hObject});
uicontrol('parent',handles.textbox,'Style','popupmenu','tag','popupfarbe','String',...
        [{'<html><font color="#000000">Schwarz</font></html>'},...
        {'<html><font color="#ff0000">Rot</font></html>'},...
        {'<html><font color="#00ff00">Grün</font></html>'},...
        {'<html><font color="#ffff00">Gelb</font></html>'},...
        {'<html><font color="#0000ff">Blau</font></html>'},...
        {'<html><font color="#ff00ff">Magenta</font></html>'}],'Position',[685 91 75 25],'Value',1,'Callback',{@Callback_pop2,hObject});
   
uicontrol('parent',handles.textbox,'Style','pushbutton','String','Übernehmen','Position',[685 25 100 25],'Value',0,'Callback',{@Callback_text,hObject});
uicontrol('parent',handles.textbox,'Style','pushbutton','String','Fett','Position',[685 60 45 25],'Callback',{@Callback_fet,hObject});
uicontrol('parent',handles.textbox,'Style','pushbutton','String','Löschen','Position',[685 200 60 25],'Callback',{@Callback_del,hObject});
uicontrol('parent',handles.textbox,'Style','pushbutton','String','Text einfügen','Position',[685 410 80 30],'Callback',{@Callback_ein,hObject});
guidata(hObject, handles);
 



Pushbutton Callback für "Fette" Buchstaben:

Code:

function Callback_fet(handles,hObject,event)
handles=guidata(event);
jScrollPane = findjobj(findall(get(handles.textbox,'Children'),'tag','edit1'));
jViewPort = jScrollPane.getViewport;
jEditbox = jViewPort.getComponent(0);
box=get(jEditbox);
t_sel=box.SelectedText;
tt=box.Text;
start=get(jEditbox,'selectionStart');
stop=get(jEditbox,'selectionEnd');
for a=1:1:max(size(tt'))
    if tt(a)==char(13)
        if a<start && a<stop
            start=start+1;
            stop=stop+1;
        elseif a>start && a<stop
            stop=stop+1;
        else
            break
        end
    end
end
tk2=[tt(1:start),' {\bf{',t_sel,'}}',tt(stop+1:end)];
jEditbox.setText(tk2);
guidata(event,handles);
 




Popup Callback für SchriftFarbe:

Code:

function Callback_pop2(handles,hObject,event)
handles=guidata(event);
farbe_val=get(findall(get(handles.textbox,'Children'),'tag','popupfarbe'),'Value');
farbe_str=get(findall(get(handles.textbox,'Children'),'tag','popupfarbe'),'String');
farbe=farbe_str{farbe_val}(1,20:26);
jScrollPane = findjobj(findall(get(handles.textbox,'Children'),'tag','edit1'));
jViewPort = jScrollPane.getViewport;
jEditbox = jViewPort.getComponent(0);
box=get(jEditbox);
t_sel=box.SelectedText;
tt=box.Text;
start=get(jEditbox,'selectionStart');
stop=get(jEditbox,'selectionEnd');
for a=1:1:max(size(tt'))
    if tt(a)==char(13)
        if a<start && a<stop
            start=start+1;
            stop=stop+1;
        elseif a>start && a<stop
            stop=stop+1;
        else
            break
        end
    end
end
tk2=[tt(1:start),'{\color[rgb]{',num2str([hex2dec(farbe(2:3)),hex2dec(farbe(4:5)),hex2dec(farbe(6:7))]/255),'}',t_sel,'}',tt(stop+1:end)];
jEditbox.setText(tk2);
guidata(event,handles);
 


Popup Callback für Schriftgröße:

Code:

function Callback_pop1(handles,hObject,event)
handles=guidata(event);
dicke_val=get(findall(get(handles.textbox,'Children'),'tag','popupgross'),'Value');
jScrollPane = findjobj(findall(get(handles.textbox,'Children'),'tag','edit1'));
jViewPort = jScrollPane.getViewport;
jEditbox = jViewPort.getComponent(0);
box=get(jEditbox);
t_sel=box.SelectedText;
tt=box.Text;
start=get(jEditbox,'selectionStart');
stop=get(jEditbox,'selectionEnd');
for a=1:1:max(size(tt'))
    if tt(a)==char(13)
        if a<start && a<stop
            start=start+1;
            stop=stop+1;
        elseif a>start && a<stop
            stop=stop+1;
        else
            break
        end
    end
end
tk2=[tt(1:start),'{\fontsize{',num2str(dicke_val),'}',t_sel,'}',tt(stop+1:end)];
jEditbox.setText(tk2);
guidata(event,handles);
 



Pushbutton Callback für Textübergabe (von editfeld zu text --> dient als Vorschau):

Code:

function Callback_text(handles,hObject,event)
handles=guidata(event);
set(findall(get(handles.textbox,'Children'),'tag','Textfeld'),'String',get(findall(get(handles.textbox,'Children'),'tag','edit1'),'String'));
guidata(event,handles);
 



Pushbutton Callback für Vorschau löschen:

Code:

function Callback_del(handles,hObject,event)
handles=guidata(event);
set(findall(get(handles.textbox,'Children'),'tag','Textfeld'),'String','');
guidata(event,handles);
 



Pushbutton Callback für Textübergabe vom Edit-Feld zum axes in GUI:

Code:

function Callback_ein(handles,hObject,event)
handles=guidata(event);
handles.textkiste=text(0.95, 0.95,get(findall(get(handles.textbox,'Children'),'tag','Textfeld'),'String'),...
     'Parent',get(findobj(get(handles.tabui,'Children'),'type','uitab','Visible','on'),'Children'),...
     'ButtonDownFcn',{@startDragFcn,handles},...
     'BackgroundColor','w',...
     'EdgeColor','k',...
     'tag','Textkiste')
e=get(handles.textkiste,'Extent');
X=max(get(get(findobj(get(handles.tabui,'Children'),'type','uitab','Visible','on'),'Children'),'XLim'));
X_min=min(get(get(findobj(get(handles.tabui,'Children'),'type','uitab','Visible','on'),'Children'),'XLim'));
Y=max(get(get(findobj(get(handles.tabui,'Children'),'type','uitab','Visible','on'),'Children'),'YLim'));
set(handles.textkiste,'Position',[X - (e(3)+(X-X_min)*0.009) Y-(e(4))]);
set(handles.textkiste,'units','data');
set(handles.figure1,'WindowButtonUpFcn',{@stopDragFcn,handles});
guidata(event,handles);
 



Funktionen um das Text-Feld in der GUI mit der Maus verschieben zu können:

Code:

function startDragFcn(hObject, eventdata, handles)
set(handles.figure1,'WindowButtonMotionFcn',{@draggingFcn,handles});
guidata(hObject, handles);

function draggingFcn(hObject, eventdata, handles)
textkiste=findobj(get(handles.tabui,'Children'),'tag','Textkiste');
bild_sicht=findobj(get(handles.tabui,'Children'),'type','uitab','Visible','on');
pt=get(get(bild_sicht,'Children'),'CurrentPoint');  
set(textkiste,'Position',[pt(1,1) pt(1,2)]);
guidata(hObject, handles);

function stopDragFcn(hObject, eventdata, handles)
set(handles.figure1,'WindowbuttonMotionFcn','');
guidata(hObject, handles);
 




Schätze mal das wirkt etwas erschlagend..
Der Ablauf wäre wie folgt:
Text in Edit-Feld eintragen. Mit Maus gewünschte Buchstaben/Wörter makieren und bearbeiten und mit Button "Übernehmen" darüber das Ergebnis anschauen.
Die Befehle werden (wie auch bei Beiträgen in diesen Forum) mit in das Edit-Feld geschrieben und durch klicken auf "Übernehmen" an das darüber liegende Text-Feld gesendet.
Dort erhält man das Ergebnis vom "zusammengestelten" Code aus dem Edit-Feld.
Durch den Button "Text einfügen" wird ein Text-Feld, mit dem Ergebnis aus dem Edit-Feld, in die GUI auf ein Axes, rechts oben eingefügt.
Die GUI wurde bei mir mit dem guide erstellt.
Durch die letzten drei Funktionen (startDragFcn/draggingFcn/stopDragFcn) wird ein verschieben des Text-Feldes auf der GUI ermöglicht.
Meine GUI heist in diesem Fall: handles.figure1

Wenn ihr weitere Fragen oder Anregungen habt dazu, immer her Smile

Habe alle Funktionen gepostet fals jemand sich für sein Problem was raussuchen möchte.

@Jan.. was sagst du dazu als erfahrener Matlabnutzer?

Viel Spaß damit
_________________

Wer schwindelt der lügt.
Private Nachricht senden Benutzer-Profile anzeigen
 
Matlab_Fürst
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 22
Anmeldedatum: 19.11.14
Wohnort: Brandenburg
Version: Matlab 2009
     Beitrag Verfasst am: 02.04.2015, 10:19     Titel:
  Antworten mit Zitat      
Ergänzung:

Aus irgendeinen Grund muss man nach bearbeiten des Textes im Edit-Feld einmal in das Edit-Feld klick und dann auf "Übernehmen" klicken...
_________________

Wer schwindelt der lügt.
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum 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.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.