In consolenanwendung einen Rahmen zeichnen

  • VB.NET
  • .NET (FX) 4.0

Es gibt 19 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    In consolenanwendung einen Rahmen zeichnen

    Hallo liebe Community,

    ich wollte in einem kleinen Project einen Rahmen in einer ConsolenanwendungZeichnen..

    Ich hatte das schonmal aber in c.. hier der Code dazu.
    Spoiler anzeigen

    Quellcode

    1. #include<stdio.h>
    2. #include<stdlib.h>
    3. #include<string.h>
    4. #include<conio.h>
    5. /*Erweiterte Tastaturcodes*/
    6. #define vcF1 0x3b
    7. #define vcF2 0x3c
    8. #define vcF3 0x3d
    9. #define vcF4 0x3e
    10. #define vcF5 0x3f
    11. #define vcESC 0x1b
    12. #define vcANZAHL 20
    13. #define vcCR 0x0d
    14. #define vcBACK 0x08
    15. #define vcF6 0x40
    16. #define UE (unsigned char)154
    17. #define ue (unsigned char)129
    18. //Definierung der ASCII Zeichenketten Balken
    19. #define linksoben 201
    20. #define rechtsoben 0xbb
    21. #define rechtsunten 0xbc
    22. #define linksunten 0xc8
    23. #define horizontal 0xcd
    24. #define vertikal 0xba
    25. #define zeile 204
    26. /*Funktionsprototypen*/
    27. void menue(void);
    28. short getshort(short);
    29. float getfloat(short, short);
    30. void getstring(char *, short);/* "*" is the ram location*/
    31. void gettyp(char *, short);
    32. void getbaujahr(char *, short);
    33. long getlong(short);
    34. void getfarbe(unsigned char*, short);
    35. /*Struktur definieren*/
    36. struct pkw
    37. {
    38. char Marke[20];
    39. char Typ[20];
    40. unsigned char Farbe[15];
    41. short Leistung;
    42. char Baujahr[5];
    43. long Preis;
    44. };
    45. void main()
    46. {
    47. //Consolenfenster bei mac im vollbildmodus zulassen wmic
    48. system("mode 800");
    49. //Consolnfarbe ändern
    50. system("color F4");
    51. //Variablendeklaration
    52. short param;
    53. short n;
    54. char ch;
    55. short i;
    56. short nr;
    57. short sortiert;
    58. char q;
    59. char j;
    60. char Typ[20];
    61. char Marke[20];
    62. char asc;
    63. //Deklaration einer Structurfeldvariable
    64. struct pkw pkwlist[100];
    65. /*Deklaration einer Strukturvariable*/
    66. struct pkw h;
    67. FILE *file_in;
    68. FILE *file_out;
    69. /*initialisierung*/
    70. param = 0;
    71. n = 0;
    72. asc = 0xba;
    73. //Datei anlegen und Öffnen
    74. fopen_s(&file_in, "Automarkt.txt", "r");
    75. //Absicherung
    76. if (file_in == NULL)
    77. {
    78. system("cls");
    79. printf("\n");
    80. printf("\n Die Datei Automarke.txt wurde nicht Gefunden!");
    81. printf("\n");
    82. printf("\n Weiter mit beliebiger Taste!");
    83. _getch();
    84. }
    85. else
    86. {
    87. //Anzahl der Artikel Speichern
    88. fread(&n, sizeof(short), 1, file_in);
    89. for (i = 0; i < n; i++)
    90. {
    91. //Einen Artikel Speichern
    92. fread(&pkwlist[i], sizeof(pkw), 1, file_in);
    93. }
    94. //Datei Schließen
    95. fclose(file_in);
    96. }
    97. //Menü aufrufen
    98. menue();
    99. /*Kopfgesteuerte Schleife*/
    100. while ((ch = _getch()) != vcESC)
    101. {
    102. if (param == 1)
    103. {
    104. //Neues fahrzeug hinzufügen
    105. if (ch == vcF1)
    106. {
    107. system("cls");
    108. printf("\n Neues Auto");
    109. printf("\n =============");
    110. printf("\n");
    111. //Eingabe Marke
    112. printf("\n Marke: ");
    113. getstring(pkwlist[n].Marke, vcANZAHL);
    114. //Eingabe Typ
    115. printf("\n Typ: ");
    116. gettyp(pkwlist[n].Typ, vcANZAHL);
    117. //Eingabe Leistung
    118. printf("\n Leistung: ");
    119. pkwlist[n].Leistung = getshort(4);
    120. //Eingabe Farbe
    121. printf("\n Farbe: ");
    122. getfarbe(pkwlist[n].Farbe, 15);
    123. //Eingabe Baujahr
    124. printf("\n Baujahr: ");
    125. getbaujahr(pkwlist[n].Baujahr, 4);
    126. //Eingabe Preis
    127. printf("\n Preis: ");
    128. pkwlist[n].Preis = getlong(6);
    129. //Wenn typ nicht ausgefüllt dann nicht Speichern
    130. for (i = 0; pkwlist[n].Typ[i] != '\0'; i++);
    131. printf("\n i = %d", i);
    132. if (i>0) n++;
    133. //bremse
    134. printf("\n");
    135. printf("\n Weiter mit beliebiger Taste ");
    136. _getch();
    137. //Menü nach tastendruck aufrufen
    138. menue();
    139. }
    140. //Fahrzeugliste aufrufen
    141. else if (ch == vcF2)
    142. {
    143. system("cls");
    144. printf("\n Fahrzeugliste");
    145. printf("\n =============");
    146. printf("\n");
    147. //Rahmen links oben
    148. putchar(linksoben);
    149. //Gerader Rahmen bis Zeichen 1005
    150. for (i = 1; i < 105; i++)
    151. putchar(horizontal);
    152. //Rechte obere Ecke
    153. putchar(rechtsoben);
    154. //Leerzeile aus dem Array rausnehmen
    155. printf("\n");
    156. putchar(vertikal) + printf(" Nr. | Marke | Typ | Leistung| Farbe | Baujahr | Preis ") + putchar(vertikal);
    157. /* Alle Artikel ausgeben */
    158. for (i = 0; i < n; i++)
    159. {
    160. printf("\n");
    161. putchar(vertikal) + printf(" %3d %c %-20s | %-20s | %4d | %-15s | %5s | %6d EUR ", i + 1, asc, pkwlist[i].Marke, pkwlist[i].Typ, pkwlist[i].Leistung, pkwlist[i].Farbe, pkwlist[i].Baujahr, pkwlist[i].Preis) + putchar(vertikal);
    162. }
    163. printf("\n");
    164. putchar(linksunten);
    165. //Rahmen, boden
    166. for (i = 1; i < 105; i++)
    167. putchar(horizontal);
    168. //Ecke rechts unten
    169. putchar(rechtsunten);
    170. /* Bremse */
    171. printf("\n");
    172. printf("\n Weiter mit beliebiger Taste!");
    173. _getch();
    174. //Nach tastendruck das menue aufrufen
    175. menue();
    176. }
    177. //Fahrzeug entfernen
    178. else if (ch == vcF3)
    179. {
    180. system("cls");
    181. printf("\n Fahrzeug entfernen");
    182. printf("\n =================");
    183. printf("\n");
    184. printf("\n");
    185. printf("|Nr. | Marke | Typ | Leistung| Farbe | Baujahr | Preis |");
    186. printf("\n__________________________________________________________________________________________________________");
    187. for (i = 0; i < n; i++)
    188. {
    189. printf("\n| %3d | %-20s | %-20s | %4d | %-15s | %5s | %6d EUR | ", i + 1, pkwlist[i].Marke, pkwlist[i].Typ, pkwlist[i].Leistung, pkwlist[i].Farbe, pkwlist[i].Baujahr, pkwlist[i].Preis);
    190. }
    191. printf("\n");
    192. printf("\n");
    193. /* Zu entfernenden Artikel bestimmen */
    194. printf("\n Fahrzeug Nr.: ");
    195. nr = getshort(2);
    196. /* Sicherheitsabfrage */
    197. if (nr <= n)
    198. {
    199. /* Alle nachfolgenden Artikel um eine Position nach vorne holen */
    200. for (i = nr - 1; i < n; i++)
    201. {
    202. pkwlist[i] = pkwlist[i + 1];
    203. }
    204. /* Anzahl um eins reduzieren */
    205. n--;
    206. }
    207. else
    208. {
    209. printf("\n Diese Nummer gibt es nicht!");
    210. }
    211. system("cls");
    212. printf("\n");
    213. printf("\n");
    214. printf("|Nr. | Marke | Typ | Leistung| Farbe | Baujahr | Preis |");
    215. printf("\n__________________________________________________________________________________________________________");
    216. for (i = 0; i < n; i++)
    217. {
    218. printf("\n| %3d | %-20s | %-20s | %4d | %-15s | %5s | %6d EUR | ", i + 1, pkwlist[i].Marke, pkwlist[i].Typ, pkwlist[i].Leistung, pkwlist[i].Farbe, pkwlist[i].Baujahr, pkwlist[i].Preis);
    219. }
    220. printf("\n");
    221. printf("\n");
    222. printf("\n Weiter mit beliebiger Taste!");
    223. _getch();
    224. //Menue aufrufen
    225. menue();
    226. }
    227. //Sortieren nach Marke
    228. else if (ch == vcF4)
    229. {
    230. //Sortieren nach marke
    231. do
    232. {
    233. //Zahlen in richtiger Reihenfolge
    234. sortiert = 1;
    235. for (i = 0; i < n - 1; i++)
    236. {
    237. if (strcmp(pkwlist[i].Marke, pkwlist[i + 1].Marke) > 0)
    238. {
    239. h = pkwlist[i];
    240. pkwlist[i] = pkwlist[i + 1];
    241. pkwlist[i + 1] = h;
    242. sortiert = 0;
    243. }
    244. }
    245. } while (sortiert != 1);
    246. system("cls");
    247. printf("\n Alles wurde nach Marke Sortiert");
    248. printf("\n Weiter mit beliebiger Taste!");
    249. printf("\n");
    250. printf("\n");
    251. printf("|Nr. | Marke | Typ | Leistung| Farbe | Baujahr | Preis |");
    252. printf("\n__________________________________________________________________________________________________________");
    253. for (i = 0; i < n; i++)
    254. {
    255. printf("\n| %3d | %-20s | %-20s | %4d | %-15s | %5s | %6d EUR | ", i + 1, pkwlist[i].Marke, pkwlist[i].Typ, pkwlist[i].Leistung, pkwlist[i].Farbe, pkwlist[i].Baujahr, pkwlist[i].Preis);
    256. }
    257. printf("\n");
    258. printf("\n");
    259. printf("\n Alles wurde nach Marke Sortiert");
    260. printf("\n Weiter mit beliebiger Taste!");
    261. _getch();
    262. //Menue aufrufen
    263. menue();
    264. }
    265. //Sortieren nach Leistung ?
    266. else if (ch == vcF5)
    267. {
    268. /* Bubble-Sort- nach Leistung Sortiert */
    269. do
    270. {
    271. /* Zahlen in richtiger Reihenfolge */
    272. sortiert = 1;
    273. for (i = 0; i < n - 1; i++)
    274. {
    275. if (pkwlist[i].Leistung > pkwlist[i + 1].Leistung)
    276. {
    277. /* Dreieckstausch */
    278. h = pkwlist[i];
    279. pkwlist[i] = pkwlist[i + 1];
    280. pkwlist[i + 1] = h;
    281. /* Zahlen sind noch nicht in der richtigen Reihenfolge */
    282. sortiert = 0;
    283. }
    284. }
    285. } while (sortiert != 1);
    286. system("cls");
    287. printf("\n Alles wurde nach Leistung Sortiert");
    288. printf("\n");
    289. printf("\n");
    290. printf("|Nr. | Marke | Typ | Leistung| Farbe | Baujahr | Preis |");
    291. printf("\n__________________________________________________________________________________________________________");
    292. for (i = 0; i < n; i++)
    293. {
    294. printf("\n| %3d | %-20s | %-20s | %4d | %-15s | %5s | %6d EUR | ", i + 1, pkwlist[i].Marke, pkwlist[i].Typ, pkwlist[i].Leistung, pkwlist[i].Farbe, pkwlist[i].Baujahr, pkwlist[i].Preis);
    295. }
    296. printf("\n");;
    297. printf("\n");
    298. printf("\n Weiter mit beliebiger Taste!");
    299. _getch();
    300. //Menüaufruf nach Tastendruck
    301. menue();
    302. }
    303. //Fahrzeug Suchen.. ?
    304. else if (ch == vcF6)
    305. {
    306. system("cls");
    307. printf("\n Fahrzeug Suchen.");
    308. printf("\n");
    309. //Marke eingeben
    310. printf("\n Marke: ");
    311. getstring(Marke, 20);
    312. //Typ eingeben
    313. printf("\n Typ: ");
    314. gettyp(Typ, 20);
    315. //Fenster leeren
    316. system("cls");
    317. //Ausgabe der Eingegebenen Kriterien
    318. printf("Ihre eingaben: %s , %s", Marke, Typ);
    319. printf("\n");
    320. printf("\nErgebnis: ");
    321. printf("\n");
    322. printf("\n");
    323. printf("|Nr. | Marke | Typ | Leistung| Farbe | Baujahr | Preis |");
    324. printf("\n__________________________________________________________________________________________________________");
    325. for (i = 0; i < n; i++)
    326. {
    327. if (strcmp(Typ, pkwlist[i].Typ) == 0 && strcmp(Marke, pkwlist[i].Marke) == 0)
    328. {
    329. printf("\n| %3d | %-20s | %-20s | %4d | %-15s | %5s | %6d EUR | ", i + 1, pkwlist[i].Marke, pkwlist[i].Typ, pkwlist[i].Leistung, pkwlist[i].Farbe, pkwlist[i].Baujahr, pkwlist[i].Preis);
    330. }
    331. }
    332. //Auf Tastendruck warten
    333. _getch();
    334. //Menü aufrufen
    335. menue();
    336. }
    337. }
    338. else if (ch == NULL)
    339. {
    340. /*Kennzeichnung einer Funktiontaste*/
    341. param = 1;
    342. }
    343. }
    344. //Datei anlegen und Öffnen
    345. fopen_s(&file_out, "Automarkt.txt", "w");
    346. //Anzahl der Artikel Speichern
    347. fwrite(&n, sizeof(short), 1, file_out);
    348. for (i = 0; i < n; i++)
    349. {
    350. //Einen Artikel Speichern
    351. fwrite(&pkwlist[i], sizeof(pkw), 1, file_out);
    352. }
    353. //Datei Schließen
    354. fclose(file_out);
    355. }
    356. void menue()
    357. {
    358. system("cls");
    359. printf("\n Automarkt");
    360. printf("\n _________");
    361. printf("\n");
    362. printf("\n F1 - Neues Fahrzeug");
    363. printf("\n F2 - Fahrzeugliste");
    364. printf("\n F3 - Fahrzeug entfernen");
    365. printf("\n F4 - Sortieren nach Marke");
    366. printf("\n F5 - Sortieren nach Leistung");
    367. printf("\n F6 - Fahrzeug Suchen");
    368. printf("\n ESC - Programmende");
    369. printf("\n ");
    370. printf("\n Ihre Wahl: ");
    371. }
    372. /* Eingabefunktion */
    373. short getshort(short n)
    374. {
    375. /* Variablendeklaration */
    376. char ch;
    377. short zahl;
    378. short counter;
    379. /* Initialisierung */
    380. zahl = 0;
    381. counter = 0;
    382. /* Eingabeprüfung */
    383. while ((ch = _getch()) != vcCR)
    384. {
    385. /* Ziffernfreigabe */
    386. if (ch >= '0' && ch <= '9')
    387. {
    388. if (counter < n)
    389. {
    390. counter++;
    391. _putch(ch);
    392. zahl = zahl * 10 + (ch - 48);
    393. }
    394. }
    395. /* Korrektur definieren */
    396. else if (ch == vcBACK)
    397. {
    398. if (counter > 0)
    399. {
    400. counter--;
    401. _putch(vcBACK);
    402. _putch(' ');
    403. _putch(vcBACK);
    404. zahl = zahl / 10;
    405. }
    406. }
    407. }
    408. /* Rückgabewert abschicken */
    409. return zahl;
    410. }
    411. float getfloat(short v, short n)
    412. {
    413. /* Variablendeklaration */
    414. char ch;
    415. short vnum;
    416. short nnum;
    417. short vcounter;
    418. short ncounter;
    419. short komma;
    420. short i;
    421. float zahl;
    422. float divisor;
    423. /* Initialisierungen */
    424. divisor = 1;
    425. vnum = 0;
    426. nnum = 0;
    427. vcounter = 0;
    428. ncounter = 0;
    429. komma = 0;
    430. /* Eingabeprüfung */
    431. while ((ch = _getch()) != vcCR)
    432. {
    433. /* Ziffernfreigabe */
    434. if (ch >= '0' && ch <= '9')
    435. {
    436. /* Zahl vor dem Komma */
    437. if (komma == 0)
    438. {
    439. if (vcounter < v)
    440. {
    441. _putch(ch);
    442. vnum = vnum * 10 + (ch - 48);
    443. vcounter++;
    444. }
    445. }
    446. /* Zahl nach dem Komma */
    447. else
    448. {
    449. if (ncounter < n)
    450. {
    451. _putch(ch);
    452. nnum = nnum * 10 + (ch - 48);
    453. ncounter++;
    454. }
    455. }
    456. }
    457. /* Kommafreigabe */
    458. else if (ch == ',')
    459. {
    460. komma++;
    461. if (komma > 1)
    462. komma = 1;
    463. else
    464. _putch(ch);
    465. }
    466. /* Korrekturfreigabe */
    467. else if (ch == vcBACK)
    468. {
    469. /* Korrektur vor dem Komma */
    470. if (komma == 0 && vcounter > 0)
    471. {
    472. vnum = vnum / 10;
    473. vcounter--;
    474. _putch(vcBACK);
    475. _putch(' ');
    476. _putch(vcBACK);
    477. }
    478. /* Korrektur des Kommas */
    479. else if (komma == 1 && ncounter == 0)
    480. {
    481. _putch(vcBACK);
    482. _putch(' ');
    483. _putch(vcBACK);
    484. komma = 0;
    485. }
    486. /* Korrektur nach dem Komma */
    487. else if (komma == 1 && ncounter > 0)
    488. {
    489. nnum = nnum / 10;
    490. ncounter--;
    491. _putch(vcBACK);
    492. _putch(' ');
    493. _putch(vcBACK);
    494. }
    495. }
    496. }
    497. /* Divisor für die Nachkommastellen */
    498. for (i = 0; i < ncounter; i++)
    499. divisor = divisor * 10;
    500. /* Zahlenwert zusammenbauen */
    501. zahl = vnum + nnum / divisor;
    502. /* Rückgabewert */
    503. return zahl;
    504. }
    505. void getstring(char*pt, short n)
    506. {
    507. /*Variablendeklaration*/
    508. char ch;
    509. /*Zeigerdeklaration*/
    510. char*pt1;
    511. /*Startadresse merken*/
    512. pt1 = pt; /*pointer, zeiger*/
    513. /*Endlosschleife*/
    514. while ((ch = _getch()) != vcCR)
    515. {
    516. /*Großbustaben freischalten*/
    517. if (ch >= 'A'&& ch <= 'Z')
    518. {
    519. if (pt - pt1<n)
    520. {
    521. *pt = ch;
    522. _putch(*pt);
    523. pt++;
    524. }
    525. }
    526. /*Kleinbustaben freischalten*/
    527. if (ch >= 'a'&& ch <= 'z')
    528. {
    529. if (pt - pt1 < n - 1)
    530. {
    531. *pt = ch;
    532. _putch(*pt);
    533. pt++;
    534. }
    535. }
    536. /*Weitere Zeichen freischalten*/
    537. else if (ch == ' ' || ch == '-')
    538. {
    539. if (pt - pt1 < n - 1)
    540. {
    541. *pt = ch;
    542. _putch(*pt);
    543. pt++;
    544. }
    545. }
    546. /*Weitere Zeichen freischalten*/
    547. else if (ch == vcBACK)
    548. {
    549. if (pt>pt1)
    550. {
    551. _putch(vcBACK);
    552. _putch(' ');
    553. _putch(vcBACK);
    554. pt--;
    555. }
    556. }
    557. }
    558. /* Terminierungszeichen anhängen*/
    559. *pt = 0;
    560. }
    561. void gettyp(char*pt, short n)
    562. {
    563. /*Variablendeklaration*/
    564. char ch;
    565. /*Zeigerdeklaration*/
    566. char*pt1;
    567. /*Startadresse merken*/
    568. pt1 = pt; /*pointer, zeiger*/
    569. /*Endlosschleife*/
    570. while ((ch = _getch()) != vcCR)
    571. {
    572. /*Großbustaben freischalten*/
    573. if (ch >= 'A'&& ch <= 'Z')
    574. {
    575. if (pt - pt1<n)
    576. {
    577. *pt = ch;
    578. _putch(*pt);
    579. pt++;
    580. }
    581. }
    582. /*Kleinbustaben freischalten*/
    583. else if (ch >= 'a'&& ch <= 'z')
    584. {
    585. if (pt - pt1 < n - 1)
    586. {
    587. *pt = ch;
    588. _putch(*pt);
    589. pt++;
    590. }
    591. }
    592. else if (ch >= '0'&& ch <= '9')
    593. {
    594. if (pt - pt1 < n - 1)
    595. {
    596. *pt = ch;
    597. _putch(*pt);
    598. pt++;
    599. }
    600. }
    601. /*Weitere Zeichen freischalten*/
    602. else if (ch == ' ' || ch == '-')
    603. {
    604. if (pt - pt1 < n - 1)
    605. {
    606. *pt = ch;
    607. _putch(*pt);
    608. pt++;
    609. }
    610. }
    611. /*Weitere Zeichen freischalten*/
    612. else if (ch == vcBACK)
    613. {
    614. if (pt>pt1)
    615. {
    616. _putch(vcBACK);
    617. _putch(' ');
    618. _putch(vcBACK);
    619. pt--;
    620. }
    621. }
    622. }
    623. /* Terminierungszeichen anhängen*/
    624. *pt = 0;
    625. }
    626. void getbaujahr(char*pt, short n)
    627. {
    628. /*Variablendeklaration*/
    629. char ch;
    630. /*Zeigerdeklaration*/
    631. char*pt1;
    632. /*Startadresse merken*/
    633. pt1 = pt; /*pointer, zeiger*/
    634. /*Endlosschleife*/
    635. while ((ch = _getch()) != vcCR)
    636. {
    637. /*Großbustaben freischalten*/
    638. if (ch >= '0'&& ch <= '9')
    639. {
    640. if (pt - pt1<n)
    641. {
    642. *pt = ch;
    643. _putch(*pt);
    644. pt++;
    645. }
    646. }
    647. /*Weitere Zeichen freischalten*/
    648. else if (ch == vcBACK)
    649. {
    650. if (pt>pt1)
    651. {
    652. _putch(vcBACK);
    653. _putch(' ');
    654. _putch(vcBACK);
    655. pt--;
    656. }
    657. }
    658. /* Terminierungszeichen anhängen*/
    659. *pt = 0;
    660. }
    661. }
    662. long getlong(short n)
    663. {
    664. /* Variablendeklaration */
    665. char ch;
    666. long zahl;
    667. long counter;
    668. /* Initialisierung */
    669. zahl = 0;
    670. counter = 0;
    671. /* Eingabeprüfung */
    672. while ((ch = _getch()) != vcCR)
    673. {
    674. /* Ziffernfreigabe */
    675. if (ch >= '0' && ch <= '9')
    676. {
    677. if (counter < n)
    678. {
    679. counter++;
    680. _putch(ch);
    681. zahl = zahl * 10 + (ch - 48);
    682. }
    683. }
    684. /* Korrektur definieren */
    685. else if (ch == vcBACK)
    686. {
    687. if (counter > 0)
    688. {
    689. counter--;
    690. _putch(vcBACK);
    691. _putch(' ');
    692. _putch(vcBACK);
    693. zahl = zahl / 10;
    694. }
    695. }
    696. }
    697. /* Rückgabewert abschicken */
    698. return zahl;
    699. }
    700. void getfarbe(unsigned char *pt, short n)
    701. {
    702. /*Variablendeklaration*/
    703. unsigned char ch;
    704. /*Zeigerdeklaration*/
    705. unsigned char *pt1;
    706. /*Startadresse merken*/
    707. pt1 = pt; /*pointer, zeiger*/
    708. /*Endlosschleife*/
    709. while ((ch = _getch()) != vcCR)
    710. {
    711. /*Kleinbustaben freischalten*/
    712. if (ch >= 'a'&& ch <= 'z')
    713. {
    714. if (pt - pt1<n)
    715. {
    716. *pt = ch;
    717. _putch(*pt);
    718. pt++;
    719. }
    720. }
    721. /*Weitere Buchstaben freischalten*/
    722. else if (ch == 129 || ch == 132)
    723. {
    724. if (pt - pt1 < n - 1)
    725. {
    726. *pt = ch;
    727. putchar(*pt);
    728. pt++;
    729. }
    730. }
    731. /*Weitere Zeichen freischalten*/
    732. else if (ch == vcBACK)
    733. {
    734. if (pt>pt1)
    735. {
    736. _putch(vcBACK);
    737. _putch(' ');
    738. _putch(vcBACK);
    739. pt--;
    740. }
    741. }
    742. /* Terminierungszeichen anhängen*/
    743. *pt = 0;
    744. }
    745. }


    Nun Zur Frage, wie kann ich in vb in einer Consolenanwendung mit einem Ascii code oder Hex-Code Zeichen, zum Beispiel die Rechte obere Ecke, Laut liste den code10 also 0x10

    VB.NET-Quellcode

    1. Dim RechtsObenAs String = String.Format("{0}", ChrW(0x10))



    Das Funktioniert aber so niccht, hat jemand eine Idee oder einen Tipp?

    Beste Grüße
    ich weiß nicht wie du auf 0x10 kommst:

    Blackn0va schrieb:

    #define linksoben 201
    #define rechtsoben 0xbb
    #define rechtsunten 0xbc
    #define linksunten 0xc8
    #define horizontal 0xcd
    #define vertikal 0xba
    #define zeile 204

    0x10 dürfte afaik ein Steuerzeichen sein, und somit noch nicht mal angezeigt werden.

    Ansonsten würde ich halt mir entweder eine Breite aussuchen die nicht überschritten wird, oder aber du misst am Anfang des Skriptes die Breite der Konsole aus, und schreibst entsprechend viele Zeichen. In dem C-Code sieht es aus, als wäre die Breite der "Anwendung" vordefiniert.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „EaranMaleasi“ ()

    Also der lange code den ich geschrieben hab im ersten post hab ich aus dem Unterricht, 0x40 wäre dann das '@' Zeichen, das funktioniert in C auch superr, nur in VB nicht. Wie kann ich nun zum beispiel einen Horizontalen Balken mit demCode 205 in die Console zeichenn, also nicht die 205, sondern den Balken der hinter der 205 steht.


    Jetzt wollte ich meinen Geposteten Code Testen.. aber: wie kann ich bitte ansi c - code Kompilieren? Als c++ Project?


    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Blackn0va“ ()

    Nach etwas forschung bin ich hierauf gekommen:

    C#-Quellcode

    1. public char ASCII_E_Char(byte number)
    2. {
    3. char[] characters = Encoding.GetEncoding(437).GetChars(new byte[] { number });
    4. return characters[0];
    5. }

    Afaik gibt es keinen einfachen Befehl um dieses "extended ASCII" darzustellen, welches sich in Windows Codepage 437 versteckt. Ich dachte bisher eigentlich, ANSI wäre das gewesen, aber ich habe mich da geirrt. Der Einfachheit halber könnte man die Methode als Extension ausführen um dann Dinge wie z.B. 0xbb.ToASCII_E() machen zu können, aber das ist dann Geschmackssache.

    Edit:
    Alternativ könntest du mithilfe von ChrW() diese Zeichen benutzen:
    unicode-table.com/de/blocks/box-drawing/

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „EaranMaleasi“ ()

    @EaranMaleasi

    Danke für die Hilfe, wie cann ich die Function nun aufrufen? Ich hab so ziehmlich alles versucht was mir eingefallen ist.
    Ich versuche das ganze in einer Consolenanwendung.

    Bei:

    Console.WriteLine(Number)

    kommt ^
    Schweregrad Code Beschreibung Projekt Datei Zeile Unterdrückungszustand
    Fehler BC30389 "System.Number" ist "Friend" und in diesem Kontext nicht zugreifbar. RahmeninTerminal C:\Users\h.barthelmes\source\repos\RahmeninTerminal\RahmeninTerminal\Module1.vb 31 Aktiv

    EDIT:

    VB.NET-Quellcode

    1. Dim CharCode As Byte
    2. CharCode = 186
    3. Console.WriteLine(Hex(CharCode), 2)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Blackn0va“ ()

    @Blackn0va Jetzt musst Du nur noch die richtigen Zeichen raussuchen:

    VB.NET-Quellcode

    1. Module Module1
    2. Const linksoben As Integer = 201
    3. Const rechtsoben As Integer = &HBB
    4. Const rechtsunten As Integer = &HBC
    5. Const linksunten As Integer = &HC8
    6. Const horizontal As Integer = &HCD
    7. Const vertikal As Integer = &HBA
    8. Const zeile As Integer = 204
    9. Sub Main()
    10. Console.WriteLine(New String(Convert.ToChar(linksoben), 10))
    11. Console.WriteLine(New String(Convert.ToChar(rechtsoben), 10))
    12. Console.WriteLine(New String(Convert.ToChar(rechtsunten), 10))
    13. Console.WriteLine(New String(Convert.ToChar(linksunten), 10))
    14. Console.WriteLine(New String(Convert.ToChar(horizontal), 10))
    15. Console.WriteLine(New String(Convert.ToChar(vertikal), 10))
    16. Console.WriteLine(New String(Convert.ToChar(zeile), 10))
    17. Console.ReadLine()
    18. End Sub
    19. End Module
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    EaranMaleasi schrieb:

    Blackn0va schrieb:

    Danke für die Hilfe, wie cann ich die Function nun aufrufen? ... Ich versuche das ganze in einer Consolenanwendung.
    Fragst du mich gerade wie man eine static /shared Methode aufruft? 8| In einer Konsole? 8o
    vb-paradise.de/index.php/Attac…3ef8af4e1caf0e6334431938e


    Ich bin noch anfänger :) also ja, der tonfall sagt mir das das wohl nicht funktioniert :)?

    @RodFromGermany
    Was bedeutet denn die '10'?

    VB.NET-Quellcode

    1. Console.WriteLine(New String(Convert.ToChar(linksoben), 10))

    Blackn0va schrieb:

    der tonfall sagt mir das das wohl nicht funktioniert :)?
    Das exakte gegenteil, wie du an dem Bild gesehen hättest, das ich angehangen habe, dir aber wohl nicht aufgefallen ist, obwohl du es sogar zitiert hast.

    Blackn0va schrieb:

    Was bedeutet denn die '10'?
    Das selbe, wie auf meinem bild, welches du dir wohl nicht angesehen hast. Du hättest aber auch mal den Code von @RodFromGermany kopieren und testen können. Oder mal IntelliSense benutzen, oder den ObjectBrowser, MSDN, oder Microsoft Docs (MSDN in neu). Oder hast du im Moment keinen Rechner zum testen?
    Ja das hab ich föllig übersehen, sorry..

    die 10 also für 10 mal dieses Zeichen :)

    Danke !

    EDIT: Was mach ich falsch ?
    Bilder
    • asd.JPG

      124,88 kB, 1.883×704, 179 mal angesehen

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Blackn0va“ ()

    Du bist in VB.Net unterwegs, EaranMaleasi in C#. In C# schreibt man Hexadezimalzahlen 0xBB, in VB.Net &HBB, so wie bei RfGs Code.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Alles klar, jetzt habe ich es Verstanden ;)

    Danke Leute!

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Option Strict On
    2. Imports System
    3. Imports System.Text
    4. Imports Microsoft.VisualBasic
    5. Module Module1
    6. Sub Main()
    7. 'Linksoben = 201
    8. 'Linksunten = 200
    9. 'Rechtsoben = 187
    10. 'Rechtsunten =188
    11. 'Vertikal = 186
    12. 'Horizontal = 205
    13. Dim Teststring As String = "Das ist ein test für einen Rahmen in der Console"
    14. '** Deklaration **
    15. Dim LinksOben As String = ""
    16. Dim LinksUnten As String = ""
    17. Dim RechtsOben As String = ""
    18. Dim RechtsUnten As String = ""
    19. Dim Vertikal As String = ""
    20. Dim Horizontal As String = ""
    21. Dim i As Integer = 0
    22. Dim n As Integer = 0
    23. '** Initialisierung
    24. n = Teststring.Count - 1
    25. '** Wertzuweisung
    26. LinksOben = New String(ASCII_E_Char(201), 1)
    27. LinksUnten = New String(ASCII_E_Char(200), 1)
    28. RechtsOben = New String(ASCII_E_Char(187), 1)
    29. RechtsUnten = New String(ASCII_E_Char(188), 1)
    30. Vertikal = New String(ASCII_E_Char(186), 1)
    31. Horizontal = New String(ASCII_E_Char(205), 1)
    32. '** Zeilenvorschub
    33. Console.Write(LinksOben)
    34. For i = 0 To n + 2
    35. Console.Write(Horizontal)
    36. Next
    37. Console.Write(RechtsOben + vbCrLf)
    38. Console.Write(Vertikal + Teststring + " " + Vertikal + vbCrLf)
    39. Console.Write(LinksUnten)
    40. For i = 0 To n + 2
    41. Console.Write(Horizontal)
    42. Next
    43. Console.Write(RechtsUnten)
    44. '** Anwendung offen halten **
    45. Console.ReadLine()
    46. End Sub
    47. Public Function ASCII_E_Char(ByVal number As Byte) As Char
    48. Dim characters As Char() = Encoding.GetEncoding(437).GetChars(New Byte() {number})
    49. Return characters(0)
    50. End Function
    51. End Module
    Nur ganz kurz: Zeile#18 ist falsch. "Aber das ist doch ein Kommentar!". Ja, auch Kommentare können falsch sein. Und irgendwann erzählen sie eine andere Geschichte als der Code. Warum ist der Kommentar falsch? Weil die folgenden Variablen durch = "" gleich noch eine Wertzuweisung haben. Und da Strings nicht variabel sind, werden also in Zeile#19 Strings erzeugt und in #33 nochmal neue. Stellt sind die Frage, warum dann die Zeilen nicht gleich zusammengefasst werden: Dim LinksOben = New String(ASCII_E_Char(201), 1). "Fehlt da nicht der Datentyp?" Nicht mit Option Infer On, bei dem der Compiler selber aus der Zuweisung ermittelt, welchen Datentyp LinksOben hat. Achtung, funktioniert nicht bei Klassenmembern, nur bei lokalen Variablen. Die Option heißt schließlich lokaler Typrückschluss.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Das war sehr aufschlussreich, danke dafür.

    Ich mache das irgendwie immer so, also alles schön auffächern damit ich für mich die übersicht behalte. Aber der einzeiler ist natürlich auch schick :)

    EDIT:
    Ja sieht besser aus :)
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Option Strict On
    2. Option Infer On
    3. Imports System.Text
    4. Module Module1
    5. Sub Main()
    6. Dim Teststring As String = "Das ist ein test für einen Rahmen in der Console"
    7. Dim i As Integer = 0
    8. Dim n As Integer = 0
    9. '** Initialisierung
    10. n = Teststring.Count - 1
    11. '** Wertzuweisung
    12. Dim LinksOben = New String(ASCII_E_Char(201), 1)
    13. Dim LinksUnten = New String(ASCII_E_Char(200), 1)
    14. Dim RechtsOben = New String(ASCII_E_Char(187), 1)
    15. Dim RechtsUnten = New String(ASCII_E_Char(188), 1)
    16. Dim Vertikal = New String(ASCII_E_Char(186), 1)
    17. Dim Horizontal = New String(ASCII_E_Char(205), 1)
    18. '** Zeilenvorschub
    19. Console.Write(LinksOben)
    20. For i = 0 To n + 2
    21. Console.Write(Horizontal)
    22. Next
    23. Console.Write(RechtsOben + vbCrLf) '** Rechte Obere Ecke
    24. Console.Write(Vertikal + Teststring + " " + Vertikal + vbCrLf) '** Die mitte der Ausgabe
    25. Console.Write(LinksUnten) '** Links Untere Ecke
    26. For i = 0 To n + 2
    27. Console.Write(Horizontal)
    28. Next
    29. Console.Write(RechtsUnten)
    30. '** Anwendung offen halten **
    31. Console.ReadLine()
    32. End Sub
    33. Public Function ASCII_E_Char(ByVal number As Byte) As Char
    34. Dim characters As Char() = Encoding.GetEncoding(437).GetChars(New Byte() {number})
    35. Return characters(0)
    36. End Function
    37. End Module


    Eine Frage hab ich dazu noch, @EaranMaleasi, diese Zeile:

    VB.NET-Quellcode

    1. Dim characters As Char() = Encoding.GetEncoding(437).GetChars(New Byte() {number})


    die "437" Ist das ein zeiger auf die CodePage oder wie kann man das Verstehen?

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Blackn0va“ ()

    Deine Vermutung ist (fast) richtig, siehe auch MSDN-Eintrag für Encoding.GetEncoding:

    MSDN schrieb:


    Gibt die dem angegebenen Codepagebezeichner zugeordnete Codierung zurück.

    Warum nur fast richtig: Ein Zeiger auf für CodePage ist es nicht. Sondern die CodePage-Nummer. Ein Zeiger ist was anderes. Was gaaanz anderes. Solltest Du mal mit C# und Co. anfangen, wirst Du es wissen ;)
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Jou, mit .GetEncoding(437) sage ich, dass ich gerne die Zeichen aus der Windows Codepage 437 verwenden möchte. Geht mit jeder anderen Codepage die Windows kennt. Codepage 437 ist eben jene Codepage die den 8-Bit ASCII Zeichensatz enthält, den du für diese Zeichen benötigst.

    Ich habe dir aber auch weiter oben die Unicode Alternative gezeigt, denn in Unicode können alle Zeichen aller Sprachen, in einem einzigen Encoding dargestellt werden. Dort haben die Zeichen allerdings andere Werte, abgesehen von 7-Bit ASCII, daher der Link zu der Tabelle. Dort findest du alle Werte für die Zeichen die du haben möchtest.
    Eine kleine Frage habe ich noch..

    Ich habe nun eine 2. Zeile eingefügt und der Rahmen soll sich ja Dynamisch an die String länge anpassen.
    Wie kann ich den Vertikalen Strich in der 2. Zeile an den Teststring.Count - 1 hängen?

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Option Strict On
    2. Option Infer On
    3. Imports System.Text
    4. Module Module1
    5. Sub Main()
    6. Dim Teststring As String = "Das ist ein test für einen Rahmen in der Console"
    7. Dim i As Integer = 0
    8. Dim n As Integer = 0
    9. '** Consolenfenster Farbe ändern
    10. Console.ResetColor()
    11. Console.ForegroundColor = ConsoleColor.Yellow
    12. Console.BackgroundColor = ConsoleColor.DarkMagenta
    13. '** Initialisierung
    14. n = Teststring.Count - 1
    15. '** Wertzuweisung
    16. Dim LinksOben = New String(ASCII_E_Char(201), 1)
    17. Dim LinksUnten = New String(ASCII_E_Char(200), 1)
    18. Dim RechtsOben = New String(ASCII_E_Char(187), 1)
    19. Dim RechtsUnten = New String(ASCII_E_Char(188), 1)
    20. Dim Vertikal = New String(ASCII_E_Char(186), 1)
    21. Dim Horizontal = New String(ASCII_E_Char(205), 1)
    22. '** Zeilenvorschub
    23. Console.Write(LinksOben)
    24. For i = 0 To n + 2
    25. Console.Write(Horizontal)
    26. Next
    27. Console.Write(RechtsOben + vbCrLf) '** Rechte Obere Ecke
    28. Console.Write(Vertikal + Teststring + " " + Vertikal + vbCrLf + Vertikal + "Hallo" + Vertikal + vbCrLf) '** Die mitte der Ausgabe
    29. Console.Write(LinksUnten) '** Links Untere Ecke
    30. For i = 0 To n + 2
    31. Console.Write(Horizontal)
    32. Next
    33. Console.Write(RechtsUnten)
    34. '** Anwendung offen halten **
    35. Console.ReadLine()
    36. End Sub
    37. Public Function ASCII_E_Char(ByVal number As Byte) As Char
    38. Dim characters As Char() = Encoding.GetEncoding(437).GetChars(New Byte() {number})
    39. Return characters(0)
    40. End Function
    41. End Module


    Ich habe es nun lösen können, aber das ist nicht wirklich Dynamisch :D für Tips bin ich dankbar :)
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Option Strict On
    2. Option Infer On
    3. Imports System.Text
    4. Module Module1
    5. Sub Main()
    6. Dim Teststring As String = "Das ist ein test für einen Rahmen in der Console"
    7. Dim i As Integer = 0
    8. Dim n As Integer = 0
    9. '** Consolenfenster Farbe ändern
    10. Console.ResetColor()
    11. Console.ForegroundColor = ConsoleColor.Yellow
    12. Console.BackgroundColor = ConsoleColor.DarkMagenta
    13. '** Initialisierung
    14. n = Teststring.Count - 1
    15. '** Wertzuweisung
    16. Dim LinksOben = New String(ASCII_E_Char(201), 1)
    17. Dim LinksUnten = New String(ASCII_E_Char(200), 1)
    18. Dim RechtsOben = New String(ASCII_E_Char(187), 1)
    19. Dim RechtsUnten = New String(ASCII_E_Char(188), 1)
    20. Dim Vertikal = New String(ASCII_E_Char(186), 1)
    21. Dim Horizontal = New String(ASCII_E_Char(205), 1)
    22. '** Zeilenvorschub
    23. Console.Write(LinksOben)
    24. For i = 0 To n + 2
    25. Console.Write(Horizontal)
    26. Next
    27. Console.Write(RechtsOben + vbCrLf) '** Rechte Obere Ecke
    28. Console.Write(Vertikal + Teststring + " " + Vertikal + vbCrLf + Vertikal + "Hallo") '** Die mitte der Ausgabe
    29. For i = 0 To n - 3
    30. Console.Write(" ")
    31. Next
    32. Console.Write(Vertikal)
    33. Console.Write(vbCrLf + LinksUnten) '** Links Untere Ecke
    34. For i = 0 To n + 2
    35. Console.Write(Horizontal)
    36. Next
    37. Console.Write(RechtsUnten + vbCrLf)
    38. Console.WriteLine(n) '** Zähler ausgeben
    39. Console.WriteLine(i) '** Zähler ausgeben
    40. Console.ReadLine() '** Anwendung offen halten **
    41. End Sub
    42. Public Function ASCII_E_Char(ByVal number As Byte) As Char
    43. Dim characters As Char() = Encoding.GetEncoding(437).GetChars(New Byte() {number})
    44. Return characters(0)
    45. End Function
    46. End Module

    Bilder
    • asdd.JPG

      26,17 kB, 717×123, 167 mal angesehen

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Blackn0va“ ()

    @Blackn0va Ich nehme mal an, das ist die Eingabezeile.
    Wenn Du in einer vorgefertigten Tabelle Einträge machen willst, musst Du die Herangehensweise ändern:
    Male die Tabelle vollständig hin, setze den Cursor an die richtige Stelle und lies Zeichen von der Tastatur, ohne sie zu malen und male sie selbst.
    Du musst hier den Überschreib-Modus wählen, sonst wird die aktuelle Zeile rausgeschoben.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!