Compare commits

...
10 Commits
Author SHA1 Message Date
Eskimue 570b2e3cbc Neue Zugangsdaten QR Codes Audioguide 2026-07-16 18:59:24 +02:00
Eskimue 55a6bd283b kleinigleiten 2025-11-21 19:45:25 +01:00
Eskimue 1dbe211b7a Merge branch 'master' of https://git.daheim.eskimue.de/Eskimue/QR-Code-Generator 2025-11-06 17:37:10 +01:00
Eskimue 1ec2d6d8ee Audioguides QR Code ordner öffnen hinzu 2025-11-06 17:37:08 +01:00
Eskimue 5d08dd8770 GUI 2025-09-03 11:09:12 +02:00
Eskimue e02b7c6edc dies und das 2025-08-16 09:55:14 +02:00
Eskimue dd7f5ae34f Audioguide QR-Codes können automatisch erzeugt werden 2025-08-03 14:00:55 +02:00
Eskimue 90f5229829 kleinigkeiten 2025-03-09 12:51:24 +01:00
Eskimue 8dd6e545fc GUI 2025-03-07 12:28:28 +01:00
Eskimue f425842131 Adresse verbessert 2025-02-20 20:00:12 +01:00
7 changed files with 559 additions and 40 deletions
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 MiB

+97 -39
View File
@@ -94,6 +94,10 @@
button_ChangeColorLight = new Button(); button_ChangeColorLight = new Button();
button_ChangeColorDark = new Button(); button_ChangeColorDark = new Button();
tb_IconSize = new TrackBar(); tb_IconSize = new TrackBar();
cb_drawQuietZones = new CheckBox();
lb_IconSIze = new Label();
tabPage5 = new TabPage();
bt_QR4AudioGuide = new Button();
tabControl1.SuspendLayout(); tabControl1.SuspendLayout();
tabPage1.SuspendLayout(); tabPage1.SuspendLayout();
tabPage2.SuspendLayout(); tabPage2.SuspendLayout();
@@ -102,6 +106,7 @@
((System.ComponentModel.ISupportInitialize)pb_QRC).BeginInit(); ((System.ComponentModel.ISupportInitialize)pb_QRC).BeginInit();
((System.ComponentModel.ISupportInitialize)pb_icon).BeginInit(); ((System.ComponentModel.ISupportInitialize)pb_icon).BeginInit();
((System.ComponentModel.ISupportInitialize)tb_IconSize).BeginInit(); ((System.ComponentModel.ISupportInitialize)tb_IconSize).BeginInit();
tabPage5.SuspendLayout();
SuspendLayout(); SuspendLayout();
// //
// tabControl1 // tabControl1
@@ -110,10 +115,11 @@
tabControl1.Controls.Add(tabPage2); tabControl1.Controls.Add(tabPage2);
tabControl1.Controls.Add(tabPage3); tabControl1.Controls.Add(tabPage3);
tabControl1.Controls.Add(tabPage4); tabControl1.Controls.Add(tabPage4);
tabControl1.Controls.Add(tabPage5);
tabControl1.Location = new Point(12, 12); tabControl1.Location = new Point(12, 12);
tabControl1.Name = "tabControl1"; tabControl1.Name = "tabControl1";
tabControl1.SelectedIndex = 0; tabControl1.SelectedIndex = 0;
tabControl1.Size = new Size(420, 609); tabControl1.Size = new Size(420, 660);
tabControl1.TabIndex = 0; tabControl1.TabIndex = 0;
// //
// tabPage1 // tabPage1
@@ -124,14 +130,14 @@
tabPage1.Location = new Point(4, 24); tabPage1.Location = new Point(4, 24);
tabPage1.Name = "tabPage1"; tabPage1.Name = "tabPage1";
tabPage1.Padding = new Padding(3); tabPage1.Padding = new Padding(3);
tabPage1.Size = new Size(412, 581); tabPage1.Size = new Size(412, 632);
tabPage1.TabIndex = 0; tabPage1.TabIndex = 0;
tabPage1.Text = "Link"; tabPage1.Text = "Link";
tabPage1.UseVisualStyleBackColor = true; tabPage1.UseVisualStyleBackColor = true;
// //
// bt_gen_QR_URL // bt_gen_QR_URL
// //
bt_gen_QR_URL.Location = new Point(6, 552); bt_gen_QR_URL.Location = new Point(6, 66);
bt_gen_QR_URL.Name = "bt_gen_QR_URL"; bt_gen_QR_URL.Name = "bt_gen_QR_URL";
bt_gen_QR_URL.Size = new Size(400, 23); bt_gen_QR_URL.Size = new Size(400, 23);
bt_gen_QR_URL.TabIndex = 2; bt_gen_QR_URL.TabIndex = 2;
@@ -187,7 +193,7 @@
tabPage2.Location = new Point(4, 24); tabPage2.Location = new Point(4, 24);
tabPage2.Name = "tabPage2"; tabPage2.Name = "tabPage2";
tabPage2.Padding = new Padding(3); tabPage2.Padding = new Padding(3);
tabPage2.Size = new Size(412, 581); tabPage2.Size = new Size(412, 632);
tabPage2.TabIndex = 1; tabPage2.TabIndex = 1;
tabPage2.Text = "Adresse"; tabPage2.Text = "Adresse";
tabPage2.UseVisualStyleBackColor = true; tabPage2.UseVisualStyleBackColor = true;
@@ -204,81 +210,81 @@
label12.AutoSize = true; label12.AutoSize = true;
label12.Location = new Point(6, 366); label12.Location = new Point(6, 366);
label12.Name = "label12"; label12.Name = "label12";
label12.Size = new Size(44, 15); label12.Size = new Size(33, 15);
label12.TabIndex = 24; label12.TabIndex = 24;
label12.Text = "label12"; label12.Text = "Land";
// //
// label13 // label13
// //
label13.AutoSize = true; label13.AutoSize = true;
label13.Location = new Point(6, 337); label13.Location = new Point(6, 337);
label13.Name = "label13"; label13.Name = "label13";
label13.Size = new Size(44, 15); label13.Size = new Size(27, 15);
label13.TabIndex = 23; label13.TabIndex = 23;
label13.Text = "label13"; label13.Text = "PLZ";
// //
// label14 // label14
// //
label14.AutoSize = true; label14.AutoSize = true;
label14.Location = new Point(6, 308); label14.Location = new Point(6, 308);
label14.Name = "label14"; label14.Name = "label14";
label14.Size = new Size(44, 15); label14.Size = new Size(24, 15);
label14.TabIndex = 22; label14.TabIndex = 22;
label14.Text = "label14"; label14.Text = "Ort";
// //
// label15 // label15
// //
label15.AutoSize = true; label15.AutoSize = true;
label15.Location = new Point(6, 279); label15.Location = new Point(6, 279);
label15.Name = "label15"; label15.Name = "label15";
label15.Size = new Size(44, 15); label15.Size = new Size(127, 15);
label15.TabIndex = 21; label15.TabIndex = 21;
label15.Text = "label15"; label15.Text = "Strasse - Hausnummer";
// //
// label8 // label8
// //
label8.AutoSize = true; label8.AutoSize = true;
label8.Location = new Point(6, 250); label8.Location = new Point(6, 250);
label8.Name = "label8"; label8.Name = "label8";
label8.Size = new Size(38, 15); label8.Size = new Size(55, 15);
label8.TabIndex = 20; label8.TabIndex = 20;
label8.Text = "label8"; label8.Text = "Webseite";
// //
// label9 // label9
// //
label9.AutoSize = true; label9.AutoSize = true;
label9.Location = new Point(6, 221); label9.Location = new Point(6, 221);
label9.Name = "label9"; label9.Name = "label9";
label9.Size = new Size(38, 15); label9.Size = new Size(36, 15);
label9.TabIndex = 19; label9.TabIndex = 19;
label9.Text = "label9"; label9.Text = "eMail";
// //
// label10 // label10
// //
label10.AutoSize = true; label10.AutoSize = true;
label10.Location = new Point(6, 192); label10.Location = new Point(6, 192);
label10.Name = "label10"; label10.Name = "label10";
label10.Size = new Size(44, 15); label10.Size = new Size(72, 15);
label10.TabIndex = 18; label10.TabIndex = 18;
label10.Text = "label10"; label10.Text = "Geschäftlich";
// //
// label11 // label11
// //
label11.AutoSize = true; label11.AutoSize = true;
label11.Location = new Point(6, 163); label11.Location = new Point(6, 163);
label11.Name = "label11"; label11.Name = "label11";
label11.Size = new Size(44, 15); label11.Size = new Size(42, 15);
label11.TabIndex = 17; label11.TabIndex = 17;
label11.Text = "label11"; label11.Text = "Handy";
// //
// label6 // label6
// //
label6.AutoSize = true; label6.AutoSize = true;
label6.Location = new Point(6, 134); label6.Location = new Point(6, 134);
label6.Name = "label6"; label6.Name = "label6";
label6.Size = new Size(38, 15); label6.Size = new Size(92, 15);
label6.TabIndex = 16; label6.TabIndex = 16;
label6.Text = "label6"; label6.Text = "Telefonnummer";
// //
// label7 // label7
// //
@@ -393,9 +399,9 @@
// //
// bt_createQRAdress // bt_createQRAdress
// //
bt_createQRAdress.Location = new Point(6, 552); bt_createQRAdress.Location = new Point(6, 395);
bt_createQRAdress.Name = "bt_createQRAdress"; bt_createQRAdress.Name = "bt_createQRAdress";
bt_createQRAdress.Size = new Size(400, 23); bt_createQRAdress.Size = new Size(400, 68);
bt_createQRAdress.TabIndex = 0; bt_createQRAdress.TabIndex = 0;
bt_createQRAdress.Text = "generiere QR"; bt_createQRAdress.Text = "generiere QR";
bt_createQRAdress.UseVisualStyleBackColor = true; bt_createQRAdress.UseVisualStyleBackColor = true;
@@ -414,7 +420,7 @@
tabPage3.Controls.Add(bt_createQR_WIFI); tabPage3.Controls.Add(bt_createQR_WIFI);
tabPage3.Location = new Point(4, 24); tabPage3.Location = new Point(4, 24);
tabPage3.Name = "tabPage3"; tabPage3.Name = "tabPage3";
tabPage3.Size = new Size(412, 581); tabPage3.Size = new Size(412, 632);
tabPage3.TabIndex = 2; tabPage3.TabIndex = 2;
tabPage3.Text = "WLAN"; tabPage3.Text = "WLAN";
tabPage3.UseVisualStyleBackColor = true; tabPage3.UseVisualStyleBackColor = true;
@@ -496,7 +502,7 @@
// //
// bt_createQR_WIFI // bt_createQR_WIFI
// //
bt_createQR_WIFI.Location = new Point(6, 552); bt_createQR_WIFI.Location = new Point(6, 207);
bt_createQR_WIFI.Name = "bt_createQR_WIFI"; bt_createQR_WIFI.Name = "bt_createQR_WIFI";
bt_createQR_WIFI.Size = new Size(400, 23); bt_createQR_WIFI.Size = new Size(400, 23);
bt_createQR_WIFI.TabIndex = 1; bt_createQR_WIFI.TabIndex = 1;
@@ -521,7 +527,7 @@
tabPage4.Location = new Point(4, 24); tabPage4.Location = new Point(4, 24);
tabPage4.Name = "tabPage4"; tabPage4.Name = "tabPage4";
tabPage4.Padding = new Padding(3); tabPage4.Padding = new Padding(3);
tabPage4.Size = new Size(412, 581); tabPage4.Size = new Size(412, 632);
tabPage4.TabIndex = 3; tabPage4.TabIndex = 3;
tabPage4.Text = "Termin"; tabPage4.Text = "Termin";
tabPage4.UseVisualStyleBackColor = true; tabPage4.UseVisualStyleBackColor = true;
@@ -535,6 +541,7 @@
ICAL_fullday.TabIndex = 30; ICAL_fullday.TabIndex = 30;
ICAL_fullday.Text = "ganztägig"; ICAL_fullday.Text = "ganztägig";
ICAL_fullday.UseVisualStyleBackColor = true; ICAL_fullday.UseVisualStyleBackColor = true;
ICAL_fullday.CheckedChanged += ICAL_fullday_CheckedChanged;
// //
// ICAL_location // ICAL_location
// //
@@ -618,13 +625,13 @@
lb_ical_summary.AutoSize = true; lb_ical_summary.AutoSize = true;
lb_ical_summary.Location = new Point(6, 19); lb_ical_summary.Location = new Point(6, 19);
lb_ical_summary.Name = "lb_ical_summary"; lb_ical_summary.Name = "lb_ical_summary";
lb_ical_summary.Size = new Size(71, 15); lb_ical_summary.Size = new Size(73, 15);
lb_ical_summary.TabIndex = 19; lb_ical_summary.TabIndex = 19;
lb_ical_summary.Text = "Termin Titel:"; lb_ical_summary.Text = "Termin Titel:";
// //
// bt_createQR_ICAL // bt_createQR_ICAL
// //
bt_createQR_ICAL.Location = new Point(6, 555); bt_createQR_ICAL.Location = new Point(6, 432);
bt_createQR_ICAL.Name = "bt_createQR_ICAL"; bt_createQR_ICAL.Name = "bt_createQR_ICAL";
bt_createQR_ICAL.Size = new Size(400, 23); bt_createQR_ICAL.Size = new Size(400, 23);
bt_createQR_ICAL.TabIndex = 2; bt_createQR_ICAL.TabIndex = 2;
@@ -643,7 +650,7 @@
// //
// button1 // button1
// //
button1.Location = new Point(787, 185); button1.Location = new Point(707, 128);
button1.Name = "button1"; button1.Name = "button1";
button1.Size = new Size(96, 23); button1.Size = new Size(96, 23);
button1.TabIndex = 2; button1.TabIndex = 2;
@@ -654,7 +661,7 @@
// pb_icon // pb_icon
// //
pb_icon.BorderStyle = BorderStyle.FixedSingle; pb_icon.BorderStyle = BorderStyle.FixedSingle;
pb_icon.Location = new Point(733, 12); pb_icon.Location = new Point(517, 12);
pb_icon.Name = "pb_icon"; pb_icon.Name = "pb_icon";
pb_icon.Size = new Size(184, 168); pb_icon.Size = new Size(184, 168);
pb_icon.SizeMode = PictureBoxSizeMode.Zoom; pb_icon.SizeMode = PictureBoxSizeMode.Zoom;
@@ -663,7 +670,7 @@
// //
// bt_clear_Icon // bt_clear_Icon
// //
bt_clear_Icon.Location = new Point(786, 214); bt_clear_Icon.Location = new Point(707, 157);
bt_clear_Icon.Name = "bt_clear_Icon"; bt_clear_Icon.Name = "bt_clear_Icon";
bt_clear_Icon.Size = new Size(97, 23); bt_clear_Icon.Size = new Size(97, 23);
bt_clear_Icon.TabIndex = 4; bt_clear_Icon.TabIndex = 4;
@@ -683,21 +690,21 @@
// //
// panel_ColorLight // panel_ColorLight
// //
panel_ColorLight.Location = new Point(480, 47); panel_ColorLight.Location = new Point(923, 268);
panel_ColorLight.Name = "panel_ColorLight"; panel_ColorLight.Name = "panel_ColorLight";
panel_ColorLight.Size = new Size(23, 23); panel_ColorLight.Size = new Size(23, 23);
panel_ColorLight.TabIndex = 6; panel_ColorLight.TabIndex = 6;
// //
// panel_ColorDark // panel_ColorDark
// //
panel_ColorDark.Location = new Point(480, 73); panel_ColorDark.Location = new Point(923, 294);
panel_ColorDark.Name = "panel_ColorDark"; panel_ColorDark.Name = "panel_ColorDark";
panel_ColorDark.Size = new Size(23, 23); panel_ColorDark.Size = new Size(23, 23);
panel_ColorDark.TabIndex = 7; panel_ColorDark.TabIndex = 7;
// //
// button_ChangeColorLight // button_ChangeColorLight
// //
button_ChangeColorLight.Location = new Point(509, 47); button_ChangeColorLight.Location = new Point(952, 268);
button_ChangeColorLight.Name = "button_ChangeColorLight"; button_ChangeColorLight.Name = "button_ChangeColorLight";
button_ChangeColorLight.Size = new Size(94, 23); button_ChangeColorLight.Size = new Size(94, 23);
button_ChangeColorLight.TabIndex = 8; button_ChangeColorLight.TabIndex = 8;
@@ -707,7 +714,7 @@
// //
// button_ChangeColorDark // button_ChangeColorDark
// //
button_ChangeColorDark.Location = new Point(509, 73); button_ChangeColorDark.Location = new Point(952, 294);
button_ChangeColorDark.Name = "button_ChangeColorDark"; button_ChangeColorDark.Name = "button_ChangeColorDark";
button_ChangeColorDark.Size = new Size(94, 23); button_ChangeColorDark.Size = new Size(94, 23);
button_ChangeColorDark.TabIndex = 9; button_ChangeColorDark.TabIndex = 9;
@@ -718,19 +725,64 @@
// tb_IconSize // tb_IconSize
// //
tb_IconSize.Location = new Point(517, 186); tb_IconSize.Location = new Point(517, 186);
tb_IconSize.Maximum = 33; tb_IconSize.Maximum = 35;
tb_IconSize.Minimum = 10; tb_IconSize.Minimum = 10;
tb_IconSize.Name = "tb_IconSize"; tb_IconSize.Name = "tb_IconSize";
tb_IconSize.Size = new Size(263, 45); tb_IconSize.Size = new Size(184, 45);
tb_IconSize.TabIndex = 10; tb_IconSize.TabIndex = 10;
tb_IconSize.Value = 15; tb_IconSize.Value = 15;
tb_IconSize.Scroll += tb_IconSize_Scroll; tb_IconSize.Scroll += tb_IconSize_Scroll;
// //
// cb_drawQuietZones
//
cb_drawQuietZones.AutoSize = true;
cb_drawQuietZones.Checked = true;
cb_drawQuietZones.CheckState = CheckState.Checked;
cb_drawQuietZones.Location = new Point(923, 243);
cb_drawQuietZones.Name = "cb_drawQuietZones";
cb_drawQuietZones.Size = new Size(129, 19);
cb_drawQuietZones.TabIndex = 11;
cb_drawQuietZones.Text = "Rand um QR Code?";
cb_drawQuietZones.UseVisualStyleBackColor = true;
cb_drawQuietZones.CheckedChanged += cb_drawQuietZones_CheckedChanged;
//
// lb_IconSIze
//
lb_IconSIze.AutoSize = true;
lb_IconSIze.Location = new Point(707, 197);
lb_IconSIze.Name = "lb_IconSIze";
lb_IconSIze.Size = new Size(44, 15);
lb_IconSIze.TabIndex = 12;
lb_IconSIze.Text = "label17";
//
// tabPage5
//
tabPage5.Controls.Add(bt_QR4AudioGuide);
tabPage5.Location = new Point(4, 24);
tabPage5.Name = "tabPage5";
tabPage5.Padding = new Padding(3);
tabPage5.Size = new Size(412, 632);
tabPage5.TabIndex = 4;
tabPage5.Text = "QR-Codes für den Audioguide";
tabPage5.UseVisualStyleBackColor = true;
//
// bt_QR4AudioGuide
//
bt_QR4AudioGuide.Location = new Point(77, 36);
bt_QR4AudioGuide.Name = "bt_QR4AudioGuide";
bt_QR4AudioGuide.Size = new Size(261, 134);
bt_QR4AudioGuide.TabIndex = 0;
bt_QR4AudioGuide.Text = "Öffnen";
bt_QR4AudioGuide.UseVisualStyleBackColor = true;
bt_QR4AudioGuide.Click += bt_QR4AudioGuide_Click;
//
// Main // Main
// //
AutoScaleDimensions = new SizeF(7F, 15F); AutoScaleDimensions = new SizeF(7F, 15F);
AutoScaleMode = AutoScaleMode.Font; AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(929, 733); ClientSize = new Size(1094, 733);
Controls.Add(lb_IconSIze);
Controls.Add(cb_drawQuietZones);
Controls.Add(tb_IconSize); Controls.Add(tb_IconSize);
Controls.Add(button_ChangeColorDark); Controls.Add(button_ChangeColorDark);
Controls.Add(button_ChangeColorLight); Controls.Add(button_ChangeColorLight);
@@ -746,6 +798,7 @@
Text = "QR-Code Generator"; Text = "QR-Code Generator";
FormClosing += Main_FormClosing; FormClosing += Main_FormClosing;
Load += Main_Load; Load += Main_Load;
Shown += Main_Shown;
tabControl1.ResumeLayout(false); tabControl1.ResumeLayout(false);
tabPage1.ResumeLayout(false); tabPage1.ResumeLayout(false);
tabPage1.PerformLayout(); tabPage1.PerformLayout();
@@ -758,6 +811,7 @@
((System.ComponentModel.ISupportInitialize)pb_QRC).EndInit(); ((System.ComponentModel.ISupportInitialize)pb_QRC).EndInit();
((System.ComponentModel.ISupportInitialize)pb_icon).EndInit(); ((System.ComponentModel.ISupportInitialize)pb_icon).EndInit();
((System.ComponentModel.ISupportInitialize)tb_IconSize).EndInit(); ((System.ComponentModel.ISupportInitialize)tb_IconSize).EndInit();
tabPage5.ResumeLayout(false);
ResumeLayout(false); ResumeLayout(false);
PerformLayout(); PerformLayout();
} }
@@ -830,5 +884,9 @@
private TextBox ICAL_description; private TextBox ICAL_description;
private CheckBox ICAL_fullday; private CheckBox ICAL_fullday;
private TrackBar tb_IconSize; private TrackBar tb_IconSize;
private CheckBox cb_drawQuietZones;
private Label lb_IconSIze;
private TabPage tabPage5;
private Button bt_QR4AudioGuide;
} }
} }
+24 -1
View File
@@ -167,7 +167,7 @@ namespace QR_Code_Generator
using QRCodeGenerator qrGenerator = new QRCodeGenerator(); using QRCodeGenerator qrGenerator = new QRCodeGenerator();
QRCodeData qrCodeData = qrGenerator.CreateQrCode(payload, eCC, forceUtf8); QRCodeData qrCodeData = qrGenerator.CreateQrCode(payload, eCC, forceUtf8);
using QRCode qrCode = new QRCode(qrCodeData); using QRCode qrCode = new QRCode(qrCodeData);
drawQuietZones = cb_drawQuietZones.CheckState == CheckState.Checked;
// Prüfen, ob ein Icon vorhanden ist // Prüfen, ob ein Icon vorhanden ist
Bitmap? icon = pb_icon.Image != null ? new Bitmap(pb_icon.Image) : null; Bitmap? icon = pb_icon.Image != null ? new Bitmap(pb_icon.Image) : null;
@@ -304,6 +304,29 @@ namespace QR_Code_Generator
private void tb_IconSize_Scroll(object sender, EventArgs e) private void tb_IconSize_Scroll(object sender, EventArgs e)
{ {
iconSizePercent = tb_IconSize.Value; iconSizePercent = tb_IconSize.Value;
lb_IconSIze.Text = $"{iconSizePercent}%";
}
private void cb_drawQuietZones_CheckedChanged(object sender, EventArgs e)
{
}
private void ICAL_fullday_CheckedChanged(object sender, EventArgs e)
{
}
private void Main_Shown(object sender, EventArgs e)
{
tb_IconSize.Value = iconSizePercent;
lb_IconSIze.Text = $"{iconSizePercent}%";
}
private void bt_QR4AudioGuide_Click(object sender, EventArgs e)
{
QR4AudioGuide qR4AudioGuide = new QR4AudioGuide();
qR4AudioGuide.Show();
} }
} }
} }
@@ -10,8 +10,15 @@
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="FluentFTP" Version="53.0.1" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" /> <PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
<PackageReference Include="QRCoder" Version="1.6.0" /> <PackageReference Include="QRCoder" Version="1.6.0" />
</ItemGroup> </ItemGroup>
<ItemGroup>
<None Update="Icon_Audioguid.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
</ItemGroup>
</Project> </Project>
+120
View File
@@ -0,0 +1,120 @@
namespace QR_Code_Generator
{
partial class QR4AudioGuide
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
bt_connect = new Button();
dataGridView1 = new DataGridView();
bt_Save = new Button();
cb_OPenPathAferSave = new CheckBox();
cb_Border = new CheckBox();
((System.ComponentModel.ISupportInitialize)dataGridView1).BeginInit();
SuspendLayout();
//
// bt_connect
//
bt_connect.Location = new Point(12, 12);
bt_connect.Name = "bt_connect";
bt_connect.Size = new Size(163, 23);
bt_connect.TabIndex = 0;
bt_connect.Text = "Verbinden und listen";
bt_connect.UseVisualStyleBackColor = true;
bt_connect.Click += bt_connect_Click;
//
// dataGridView1
//
dataGridView1.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right;
dataGridView1.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize;
dataGridView1.Location = new Point(12, 92);
dataGridView1.Name = "dataGridView1";
dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
dataGridView1.Size = new Size(776, 422);
dataGridView1.TabIndex = 3;
dataGridView1.CellContentClick += dataGridView1_CellContentClick;
//
// bt_Save
//
bt_Save.Location = new Point(424, 12);
bt_Save.Name = "bt_Save";
bt_Save.Size = new Size(234, 23);
bt_Save.TabIndex = 4;
bt_Save.Text = "QR-Codes erzeugen und speichern";
bt_Save.UseVisualStyleBackColor = true;
bt_Save.Click += bt_Save_Click;
//
// cb_OPenPathAferSave
//
cb_OPenPathAferSave.AutoSize = true;
cb_OPenPathAferSave.Checked = true;
cb_OPenPathAferSave.CheckState = CheckState.Checked;
cb_OPenPathAferSave.Location = new Point(181, 12);
cb_OPenPathAferSave.Name = "cb_OPenPathAferSave";
cb_OPenPathAferSave.Size = new Size(214, 19);
cb_OPenPathAferSave.TabIndex = 5;
cb_OPenPathAferSave.Text = "Speicherort nach Abschluss öffnen?";
cb_OPenPathAferSave.UseVisualStyleBackColor = true;
//
// cb_Border
//
cb_Border.AutoSize = true;
cb_Border.Checked = true;
cb_Border.CheckState = CheckState.Checked;
cb_Border.Location = new Point(181, 37);
cb_Border.Name = "cb_Border";
cb_Border.Size = new Size(131, 19);
cb_Border.TabIndex = 6;
cb_Border.Text = "QR-Code mit Rand?";
cb_Border.UseVisualStyleBackColor = true;
cb_Border.CheckedChanged += cb_Border_CheckedChanged;
//
// QR4AudioGuide
//
AutoScaleDimensions = new SizeF(7F, 15F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(800, 520);
Controls.Add(cb_Border);
Controls.Add(cb_OPenPathAferSave);
Controls.Add(bt_Save);
Controls.Add(dataGridView1);
Controls.Add(bt_connect);
Name = "QR4AudioGuide";
Text = "QR4AudioGuide";
((System.ComponentModel.ISupportInitialize)dataGridView1).EndInit();
ResumeLayout(false);
PerformLayout();
}
#endregion
private Button bt_connect;
private DataGridView dataGridView1;
private Button bt_Save;
private CheckBox cb_OPenPathAferSave;
private CheckBox cb_Border;
}
}
+191
View File
@@ -0,0 +1,191 @@
using FluentFTP;
using QRCoder;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using static QRCoder.QRCodeGenerator;
namespace QR_Code_Generator
{
public partial class QR4AudioGuide : Form
{
private bool drawQuietZones = true;
private bool forceUtf8 = true;
private int pixlesPerModul = 20;
private int iconSizePercent = 29;
private int iconBorderWidth = 5;
private QRCodeGenerator.ECCLevel eCCLevel = QRCodeGenerator.ECCLevel.Q;
List<Bitmap> qrCodeImages = new List<Bitmap>();
AsyncFtpClient client = new AsyncFtpClient("astronomiemuseum.de", "w01d9fc3", "7sFv4vQJEQ3RTm3a");
public QR4AudioGuide()
{
InitializeComponent();
}
private void bt_connect_Click(object sender, EventArgs e)
{
bt_connect.Enabled = false;
Cursor.Current = Cursors.WaitCursor;
Application.DoEvents();
list();
}
private async void list()
{
Application.DoEvents();
var dirs = await ListAllDirectoriesAsync("astronomiemuseum.de", "f01869f5", "CBCQ4F7xcke,D7cjBVxr", "/audioguide.astromuseum.de");
dataGridView1.Columns.Clear();
dataGridView1.Columns.Add("Verzeichnis", "Verzeichnis");
var linkColumn = new DataGridViewLinkColumn();
linkColumn.HeaderText = "Player-URL";
linkColumn.Name = "URL";
linkColumn.LinkBehavior = LinkBehavior.HoverUnderline;
linkColumn.UseColumnTextForLinkValue = false;
dataGridView1.Columns.Add(linkColumn);
string baseUrl = "https://audioguide.astromuseum.de/player/index.php?dir=";
foreach (var fullPath in dirs)
{
// 🛑 Skip alles unter /bootstrap
if (fullPath.Contains("/bootstrap") || fullPath.Contains("/player")) continue;
string dir = fullPath.Split('/').Last();
string url = baseUrl + Uri.EscapeDataString(dir);
dataGridView1.Rows.Add(dir, url);
Application.DoEvents();
}
dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;
Cursor.Current = Cursors.Default;
bt_connect.Enabled = true;
}
public async Task<List<string>> ListAllDirectoriesAsync(string host, string user, string pass, string rootPath = "/")
{
var dirs = new List<string>();
var token = new CancellationToken();
using var client = new AsyncFtpClient(host, user, pass);
await client.Connect(token);
await ScanDirsRecursive(client, rootPath, dirs, token);
await client.Disconnect(token);
return dirs;
}
private async Task ScanDirsRecursive(AsyncFtpClient client, string path, List<string> result, CancellationToken token)
{
var items = await client.GetListing(path, FtpListOption.ForceList, token);
foreach (var item in items)
{
if (item.Type == FtpObjectType.Directory)
{
result.Add(item.FullName);
await ScanDirsRecursive(client, item.FullName, result, token);
}
}
}
private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
if (e.RowIndex >= 0 && dataGridView1.Columns[e.ColumnIndex] is DataGridViewLinkColumn)
{
string url = dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value?.ToString();
if (!string.IsNullOrWhiteSpace(url))
{
System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo
{
FileName = url,
UseShellExecute = true
});
}
}
}
public void GenerateQRCodesFromSelectedRows(DataGridView dgv)
{
qrCodeImages.Clear();
foreach (DataGridViewRow row in dgv.SelectedRows)
{
if (row.Cells["URL"].Value is string url && !string.IsNullOrWhiteSpace(url))
{
string urlPayload = new PayloadGenerator.Url(url).ToString();
Bitmap qrCode = GenerateQRCode(urlPayload, Color.Black, Color.White, eCCLevel);
}
}
}
public void SaveSelectedQRCodes(DataGridView dgv, ECCLevel eCCLevel)
{
using (var folderDialog = new FolderBrowserDialog())
{
if (folderDialog.ShowDialog() != DialogResult.OK)
return;
string selectedPath = folderDialog.SelectedPath;
foreach (DataGridViewRow row in dgv.SelectedRows)
{
if (row.Cells["URL"].Value is string url && !string.IsNullOrWhiteSpace(url))
{
string dateiname = row.Cells[0].Value?.ToString() ?? "QR";
string safeName = string.Join("_", dateiname.Split(Path.GetInvalidFileNameChars())); // Dateinamen absichern
string urlPayload = new PayloadGenerator.Url(url).ToString();
Bitmap qrCode = GenerateQRCode(urlPayload, Color.Black, Color.White, eCCLevel);
string filePath = Path.Combine(selectedPath, safeName + ".png");
qrCode.Save(filePath, System.Drawing.Imaging.ImageFormat.Png);
}
}
if (cb_OPenPathAferSave.Checked)
{
System.Diagnostics.Process.Start("explorer.exe", selectedPath);
}
MessageBox.Show("QR-Codes gespeichert!", "Fertig", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
private Bitmap GenerateQRCode(string payload, Color dark, Color light, QRCodeGenerator.ECCLevel eCC)
{
using QRCodeGenerator qrGenerator = new QRCodeGenerator();
QRCodeData qrCodeData = qrGenerator.CreateQrCode(payload, eCC, forceUtf8);
using QRCode qrCode = new QRCode(qrCodeData);
// Prüfen, ob ein Icon vorhanden ist
Bitmap? icon = Image.FromFile("Icon_Audioguid.png") as Bitmap;
return qrCode.GetGraphic(
pixlesPerModul,
dark,
light, icon, iconSizePercent, iconBorderWidth, drawQuietZones, null);
}
private void bt_Save_Click(object sender, EventArgs e)
{
SaveSelectedQRCodes(dataGridView1, eCCLevel);
}
private void cb_Border_CheckedChanged(object sender, EventArgs e)
{
drawQuietZones = cb_Border.Checked;
}
}
}
+120
View File
@@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>