Hallo, wie programmiert man solche Oberflächen wie von Simulink, Xcos, Gnuradio-Companion, Inkscape, Openoffice draw, Corel draw oder ähnliches? Es geht um die drag-drop-move-Funktion: Man nimmt ein Bildchen aus einem Sortimentskasten und wirft es auf einem weißen Blatt ab. Dann kann man es hin- und herschieben. Größer und kleiner ziehen, drehen, bearbeiten etc. Auf welche Grundlage baut man so etwas auf? Da gibt es ja eine Vielzahl an irgendwelchem Zeug: Qt, GTK, wxWidgets usw. Wofür sollte man sich entscheiden? Wie setzt man das richtig um, dass man nicht nach einiger Zeit merkt man hat sich etwas verbaut und muss jetzt alles noch einem neu schreiben?
Sei mir nicht böse, aber die Frage ist so komisch gestellt, dass man vermuten muss, du hast noch nie richtig programmiert und vor allem auch nichts mit Grafik. Wie ist dein Kenntnisstand so in etwa?
Ein Delphi kann das... zumindest einen Teil davon, den graphischen Teil, und den Rest, dh die Funktionalitaet muss man selbst bringen.
... schrieb: > Sei mir nicht böse, aber die Frage ist so komisch gestellt, dass man > vermuten muss, du hast noch nie richtig programmiert und vor allem auch > nichts mit Grafik. Wie ist dein Kenntnisstand so in etwa? Also "richtig" programmiert habe ich noch nicht. Ich denke ich habe eher C++ "geskripted" als programmiert. Also vor Kurzem habe ich einen Assembler gebaut. Wenn ich was mit "Grafik" gemacht habe, beschränkte sich das auf Buttons, Labels, msg.-Boxen und Bildverarbeitung mit OpenCV, so richtig interaktives Echtzeitgrafik-Zeug, wo ein Bildchen am Mauszeiger hängt und sich ohne geflackere übers Bild bewegt, habe ich noch nicht gemacht. Achso: Ich möchte die Funktionalität in C/C++ oder ähnlichem machen. Ich bin auch bereit andere Sprachen (außer Python) zu benutzen, wenn es ganz vorteilhaft sein sollte. Tote Sprachen wie Pascal/Delphi kommen nicht in Frage. Natürlich sollte es möglichst ohne Probleme auch unter Windows, Linux, MacOS laufen.
Hin und Her- Schieben: Du fängst das MouseDown-Event ab. Prüfst dann, ob eines der Elemente in der großen Liste aller Elemente auf Deinem Zeichenpapier genau unterhalb der Mausposition liegen. Ob also die Ecke links oben links und oberhalb des Cursors liegt und die rechts unten rechts und unterhalb. Wenn ja, dann merkst Du Dir die Mausposition und verschiebst das Element solange um die Mausposition relativ zu der gemerkten, bis das MouseUp Event kommt. Das war das Schieben. Ähnlich geht es mit Ziehen, Rotieren, markieren usw.
Bei der Qt-Doku gibt es m.W. als Tutorial ein kleines Zeichenprogramm.
@Lapapp: Ja das ist ja das Prinzip, wie es intern funktioniert. Ich brauche aber erst mal das "Objekt" und das Verschieben muss ja sozusagen in Echtzeit gehen. Also wenn ich das Objekt anfasse und bewege, wirft ja jede Mausbewegung ein Event und ändert die Koordinaten des Objekts. Worst-Case wäre ja, wenn die CPU jetzt Pixel für Pixel das Gesamte Bild ohne altes Objekt neu zeichnet und das neue Objekt Pixel für Pixel drüber malt. Intern muss das Ja mit Layern, Grafikbeschleunigung usw. arbeiten. Da braucht man den richtigen Grafik-Objekttyp für das Bildchen. Also nicht man kann ja nicht alles manuell machen, sonst wird das sicher Murks. Wie machen es denn die Profis? Und warum so und nicht anders?
Im Grunde doch, wird alles ständig neugezeichnet/aus dem RAM an die richtige bildschirmstelle Kopiert. Wieviel einem davon nun das Grafikframework abnimmt ist eine andere Sache und hängt immer vom Einzelfall ab...
Stefan Helmert schrieb: > Da gibt es ja eine Vielzahl an irgendwelchem Zeug: Qt, GTK, wxWidgets > usw. > Wofür sollte man sich entscheiden? Wenn es darauf die ultimative Antwort gäbe, dann gäbe es auch nur ein GUI-Toolkit. Ich würde Qt verwenden, weil ich mich damit gut auskenne und es gerne benutze, aber das ist eben eher subjektiv. Jemand anders wird dir zu was anderem raten. Gehen tut's mit allen. > Wie setzt man das richtig um, dass man nicht nach einiger Zeit merkt man > hat sich etwas verbaut und muss jetzt alles noch einem neu schreiben? Mit viel Erfahrung. Und selbst dann kann sowas noch passieren. Du solltest sowieso davon ausgehen, daß dein erstes Programm sowieso quasi zum wegwerfen ist. Das geht jedem so. Lapapp schrieb: > Das war das Schieben. Ähnlich geht es mit Ziehen, Rotieren, markieren > usw. Oder man nimmt Klassen, wo sowas schon fix und fertig implementiert ist. Bei Qt wäre das z.B. QGraphicsView und Konsorten. Stefan Helmert schrieb: > Intern muss das Ja mit Layern, Grafikbeschleunigung usw. > arbeiten. Da braucht man den richtigen Grafik-Objekttyp für das > Bildchen. Also nicht man kann ja nicht alles manuell machen, sonst wird > das sicher Murks. > > Wie machen es denn die Profis? Und warum so und nicht anders? Wie du schon erkannt hast, verwenden die entsprechende APIs, wo solche Funktionen schon umgesetzt sind, von Leuten, die genau wissen, wie man sowas effizient und elegant hinbekommt. Gerade dafür hat man ja GUI-Toolkits. hmmm schrieb: > Im Grunde doch, wird alles ständig neugezeichnet/aus dem RAM an die > richtige bildschirmstelle Kopiert. Wieviel einem davon nun das > Grafikframework abnimmt ist eine andere Sache und hängt immer vom > Einzelfall ab... Das sollte einem bereits die Grafik-Hardware abnehmen. Dafür gab's schon auf dem Amiga den Blitter.
WinAPI und Direct Draw usw. wenn man es selber basteln will (das GUI toolkit)
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.