automatischer Zeilenumbruch nach x zeichen in Messagere....

Anfängerfragen zum Programmieren mit PureBasic.
HoDam
Beiträge: 82
Registriert: 19.11.2004 13:57
Wohnort: Köln, Cologne

automatischer Zeilenumbruch nach x zeichen in Messagere....

Beitrag von HoDam »

Hallo,

wie kann ich einen automatischen Zeilenumbruch in einem Messagerequester erzeugen?. Gibt es dafür einen Parameter?

Wichtig wäre für mich das er dann nicht das Wort trennt sondern, ab dem vorhergehenden Leerzeichen den Zeilenumbruch erzeugt, so wie in Word z.B
Benutzeravatar
Hroudtwolf
Beiträge: 1416
Registriert: 30.10.2004 23:33
Kontaktdaten:

Beitrag von Hroudtwolf »

Code: Alles auswählen

MessageRequester ("Hallo","Nachricht1"+chr(10)+"Nachricht2"+chr(10)+"Nachricht3",0)
HoDam
Beiträge: 82
Registriert: 19.11.2004 13:57
Wohnort: Köln, Cologne

Beitrag von HoDam »

hallo

danke, aber das habe ich nicht gemeint.

Ich möchte das Abhängig von der Fensterbreite des Messagerequester machen.

Hintergrund: Zum Teil gibt es Informationen zu bestimmten Programmabläufen für den Anwender. Da diese Abhängig von der Sprache unterschiedlich lang ausfallen können, möchte ich immer mit einer definierten Fensterbreite arbeiten und der an der Stelle des letzen Leerzeichens, welches noch in der Zeile vorkommt umgebrochen werden.

Die Strings werden zusammengetragen von unterschiedlichen Übersetzern. Ich wollte mir die Arbeit sparen, das ich jeden String anpacken muss.

Es muss nicht unbedingt der Messagerequester sein. Den hatte ich nur ausgewählt , weil man hier sehr leicht Unterscheidungen zwischen INFO, Fragen, Warnhinweise (Ausrufezeichen) mit entsprechenden Symbolen erzeugen kann.
Benutzeravatar
Green Snake
Beiträge: 1394
Registriert: 22.02.2005 19:08

Beitrag von Green Snake »

du willst also das der text IMMER centriert ist, und die msgbox IMMER gleich gross ist?

wenn ja, dan mach dir doch selber einen requester.
einfach ein fenster auf, text gadget drauf, und das gewünschte icon mitgeben :wink:
wenn du den "orginal" error ton, oder ienen anderen msgbox ton willst, dan such mal im code archiev, ich glaube dort hat es einen code, mit dem man die system sounds abspielen kann :allright:
-.-"
Benutzeravatar
jear
Beiträge: 288
Registriert: 17.10.2004 01:59
Wohnort: Ammerland

@HoDam

Beitrag von jear »

Ich möchte das abhängig von der Fensterbreite des Messagerequester machen.
Umgekehrt wird ein Schuh draus. Die Messagerequester passen sich automatisch an die Länge der Texte an.

Wenn Du aber aus optischen Gründen eine ungefähre Breite der Requester erreichen willst, dann könnte Dir der folgende Kode möglicherweise helfen.

Code: Alles auswählen

MText.s = "Das ist der Text, der an den Leerzeichen auf eine bestimmte Länge umgebrochen werden soll."
;MText.s = "1234 6789012 456 890123456 890123456 890 234567890 2345678901 345 78 0123456 8901234567890"
MTextL = Len(MText) : MTextU = 10 : Umbr = MTextU : lSpace = 1
For ix.b = 1 To MTextL
  If Mid(MText, ix, 1) = Space(1) 
    If ix => Umbr
      MText = Left(MText,lSpace - 1) + #LF$ + Right(MText, MTextL - lSpace)
      Umbr + MTextU
    EndIf 
    lSpace = ix ; Debug lspace
  EndIf 
Next
MessageRequester("Umbruchtest", MText, #MB_OK|#MB_ICONWARNING)
End
Man ist nie zu alt zum lernen, auch wenn man dabei manchmal alt aussieht!
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

@Green Snake
>> wenn du den "orginal" error ton, oder ienen anderen msgbox ton willst
z.B. so

Code: Alles auswählen

MessageBeep_(#MB_ICONINFORMATION)
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Green Snake
Beiträge: 1394
Registriert: 22.02.2005 19:08

Beitrag von Green Snake »

genau :D

Code: Alles auswählen

MessageBeep_(#MB_ICONINFORMATION)
Delay(1000)
MessageBeep_(#MB_ICONERROR)
Delay(1000)
MessageBeep_(#MB_ICONQUESTION)
Delay(1000)
MessageBeep_(#MB_ICONWARNING)
Delay(1000)
MessageBeep_(#MB_OK)
Delay(1000)
hier sind noch die anderen.
*gibts eigentlich noch mehr? :? *
-.-"
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Hier noch die Icons:

Code: Alles auswählen

iconStop.l        = LoadIcon_(WindowID(), #IDI_HAND)
iconQuestion.l    = LoadIcon_(WindowID(), #IDI_QUESTION)
iconExclamation.l = LoadIcon_(WindowID(), #IDI_EXCLAMATION)
iconInformation.l = LoadIcon_(WindowID(), #IDI_ASTERISK)
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
AndyMars
Beiträge: 141
Registriert: 08.09.2004 11:59
Computerausstattung: Win11 Prof 64bit, i5-13500 @ 4.8 GHz, 32GB RAM, Nvidia RTX 4070 TI
Wohnort: Zürich, Schweiz
Kontaktdaten:

Zeilenumbruch auf bestimmte Länge

Beitrag von AndyMars »

Das mit dem Zeilenumbruch hat mich interessiert - die obige Funktion hat aber noch einen Fehler... Ich hab mal einen anderen Ansatz versucht:

Code: Alles auswählen

Procedure.s _BreakLines(Text.s, Length.l)
  ;diese Methode ist vielleicht auch nicht perfekt - aber immerhin
  For i=1 To CountString(Text," ")+1
    s$=StringField(Text,i," ")
    If Len(z$)+Len(s$)>Length
      b$+#CRLF$+Trim(z$)
      z$=""
    EndIf
    z$+s$+" "
  Next
  b$+#CRLF$+Trim(z$)
  b$=Right(b$,Len(b$)-2) ;erstes #CRLF$ ist zu viel
  ProcedureReturn b$
EndProcedure


If OpenWindow(0,100,100,600,400,#PB_Window_SystemMenu ,"Umbruchtest")
  If CreateGadgetList(WindowID(0))
    EditorGadget(0,5,5,590,390)
    SetGadgetFont(0,LoadFont(0,"Courier",10,0))
  EndIf
Else
  MessageRequester("Umbruchtest", "Konnte Fenster nicht öffnen!")
  End
EndIf

MText.s="It is costly, increasingly regulated in many industries, And as admissible in court as paper documents. Learn more about how you can reduce the cost of your email system And understand which emails are putting you at risk, While supporting compliance initiatives And legal discovery processes as part of a comprehensive"
MTextL = Len(MText) : MTextU = 30 : Umbr = MTextU : lSpace = 1
MText2.s=MText ;für später speichern

For i=1 To MtextU ;Lineal String
  Lineal$+Str(i % 10)
Next
Lineal$=ReplaceString(Lineal$,"0"," ") ;find ich übersichtlicher

;erst die alte Methode
For ix.b = 1 To MTextL
  If Mid(MText, ix, 1) = Space(1)
    If ix => Umbr
      MText = Left(MText,lSpace - 1) + #LF$ + Right(MText, MTextL - lSpace)
      Umbr + MTextU
    EndIf
    lSpace = ix ; Debug lspace
  EndIf
Next
SetGadgetText(0,Lineal$ + #LF$ + MText)
While WaitWindowEvent()<>#PB_Event_CloseWindow:Wend ;mit Fensterschliessen geht's weiter... 

SetGadgetText(0,Lineal$ + #CRLF$ + _BreakLines(MText2, MTextU))
While WaitWindowEvent()<>#PB_Event_CloseWindow:Wend

End
Edit 5.1.2006: Code noch etwas geändert
Grüsse von AndyMars
Antworten