Hier ein zweites Beispiel mit einfärben der Wörter. Du kannst das gerne umbauen und auch die Keywörter aus einer Textdatei laden.

Ausserdem gibt es noch ein Problem mit der Breite jeden Digits. Das laesst sich vermutlich beheben, indem das erstellen entweder ausgelagert wird oder die Digits vorher erstellt werden.

Das Problem mit der Breite geh ich spaeter nochmal an und poste meine Lösung.


Code:
typedef struct Keyword
{
  STRING* Word;
  COLOR Color;
} Keyword;
Keyword Keywords[2];

FONT* fontTest = "Arial#20";

STRING* strFile[4000];

void InitKeywords()
{
	Keywords[0].Word = str_create("unendlich");
	vec_set(Keywords[0].Color, vector(255,0,0));
	Keywords[1].Word = str_create("Satz");
	vec_set(Keywords[1].Color, vector(0,255,0));	
}


action DialogTrigger() 
{
	InitKeywords();
	
	
	DsPanelE.pos_x = 400;
	DsPanelE.pos_y = 400;
	var strWidth = 0;
	var posX =30, posY = 30;
	var charCount;
	var counter = 0;
	int i;
	
	while(1)
	{
		var dist = abs(vec_dist(player.x, my.x));
		if(dist < 255)
		{					
			set(DsPanelE, SHOW);		
			if(key_pressed(key_for_str(keyE))) 
			{				
				while(key_pressed(key_for_str(keyE))) 
					wait(1);
					
				while(!key_pressed(key_for_str(keyE))) 
				{
					set(DsPanel, SHOW);
					
					var fileHandle = file_open_read("ColoredText.txt");
					if (fileHandle)
					{	
						while(1)
						{
							if(charCount == -1)
								break;
								
							strFile[counter] = str_create("");
							charCount = file_str_readto(fileHandle,strFile[counter], " ", 4000);
															
							pan_setdigits(DsPanel, 0, posX,posY, strFile[counter], fontTest, 1, 0);
							
							for(i = 0; i< 2; i++)
							{
								if(str_cmp(Keywords[i].Word, strFile[counter])) {
									pan_setcolor(DsPanel, 1, counter, Keywords[i].Color);
									break;
								}
							}
							
							strWidth += str_width (strFile[counter], fontTest); 
							if(strWidth < 250)
							{
								posX = strWidth + 10;	
							}
							else
							{
								posY += 30;
								posX = 30;
								strWidth = 0;
							}
							
							counter++;						
							wait(1);
						}
										
						file_close (fileHandle);
					}
					
					
					reset(DsPanelE, SHOW);	
					wait(1);
				}
				
				while(key_pressed(key_for_str(keyE))) 
					wait(1);
					
				reset(DsPanel, SHOW);
				set(DsPanelE, SHOW);	
			}
		}
		else
		{
			reset(DsPanelE, SHOW);	
			reset(DsPanel, SHOW);	
		}
			
		wait(1);
	}
}


Last edited by Ayumi; 06/13/17 14:08.