Autor Beitrag
hydemarie
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 475
Erhaltene Danke: 51



BeitragVerfasst: Di 26.06.18 10:33 
Mal was ganz Neues: Ich mache was mit C#. :D

Ich würde gern eine kleine Desktopanwendung mit Windows Forms schreiben (beziehungsweise: bin schon recht weit gekommen), die auf der MDI-Technik basiert. (Hintergrund: Es wird eine Art Texteditor mit frei schwebenden Fenstern. SDI und 'ne Tableiste wären da kontraproduktiv.) Während das Auf- und Zumachen von Clientfenstern kein großes Problem darstellt, wofür ich C# einfach mal loben möchte - mein erster Entwurf in Delphi hat mehr Code für den gleichen Effekt gebraucht, vielleicht bin ich aber auch einfach nur kacke in Delphi -, stellt mich ein technisch eigentlich gar nicht relevantes Thema noch vor ein Rätsel:

Ich wäre gern in der Lage, im Clientbereich des MDI-Fensters mit der Maus ein Rechteck zu malen. Also:

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
+----[ Titelleiste ]--------------------[_][X]
+--------------------------------------------+
|                                            |
| [ Clientbereich ]                          |
|                                            |
+--------------------------------------------+


Bei Rechtsklick setze ich X, Y und "isDragging". So lange "isDragging" == true, soll bei jeder Mausbewegung ein Rechteck gemalt werden. Ich möchte also sozusagen das mit der Maus "aufgezogene" Rechteck visualisieren.

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
{
    // Anders als StartX und StartY, die beim Rechtsklick
    // gesetzt wurden, sind TargetX und TargetY so lange
    // veränderbar, bis die Maus aufhört, sich zu bewegen.
    if (isDragging) {
        iTargetX = e.X;
        iTargetY = e.Y;

        // TODO:
        // Male Rechteck von iStartX/iStartY zu iTargetX/iTargetY,
        // ersetze dabei das vorherige Rechteck.
    }
}


Vermutlich muss ich irgendwas mit einem CPen machen, aber wie kriege ich das so hin, dass das nicht stehen bleibt, sondern mit jedem MouseMove neu gezeichnet wird?
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Di 26.06.18 12:13 
Hallo,

Stichwort: Paint-Ereignis, s. z.B. meine Antwort unter Zeichenbereich eines Panels, "Animation" von Kreisen (bes. der Link).

Für diesen Beitrag haben gedankt: hydemarie
hydemarie Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 475
Erhaltene Danke: 51



BeitragVerfasst: Di 26.06.18 12:29 
Hmm, ich hab' ja kein Panel. Aber der Link hilft mir schon weiter, danke...
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Di 26.06.18 14:21 
Geht es dir um den Clientbereich des Hauptfensters oder um eines der MDI-Childfenster?

Für ersteres s. Have fun with the MDI client area (s.a. MdiClient) und ansonsten hast du ja eine Form-Instanz des MDI-Childfensters (s.a. MdiChildren).

Ob Panel oder Form ist egal, hauptsache es ist ein Control, dann hat es auch das Paint-Ereignis (auch wenn nicht alle Windows-Controls dieses unterstützen).

Für diesen Beitrag haben gedankt: hydemarie
hydemarie Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 475
Erhaltene Danke: 51



BeitragVerfasst: Di 26.06.18 14:51 
Es geht tatsächlich um den Clientbereich des Hauptfensters. Ich möchte sozusagen neue Clientfenster in das Hauptfenster "malen" können, statt sie bloß "zu erstellen", etwa so wie im Anhang. Sinn: Sobald ich die Maus loslasse, soll da, wo der "Vorschaurahmen" ist, das neue ClientWindow erscheinen ... :)

Ich komme erst übermorgen dazu, wieder etwas am Code zu machen, aber ich bin auf jeden Fall sehr dankbar für deine Tipps.
Einloggen, um Attachments anzusehen!
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 28.06.18 10:08 
- Nachträglich durch die Entwickler-Ecke gelöscht -
hydemarie Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 475
Erhaltene Danke: 51



BeitragVerfasst: Do 28.06.18 11:43 
Weder noch! :) Ich möchte tatsächlich nur einen Rahmen darstellen, um den Bereich zwischen "hier wurde die Maus gedrückt" und "hier ist die Maus gerade" rechteckig darzustellen. Beim Loslassen soll der Rahmen verschwinden und durch ein MDI-Fenster ersetzt werden.
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Do 28.06.18 14:43 
Beispielprojekt im Anhang
Einloggen, um Attachments anzusehen!

Für diesen Beitrag haben gedankt: hydemarie
hydemarie Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 475
Erhaltene Danke: 51



BeitragVerfasst: Do 28.06.18 16:57 
:shock:

Genau das wollte ich programmieren! Danke, Ralf!