ERLEDIGT
JA
JA
ANTWORTEN
23
23
ZUGRIFFE
4148
4148
EMPFEHLEN
-
24.02.07 11:37 #1
- Registriert seit
- Aug 2005
- Beiträge
- 256
Hallo,
Bin jetzt von VB 6.0 auf .Net umgestiegen. Ich arbeite im Moment noch mit der Express version bis ich die Standard habe. Aber hier meine Frage:
Ist es möglich, in einem ins Programm geladene Bild mittels dem Mauszeiger Abstände darin zu messen? Theoretisch ist das ja ganz einfach, man muss nur die Koordinaten von den zwei Mausklicks mit Phytagoras umrechnen und fertig. Aber wie mache ich das in .NET?
Hinterher soll dann mittels Umrechnungsfaktor aus den Pixelabständen Längeneinheiten gemacht werden.
Kann mir da jemand weiterhelfen?
-
Worin genau liegt dein Problem?
a) Herausfinden der Koordinaten?
b) Berechnung / Umrechnung?
-
25.02.07 13:47 #3
- Registriert seit
- Aug 2005
- Beiträge
- 256
Hallo,
Bin inzwischen schon etwas weitergekommen. Ich dachte, hier würde gar keiner antworten, also schon mal danke.
Also folgendes will ich machen:
Es soll ein Bild von einer Kamera uÄ. importiert werden. Erst einmal nehme ich nur die Datei, hinterher werde ich die Kamera fernsteuern, aber das hat noch Zeit.
Ich habe jetzt erst einmal zwei Labels erzeugt, die bei MoveMouse die Koordinaten X / Y im Bild anzeigen. Das ist eine PictureBox. Das klappt auch schon. Die entfernungen berechne ich mit Phytagoras, nachdem ich per Mausklick 2 Koordinatenpunkte selektiert habe.
Das ist auch alles schon programmiert, also kein Problem. Aber nun das wichtigste:
Damit das Ganze benutzerfreundlich wird, soll nach Klick (Selektion) des ersten Punktes von diesem Punkt eine Linie mit der Maus verbunden werden, die immer an der Zeigerspitze hängt, bis der Benutzer einen zweiten Punkt ausgewählt hat.
Das ist mein Problem, theoretisch kein Problem, aber da ich in .NET neu bin..
DANKE
-
Sollte nicht so schwer sein. Zeichne bei jedem MouseMove Ereignis einen Pfeil vom Ausgangs- bis zum Endpunkt.
Schau Dir mal dieses nette Projekt an: C#: A-Star is born - Understand graphs and A* path-finding algorithm with C# - TheCodeProject.
MfG,
Christian
Wer sein Problem definiert, hat es schon halb gelöst!
Bitte markiert eure Themen als erledigt. Sonst macht so ein Forum als Nachschlagewerk keinen Sinn.
The Code Project! - C# Programming | C# / VB.NET Pendants
Regeln + Netiquette
Liebe FIAEs, verlasst euch nicht auf das was in der Berufsschule "vermittelt" wird
und vor allem nicht auf das, was euch die IHK dazu erzählt!
Die haben so viel Ahnung von dem Gewerk, wie der Bundestag vom Haushalt...
-
26.02.07 16:44 #5
- Registriert seit
- Aug 2005
- Beiträge
- 256
hört sich einfacher an als es ist

Warum ist das denn so komplex? Mein Problem ist weniger das, wie ich zeichne, sondern mehr, wo der Code rein muss. Bei .NET sind die Deklarationen ja wieder ganz anders. Ich habe hier einen Code, wo alles wichtige drinnen ist, nur an falscher Stelle:
Hier mein aktuelles Programm *g*
Code :1 2 3 4 5 6 7
Public Class Form1 Private Sub PictureBox1_MouseMove(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseMove Label1.Text = e.X Label2.Text = e.Y End Sub End Class
Das mache ich mir der GDI+ (Was auch immer das ist)
Hier der Zeichen-Befehl
Code :1
myGraphics.DrawLine(myPen, 4, 2, 12, 6)
Die Graphics-Klasse?!
Code :1 2 3
Public NotInheritable Class Graphics Inherits MarshalByRefObject Implements IDeviceContext, IDisposable
und ihre Verwendung:
Code :1
Dim instance As Graphics
Jetzt noch die Pen-Klasse
Code :1 2 3
Public NotInheritable Class Pen Inherits MarshalByRefObject Implements ICloneable, IDisposable
und auch ihre Verwendung:
Code :1
Dim instance As Pen
Wer mir das jetzt zusammenbastelt, sodass ich immer von einem Punkt (könnt ihr euch aussuchen, den verknüpfe ich später selbst, bis zum Mauszeiger eine Linie habe, dem poste ich ein nettes Smilie
Also schonmal Danke
-
28.02.07 15:09 #6
- Registriert seit
- Aug 2005
- Beiträge
- 256
Hallo,
Habe jetzt was bei Microsoft gefunden, was funtkioniert:
Code :1 2 3 4 5 6
Private Sub picturebox1_paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles PictureBox1.Paint Dim p As New Pen(Color.Black) Dim g As Graphics = e.Graphics ' Eine Linie von (0,0) zu (500,500) zeichnen g.DrawLine(p, 0, 0, 500, 500) End Sub
Das Problem ist aber, dass diese Linie nur beim Erstellen des Fensters gezeichnet wird, aber ich brauche eine, die nach Mausklick die Maus vom Klickursprung verfolgt. Das ist ja in jedem einfachen Zeichenprogramm möglich...
-
So, ich hab Dir schnell mal eine kleine Demo gemacht. Hier mal ein Auszug aus dem Control was ich erstellt habe. Ich hab hier einiges bewusst weggelassen.

Code csharp:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
public class MyCustomOwnerDrawnControl : Control { /**/ // Definieren der nötigen Objekte. Point m_point = Point.Empty, m_mousePoint = Point.Empty; Pen m_pen; public MyCustomOwnerDrawnControl( IContainer container ) { /**/ Init(); } void Init() { // ControlStyle auf händisches Zeichnen einstellen. Dies kann man nur innerhalb des Construktor-Aufrufs. // Zusätzlich siehst noch diverse Einstellungen die denke ich mal selbsterklärend sind. SetStyle( ControlStyles.UserPaint | ControlStyles.AllPaintingInWmPaint /*| ControlStyles.DoubleBuffer |*/ /*ControlStyles.ResizeRedraw*/, true ); } // Wenn linke Maustaste gedrückt werden die Koordinaten gespeichert. protected override void OnMouseDown( MouseEventArgs e ) und der Pen initialisiert. { if( e.Button == MouseButtons.Left ){ m_point.X = e.X; m_point.Y = e.Y; m_pen = new Pen( Color.Black ); } base.OnMouseDown( e ); } // Wenn linke Maustaste los gelassen werden die Koordinaten gelöscht. // Ganz wichtig! Immer das Pen Objekt nach der Verwendung disposen, // um Speicher zu sparen. protected override void OnMouseUp( MouseEventArgs e ) { if( e.Button == MouseButtons.Left ){ m_point = Point.Empty; m_pen.Dispose(); m_pen = null; } base.OnMouseUp( e ); } // Bei jeder Bewegung der Maus wird die Position gespeichert und das Zeichnen des Controls ausgelöst. protected override void OnMouseMove( MouseEventArgs e ) { m_mousePoint = new Point( e.X, e.Y ); base.Invalidate(); } // Zeichnet die Linie sofern die linke Maustaste gedrückt wurde. protected override void OnPaint( PaintEventArgs e ) { if( m_point == Point.Empty || m_pen == null ) return; e.Graphics.DrawLine( m_pen, m_point, m_mousePoint ); base.OnPaint( e ); } }
MfG,
Christian
Wer sein Problem definiert, hat es schon halb gelöst!
Bitte markiert eure Themen als erledigt. Sonst macht so ein Forum als Nachschlagewerk keinen Sinn.
The Code Project! - C# Programming | C# / VB.NET Pendants
Regeln + Netiquette
Liebe FIAEs, verlasst euch nicht auf das was in der Berufsschule "vermittelt" wird
und vor allem nicht auf das, was euch die IHK dazu erzählt!
Die haben so viel Ahnung von dem Gewerk, wie der Bundestag vom Haushalt...
-
28.02.07 16:14 #8
- Registriert seit
- Aug 2005
- Beiträge
- 256
Hi,
alle achtung, haste ja perfekt hinbekommen. Ich versuche mal das irgendwie in mein VB.NET zu importieren?!
Ich hab nämlich keine Ahnung ob und wie das geht...
Also erstmal Danke für das schöne Programm. Kann man das Ganze denn auch in einer PictureBox machen? müsste doch gehen, oder?
mfg
-
Damit kannst Dir das auch in VB.NET anschauen
:
Wichtig: C# zu VB.net, und umgekehrt.. - Stickie
Reflector for .NET
//Edit: Klar kannst das auch mit einer PictureBox machen. Tausche einfach den Typ Control, von dem MyCustomOwnerDrawnControl ableitet, genen den Typ PictureBox aus. Die PictureBox basiert ja auf dem Typ Control.
//Edit: Weist Du eigentlich, wie Du in dein VS benutzdefinierte Steuerelemente einbindest, damit Du sie aus der ToolBox in den Designer "ziehen" kannst?Geändert von Christian Kusmanow (28.02.07 um 16:34 Uhr)
MfG,
Christian
Wer sein Problem definiert, hat es schon halb gelöst!
Bitte markiert eure Themen als erledigt. Sonst macht so ein Forum als Nachschlagewerk keinen Sinn.
The Code Project! - C# Programming | C# / VB.NET Pendants
Regeln + Netiquette
Liebe FIAEs, verlasst euch nicht auf das was in der Berufsschule "vermittelt" wird
und vor allem nicht auf das, was euch die IHK dazu erzählt!
Die haben so viel Ahnung von dem Gewerk, wie der Bundestag vom Haushalt...
-
28.02.07 16:45 #10
- Registriert seit
- Aug 2005
- Beiträge
- 256
Hi,
Also einfach gesagt: Ich weiß gar nichts bis auf VB6.0
Kommt drauf an was du meinst. Also ich kenne diese Controls wie zB. Timer usw.
Aber ich habe mit Visual Studio noch gar nichts programmiert, außer eine PictureBox mit Koordinatenanzeige.
Werde das gleich mal ausprobieren.
mfg
-
28.02.07 17:07 #11
- Registriert seit
- Aug 2005
- Beiträge
- 256
Hallo,
Also ich habe mir jetzt die Augen wund gesucht. Ich habe zwar herausgefunden, wie man diese Toolbox anpassen kann, aber diese .resx Datei kriege ich nicht in mein .NET. Kannst du mir das vll. mal zeigen?
mfg
-
- Control erstellen und Projekt kompilieren
- Rechtsklick auf ToolBox->Add/Remove Items...
- Auf Browse... klicken.
- Exe/Assembly auswählen
- Component auswählen
- Fertig

Visual Studio 2005 Toolbox Utility - TheCodeProject
Adding Custom Controls to Visual Studio.Net Toolbox Programatically - TheCodeProjectMfG,
Christian
Wer sein Problem definiert, hat es schon halb gelöst!
Bitte markiert eure Themen als erledigt. Sonst macht so ein Forum als Nachschlagewerk keinen Sinn.
The Code Project! - C# Programming | C# / VB.NET Pendants
Regeln + Netiquette
Liebe FIAEs, verlasst euch nicht auf das was in der Berufsschule "vermittelt" wird
und vor allem nicht auf das, was euch die IHK dazu erzählt!
Die haben so viel Ahnung von dem Gewerk, wie der Bundestag vom Haushalt...
-
28.02.07 20:36 #13
- Registriert seit
- Aug 2005
- Beiträge
- 256
So, malwieder ein Doppelpost

Also, es gibt Neuigkeiten. Habe jetzt nochmal ganz in Ruhe alles in VB.NET gewandelt und dann mal den Debugger genauer unter die Lupe genommen. Hier die Fehlermeldung im Ausgabe-Debugger:
Die letzten Zeilen sind interessant:
(Da soll wohl Form1 in dem Code vieldeutig sein, aber ich weiß nicht warum?)
Code :1 2 3 4 5
------ Erstellen gestartet: Projekt: PaintLineDemo, Konfiguration: Debug Any CPU ------ C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Vbc.exe /noconfig /imports:Microsoft.VisualBasic,System,System.Collections,System.Collections.Generic,System.Data,System.Drawing,System.Diagnostics,System.Windows.Forms /nowarn:42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 /rootnamespace:PaintLineDemo /doc:obj\Debug\PaintLineDemo.xml /define:"CONFIG=\"Debug\",DEBUG=-1,TRACE=-1,_MyType=\"WindowsForms\",PLATFORM=\"AnyCPU\"" /reference:..\..\..\..\PaintLineDemo\bin\Debug\PaintLineDemo.exe,C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Data.dll,C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Deployment.dll,C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.dll,C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Drawing.dll,C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Windows.Forms.dll,C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Xml.dll /main:PaintLineDemo.My.MyApplication /debug+ /debug:full /out:obj\Debug\PaintLineDemo.exe /resource:obj\Debug\PaintLineDemo.PaintLineDemo.Form1.resources /resource:obj\Debug\PaintLineDemo.Resources.resources /target:winexe Form1.vb Form1.Designer.vb "My Project\AssemblyInfo.vb" "My Project\Application.Designer.vb" "My Project\Resources.Designer.vb" "My Project\Settings.Designer.vb" InternalMyTemplate.vb(16707566) : error BC30560: 'Form1' is ambiguous in the namespace 'PaintLineDemo'. InternalMyTemplate.vb(16707572) : error BC30560: 'Form1' is ambiguous in the namespace 'PaintLineDemo'. ========== Build: 0 erfolgreich oder aktuell, Fehler bei 1, 0 übersprungen ==========
Hier nochmal mein aktueller Quellcode:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
Imports System Imports System.Drawing Imports System.Collections Imports System.ComponentModel Imports System.Windows.Forms Imports System.Data Namespace PaintLineDemo ''' <summary> ''' Summary description for Form1. ''' </summary> Public Class Form1 Inherits System.Windows.Forms.Form Private myCustomOwnerDrawnControl1 As MyCustomOwnerDrawnControl Private components As System.ComponentModel.IContainer Public Sub New() ' ' Required for Windows Form Designer support ' ' ' TODO: Add any constructor code after InitializeComponent call ' InitializeComponent() End Sub ''' <summary> ''' Clean up any resources being used. ''' </summary> Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean) If disposing Then If components IsNot Nothing Then components.Dispose() End If End If MyBase.Dispose(disposing) End Sub #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 Sub InitializeComponent() Me.components = New System.ComponentModel.Container Me.MyCustomOwnerDrawnControl2 = New PaintLineDemo.MyCustomOwnerDrawnControl(Me.components) Me.SuspendLayout() ' 'MyCustomOwnerDrawnControl2 ' Me.MyCustomOwnerDrawnControl2.Location = New System.Drawing.Point(-1, -2) Me.MyCustomOwnerDrawnControl2.Name = "MyCustomOwnerDrawnControl2" Me.MyCustomOwnerDrawnControl2.Size = New System.Drawing.Size(294, 245) Me.MyCustomOwnerDrawnControl2.TabIndex = 0 Me.MyCustomOwnerDrawnControl2.Text = "MyCustomOwnerDrawnControl2" ' 'Form1 ' Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font Me.ClientSize = New System.Drawing.Size(292, 266) Me.Controls.Add(Me.MyCustomOwnerDrawnControl2) Me.Name = "Form1" Me.Text = "David" Me.ResumeLayout(False) End Sub #End Region ''' <summary> ''' The main entry point for the application. ''' </summary> <STAThread()> _ Private Shared Sub Main() Application.Run(New Form1()) End Sub Friend WithEvents MyCustomOwnerDrawnControl2 As MyCustomOwnerDrawnControl End Class End Namespace
mfg
-
Mach es doch mal anders. Übertrag das was Du im Reflector stehen hast händisch in VB. So hast auch einen größeren Lerneffekt. Btw. ist das Beispielprojekt in .NET 1.1. Auf Arbeit habe im Moment leider nichts anderes zur Verfügung.

Ausserdem sehe ich nur ein Form. Das Control fehlt.MfG,
Christian
Wer sein Problem definiert, hat es schon halb gelöst!
Bitte markiert eure Themen als erledigt. Sonst macht so ein Forum als Nachschlagewerk keinen Sinn.
The Code Project! - C# Programming | C# / VB.NET Pendants
Regeln + Netiquette
Liebe FIAEs, verlasst euch nicht auf das was in der Berufsschule "vermittelt" wird
und vor allem nicht auf das, was euch die IHK dazu erzählt!
Die haben so viel Ahnung von dem Gewerk, wie der Bundestag vom Haushalt...
-
01.03.07 11:05 #15
- Registriert seit
- Aug 2005
- Beiträge
- 256
hi,
sry, keine Ahnung. Ich habe den Code ja von Hand reinkopiert. Aber ich blick da nich mehr durch.
Ich habe jetz einfach mal alle Form1 auf Form2 geändert, inkl. Namen der Form. Und jetzt macht er nicht mehr diesen Fehler in der Ausgabe, nur funktionieren tuts trotzdem nicht. Jetzt habe ich in dem Code überall Fehler:
Application.myapp
Code :1 2 3 4 5 6 7 8 9 10 11
<?xml version="1.0" encoding="utf-8"?> <MyApplicationData xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <MySubMain>true</MySubMain> <MainForm>Form2</MainForm> <SingleInstance>false</SingleInstance> <ShutdownMode>0</ShutdownMode> <EnableVisualStyles>true</EnableVisualStyles> <AuthenticationMode>0</AuthenticationMode> <ApplicationType>0</ApplicationType> <SaveMySettingsOnExit>true</SaveMySettingsOnExit> </MyApplicationData>
Zu jeder Zeile kommt da die Meldung:
"Die Schemainformationen für das Element "..." konnten nicht gefunden werden."
Was soll denn das schon wieder?
mfg
Ähnliche Themen
-
<hr> and Abstände
Von wachteldonk im Forum CSSAntworten: 1Letzter Beitrag: 11.09.07, 10:47 -
Abstände DIV im IE
Von tinella im Forum CSSAntworten: 3Letzter Beitrag: 03.11.06, 16:51 -
ul > li > ul > li Abstände im IE?
Von Dalerion im Forum CSSAntworten: 4Letzter Beitrag: 10.05.06, 19:25 -
3D-Koordinaten in 2D-Koordinaten umrechnen
Von mamarulez im Forum Sonstige SprachenAntworten: 3Letzter Beitrag: 23.05.05, 22:54 -
Abstände zw. p und /p Tag
Von ultrakollega im Forum HTML & XHTMLAntworten: 4Letzter Beitrag: 01.07.03, 12:12





Zitieren
Login





