Schrift als Kreis verbiegen

Für allgemeine Fragen zur Programmierung mit PureBasic.
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 »

Falko hat geschrieben:Hi, Thomas, hab's mal auf Pb3.94 korrigiert <) (Ausser den bei dir :lol: )o
Hab mir nur gewundert wegen der Fehlermeldungen :lol:
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
Falko
Admin
Beiträge: 3535
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit)
Kontaktdaten:

Beitrag von Falko »

Das Blöde bei der IDE ist, wenn man zuletzt in PB 3.94 gearbeitet hat, bleibt ja die IDE solange erhalten.

Später, wenn man mit PB 4 arbeiten möchte und mit Doppelklick einen Source in dessen Ordner anklickt, merkt man im ersten Moment nicht sofort, das man in der IDE zu PB 3.94 arbeitet. :lol:

Hab mich schon gewundert, das ich keine Fehlermeldung wegen der
WindowsID's, als auch wegen dem String im OpenWindows(...) beim Test bekam :lol:


Vielleicht wäre es schön, wenn freak die IDE's entweder mit einem Hellgrauen Wasserzeichen im Hintergrund oder nur eine
Purebasic Ver. 4.0 - Erweiterung im Fensterkopf kennzeichnen könnte
, da es hin und wieder erforderlich ist, die ältere PB-Version zu nutzen und
man nach Doppelklick der Sourceverknüpung gleich sieht, womit man arbeitet :mrgreen:

Ist aber super, Thomas, das es Dir sofort aufgefallen und
schnell korrigiert werden konnte. :allright:

Danke und viele Grüße
Falko
Bild
Win11 Pro 64-Bit, PB_6.11b1
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 »

Mach Dir ne Verknüpfung für die PB3.94 IDE mit dem Parameter "/NOEXT"
So ist immer PB4 gültig und wenn Du die alte Version brauchst, nimmste die
Verknüpfung, die dann die Zuordnung nicht ändert :wink:

Kannste die Verknüpfung auch nach SendTo kopieren, so kannste per rechtsklick auch alte Sourcen öffnen

Gruß
Thomas
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
Falko
Admin
Beiträge: 3535
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit)
Kontaktdaten:

Beitrag von Falko »

@ts-soft
Mal schauen, vielleicht mache ich es dann so, wie du sagst Thomas :allright:

@Calloway, hast Glück, das ich noch 2 Wochen Urlaub habe :lol:
Hier noch eine Drucker-Procedure, die man dann auch in den Source einbauen könnte. Ist nur ein Beispiel, um zu zeigen, wie man das drucken könnte. Will man es im Verhältnis haben, muss das noch im Verhältnis
zur CD umgerechnet und angepasst werden. Damit man es sehen kann,
habe ich nur mal so einen Faktor zum Papierformat genommen.


Folgende Procedure an den Teil unter der letzten Procedure im obigen Source bitte ersetzen. Getestet habe ich das mit einem PDF-Printer 8)

Code: Alles auswählen

Procedure Print_Circle_Text(String$) 
 If PrintRequester()

  If StartPrinting("PureBasic Test")

  hDc=StartDrawing(PrinterOutput()) 
    If hDc 
     PrinterFaktor=2.5; Hier z.B. die Anpassung für den Drucker machen
       FrontColor(RGB(0,255,0)) 
       Radius=180 * PrinterFaktor
       String$="Purebasic 4 you" 
  
       For i=1 To Len(string$) 
          Zeichen$=Mid(String$,i,1) 
          Winkel=20 * i 
          X = Radius*Sin(Winkel/360*2*#PI)
          Y = Radius*Cos(Winkel/360*2*#PI)
          DrawRText(hDc, PrinterPageWidth()/2+X*PrinterFaktor, PrinterPageHeight()/4+Y*PrinterFaktor,Zeichen$,"Arial",Winkel,40*PrinterFaktor) 
       Next i 
     EndIf 
     StopDrawing() 
     StopPrinting()
    EndIf 
  EndIf

  EndProcedure 
 Circle_Text("Happy Purebasic4") ; Bild anzeigen
 Print_Circle_Text("Happy Purebasic4") ; Bild ausdrucken
 Repeat 
  Event=WaitWindowEvent() 
  If Event=#PB_EventType_Focus or #PB_Event_MoveWindow:Circle_Text("Happy Purebasic4"):EndIf ;  Redraw Windows! 
 Until Event = #PB_Event_CloseWindow
[Edit] habe in der Eventabfrage noch schnell folgende Event_Konstanten
eingesetzt. Jetzt wird auch das Bild nach bedecken von Fenstern wieder
neugezeichnet. Sieht ja schon fast so gut aus, wie das AutoRedraw von meinem GFA-Basic :mrgreen:

#PB_EventType_Focus or #PB_Event_MoveWindow
[/Edit]

Grüsse Falko
Zuletzt geändert von Falko am 27.07.2006 00:24, insgesamt 3-mal geändert.
Bild
Win11 Pro 64-Bit, PB_6.11b1
Calloway
Beiträge: 106
Registriert: 15.09.2004 23:26

Beitrag von Calloway »

Sehr schön!
Ich versuche das gerade mittels den pdf-Befehlen als PDF-Dokument zu drucken. Ist noch etwas schwer... Oder ich befasse mich mal damit, wenn es nicht ganz so heiß ist...
Calloway
Beiträge: 106
Registriert: 15.09.2004 23:26

Beitrag von Calloway »

So, jetzt regnets, es ist nicht mehr so heiß, und ich habe mich des Problems noch einmal angenommen und bereits eine halbwegs zufriedenstellende Lösung gefunden:

Code: Alles auswählen

PI.f=3.1415926
Hoehe.l=85  ; 3 cm
Breite.l=85  ; 3 cm
APX.l=71 ; 2,5 cm    Ankerpunkt X 
APY.l=71 ; 2,5       Ankerpunkt Y

a$=UCase(" Textausrichtung an einem Kreis ")

pdf_Create("P","pt",#PDF_PAGE_FORMAT_A4)
pdf_AddPage()
pdf_SetMargins(0,0,0) 
pdf_SetFont("Courier","B",8)

pdf_SetFillColor(255,255,255)
pdf_SetTextColor(128,128,128)
Radius.f=43 ; 1,5 cm

For i=1 To Len(a$) 
  Zeichen$=Mid(a$,i,1) 
  Winkel=9 * i 
  x = Radius*Sin(Winkel/360*2*PI) 
  y = Radius*Cos(Winkel/360*2*PI) 

  pdf_SetXY(APX+x,APY-y)
  pdf_Rotate(360-Winkel)
  pdf_Cell(14,14,Zeichen$,0,0,#PDF_ALIGN_CENTER,0)
Next i 
pdf_Save("C:\RotateText1.pdf")
RunProgram("C:\RotateText1.pdf")
Zum Ausführen dieses Codes braucht man Luckys PDF-Library.
http://www.smollies.be/

Das Problem ist, dass die Drehung nicht ganz sauber ist und dadurch der Text immer noch sehr unruhig wirkt. Weiß jemand, wie man das Ergebnis noch verbessern kann?
Benutzeravatar
Falko
Admin
Beiträge: 3535
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit)
Kontaktdaten:

Beitrag von Falko »

Hab den Fehler gefunden. Es liegt daran, das die Zelle wohl an der linken unteren Ecke ausgerichtet wird.
Entweder müsste man diesen Winkel und Radius neu ausrechnen,
oder aber, setzt die Zelle einfach auf einen Punkt.
Zwar kannst du dann keinen Rahmen machen, aber so sieht das
doch gut aus, oder? :mrgreen:

Code: Alles auswählen

PI.f=3.1415926 
Hoehe.l=85  ; 3 cm 
Breite.l=85  ; 3 cm 
APX.l=71 ; 2,5 cm    Ankerpunkt X 
APY.l=71 ; 2,5       Ankerpunkt Y 

a$=UCase(" Textausrichtung an einem Kreis ") 

pdf_Create("P","pt",#PDF_PAGE_FORMAT_A4)
pdf_AddPage() 
pdf_SetMargins(0,0,0) 
pdf_SetFont("Courier","B",8) 

pdf_SetFillColor(255,255,255) 
pdf_SetTextColor(128,128,128) 
Radius.f=43 ; 1,5 cm 
 pdf_SetXY(APX,APY)
For i=1 To Len(a$) 
  Zeichen$=Mid(a$,i,1) 
  Winkel=9 * i 
   x.f = APX+Radius*Sin(Winkel/360*2*PI) 
   y.f = APY-Radius*Cos(Winkel/360*2*PI)
  pdf_SetXY(x,y)
  pdf_Rotate(360-Winkel);Winkel)
  pdf_Cell(1,1,Zeichen$,0,0,#PDF_ALIGN_CENTER,0) ; Hier steckt der Fehler drinne :D , changed by Falko
  
Next i 
pdf_Save("C:\RotateText1.pdf") 
RunProgram("C:\RotateText1.pdf") 
Zuletzt geändert von Falko am 05.02.2008 15:31, insgesamt 1-mal geändert.
Bild
Win11 Pro 64-Bit, PB_6.11b1
Calloway
Beiträge: 106
Registriert: 15.09.2004 23:26

Beitrag von Calloway »

WOW! Ich bin begeistert! Vielen Dank für die kleine Korrektur!
Diesen Code könnte man glatt bei PureArea einstellen... :allright:
Benutzeravatar
Falko
Admin
Beiträge: 3535
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit)
Kontaktdaten:

Beitrag von Falko »

Warum nicht. Gefällt mir auch sehr gut :allright:
Da Andrè im Urlaub ist, kannst Du ihm am besten über PN auf diesen Link verweisen. :wink:

Die PDF-Lib ist nicht schlecht. So konnte ich mir das mal mittels deinem
Beispiel vor Augen halten, wie man sowas aufbauen kann. :allright:

Mal schauen, da kommen jetzt wieder Ideen zu PNG_Shot auf, wenn Jens
am Sonntag wieder da ist :twisted:

Grüße Falko
Bild
Win11 Pro 64-Bit, PB_6.11b1
Benutzeravatar
roherter
Beiträge: 1407
Registriert: 10.04.2005 18:58
Kontaktdaten:

Beitrag von roherter »

Wie kann ich den Text andersrum darstellen, ich meine das die buchstaben nicht nach aussen zeigen sonder nach innen?
Purebasic 5.0 32bit und 64 bit

I'm back from hell
Antworten