hola gente, "trabajando" en un proyecto me tope con un problema tal vez un poco tonto pero la verdad, ya mi cabeza esta quemada y la verdad es que no me sale, por lo que vi en cplusplus el ejemplo de uso no es difícil pero me blockie y puf.
bue, estoy armando un menú el cual saco los string de cada ítem desde el recursos, hasta ahí todo bien, el tema es que entre estos string hay uno que es "aaaa & bbb" por ejemplo, contiene un carácter "&" el cual no logro hacer visible entre el texto del menú.
se que estos caracteres como & van antecedidos por el carácter "\" para que sean visibles, pero ese mismo string lo uso como titulo de la ventana.
googleando me tope con este ejemplo strstr (http://www.cplusplus.com/reference/clibrary/cstring/strstr/) y por lo que vi es simple el uso, pero no me sale
TACHAR szTitle[50];
char dumy[30];
char * pch;
LoadString(hInst, 10, szTitle, sizeof(szTitle));
pch = strstr (szTitle,"&");
strncpy (pch,"&&",2);
AppendMenu(hMenu, MF_GRAYED, 0, dumy);
el resultado de eso es "aaaa &bbb".
ya me trabe y necesito ayuda con esto, me pudo.
pls help
A ver si entiendo bien tu resultado debería ser el siguiente:
"aaaa & bbb"
y no:
"aaaa &bbb"
si, osea ese mismo string szTitle lo uso para hacer un WM_SETTEXT y se visualiza bien así como esta en el String Table "aaaa & bbb" pero al pasarlo a un ítem del menú el carácter & se usa para poner el subrayado en una palabra, yo lo que necesito es que aparezca el carácter "&"
Prueba ponerlo duplicado "Texto && Mas Texto"
si podría ponerlo así, pero después entro en el mismo problema a la inversa, por que en el menú me queda bien, pero en la barra de titulo [SendMessage(hWnd, WM_SETTEXT,0, (LPARAM)dumy);] me queda con 2 "&", y para complicarmela un poco mas ese mismo texto lo tengo de tooltip del systry.
si le pongo "aaaa &&& bbb" tendría que restarle "&&" a donde le hago WM_SETTEXT...
me metí en un quilombo innecesario al cuete, help!
Podrías hacer lo siguiente dejarlo como lo tenías en un principio y hacer una función strreplace como la de php no se si sabes como es, y reemplazas el & por && cuando vayas a asignarle el texto al menú y listo.
es lo que trato de hacer pero no me sale, osea en si tengo que hacer esto, sea para sumar & o bien para sacar & exedentes, e tema es que no se k procedimiento usar para esto, yo puse strstr por que es lo 1º que se me ocurrio, pero escucho sugerencias.
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
char *strreplace(const char * str, const char * find, const char * replace){
int i,j,k, flag, pos = -1;
int bytes = strlen(str)-strlen(find)+strlen(replace);
char * nstr = (char*)malloc(bytes+1);
memset(nstr, 0, bytes+1);
for(i = 0; i <= strlen(str)-strlen(find); i++){
flag = i;
k = 0;
for(j=i; j<=(i+strlen(find)-1); j++){
if(find[k] != str[j])
flag = -1;
k++;
}
if(flag != -1)
pos = flag;
}
int size = pos + strlen(replace) - 1;
int oldsize = pos + strlen(find);
int cont = 0;
j = 0;
for(i=0;i<=bytes-1;i++){
if(i>=pos && i<=size){
nstr[i] = replace[cont];
cont++;
if(i==size)
j=oldsize;
} else {
nstr[i] = str[j];
j++;
}
}
return nstr;
}
int main(){
char * reemplazo = strreplace("Texto & texto", "&", "&&");
printf("%s\n" ,reemplazo);
free(reemplazo);
return 0;
}
Fíjate si mi función de strreplace te funciona...
la verdad si me sirvió, ahora tengo que analizar lo que hacer para ver si logro entender la lógica.
gracias
Cita de: xkiz ™ en 22 Septiembre 2011, 15:08 PMbue, estoy armando un menú el cual saco los string de cada ítem desde el recursos, hasta ahí todo bien, el tema es que entre estos string hay uno que es "aaaa & bbb" por ejemplo, contiene un carácter "&" el cual no logro hacer visible entre el texto del menú.
se que estos caracteres como & van antecedidos por el carácter "\" para que sean visibles, pero ese mismo string lo uso como titulo de la ventana.
quien te dijo que tenes que agregarle "\" ? el caracter "&" no tiene nada especial... si no te aparece subrayado debe ser por otra cosa y con respecto a tu ejemplo:
Citar"aaaa & bbb"
eso no va a funcionar por el espacio en blanco... a lo sumo "aaaa &bbb".
esta es la función encargada de dibujar los strings en los menús: DrawTextEx (http://msdn.microsoft.com/en-us/library/dd162499%28v=vs.85%29.aspx)
fijate la parte de DT_PREFIXONLY
S2
mmmm.... tal vez me explique mal yo desde el principio, yo tengo un
String Table:
STRINGTABLE DISCARDABLE
BEGIN
101 "Rock & Pop"
END
la cual necesito cargarla en la barra de Titulo de una ventana, un item de un PopUpMenu y un Tooltip, como se ve en la imagen de aca abajo.
(http://www.mediafire.com/imgbnc.php/c56835fff7bc13cf285e9a07dcb4dff98041e207107c285bc7adb039a9b42e422g.jpg) (http://www.mediafire.com/imageview.php?quickkey=9be7tg5x83q9pol&thumb=5)
Link(imagen): http://www.mediafire.com/imageview.php?quickkey=9be7tg5x83q9pol&thumb=5
si en el rc yo pongo "Rock &&& Pop" en el tooltip y en el item del menú se ven bien pero en la barra de titulo se visualizan los 3 &.
Cita de: Karman en 23 Septiembre 2011, 05:05 AM
quien te dijo que tenes que agregarle "\" ? el caracter "&" no tiene nada especial
tampoco es un carácter normal como es la "a".
la funcion que me paso
naderST funciona bien, pero no se por que me crashea la aplicación, no encontré bien por que todavía, después la voy a debugear bien.
Cita de: xkiz ™ en 23 Septiembre 2011, 16:57 PM
mmmm.... tal vez me explique mal yo desde el principio, yo tengo un String Table:
STRINGTABLE DISCARDABLE
BEGIN
101 "Rock & Pop"
END
la cual necesito cargarla en la barra de Titulo de una ventana, un item de un PopUpMenu y un Tooltip, como se ve en la imagen de aca abajo.
(http://www.mediafire.com/imgbnc.php/c56835fff7bc13cf285e9a07dcb4dff98041e207107c285bc7adb039a9b42e422g.jpg) (http://www.mediafire.com/imageview.php?quickkey=9be7tg5x83q9pol&thumb=5)
y porqué directamente no modificas tu stringtable(?)
S2
a perdón me olvide de comentar esto antes:
@
naderST al compilar la aplicación me dice esto:
Citar
warning C4018: '<=' : signed/unsigned mismatch
for(j=i; j<=(i+strlen(find)-1); j++){
si la declaro antes:
int z = i+strlen(find)-1;
for(j=i; j<=z; j++){
ah si me crashea mal....
@
Karman lo que no quiero hacer es tener que meter 2 strings 1 para el titulo y otro para el tooltip y el ítem del menú, me la quiero arreglar con solo uno, y si a ese string table le agrego los 3 & estoy en la mismo pero al revés, envés de sumar restar, me explico?
Bueno supongo que esto pasa porque strlen() devuelve unsigned int y lo estoy asignando a variables tipo int... Aquí lo modifiqué:
char *strreplace(const char * str, const char * find, const char * replace){
unsigned int i,j,k,pos, val, size, oldsize, cont;
unsigned int bytes = strlen(str)-strlen(find)+strlen(replace);
int flag;
char * nstr = (char*)malloc(bytes+1);
memset(nstr, 0, bytes+1);
for(i = 0; i <= strlen(str)-strlen(find); i++){
flag = 1;
val = i;
k = 0;
// unsigned int z = (i+strlen(find)-1);
for(j=i; j<=(i+strlen(find)-1); j++){
if(find[k] != str[j])
flag = 0;
k++;
}
if(flag != 0)
pos = val;
}
size = pos + strlen(replace) - 1;
oldsize = pos + strlen(find);
cont = 0;
j = 0;
for(i=0;i<=bytes-1;i++){
if(i>=pos && i<=size){
nstr[i] = replace[cont];
cont++;
if(i==size)
j=oldsize;
} else {
nstr[i] = str[j];
j++;
}
}
return nstr;
}