Da mich das Thema interessiert, hier ein Ansatz, wie ich das angehen würde. Vielleicht schreib ich s noch fertig, aber momentan fehlt mir die Muse.

Aus dem Stringarray muss ein Struct gefertigt werden, was den Stringpointer und die Farbe beinhaltet (z.b.).
Unter pan_setdigits wird pan_setcolor aufgerufen.
Ausserdem brauchts noch eine zusätzliche Schleife mit den Wörtern, die eingefärbt werden sollen, was auch ein Struct sein kann (Wort+ Farbe). Das ganze sollte schnell genug laufen.


Code:
STRING* keyE ="e";

PANEL* DsPanel = 
{
	bmap = bmpDsObj;
	pos_x = 100;
	pos_y = 100;
}

PANEL* DsPanelE = 
{
	bmap = bmpDsShowE;
}


FONT* fontTest = "Arial#20";
STRING* strFile[4000];

action DialogTrigger() 
{
	DsPanelE.pos_x = 400;
	DsPanelE.pos_y = 400;
	var strWidth = 0;
	var posX =0, posY = 0;
	var charCount;
	var counter = 0;
	
	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);						
								
							strWidth += str_width (strFile[counter], fontTest); // 200  max
							if(strWidth < 300)
							{
								posX = strWidth + 5;	
							}
							else
							{
								posY += 30;
								posX = 0;
								strWidth = 0;
							}
			
							pan_setdigits(DsPanel, 0, posX,posY, strFile[counter], fontTest, 1, 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 09:51.