freepascal und gtk

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
guennid
Beiträge: 59
Registriert: Sa 9. Aug 2008, 10:19

freepascal und gtk

Beitrag von guennid »

Wie ihr seht, bin ich neu hier.
Ich bin kein professioneller Programmierer. Aber ich habe eine Daten"bank"-Anwendung mit dBase-Tabellen und TP unter DOS entwickelt.
Ich überlege, das auf linux, freepascal, mysql und gui umzuschreiben.
Was letzteres angeht, bin ich auf das hier aufmerksam gemacht worden [1], [2].
MIt C kenne ich mich gar nicht aus.

Kann mir jemand bei der Erklärung dieses Code-Schnipsels weiterhelfen:

Code: Alles auswählen

g_signal_connect_swapped (G_OBJECT (open_item), "activate",
                              G_CALLBACK (menuitem_response),
                              (gpointer) "file.open");
Kann mir jemand genauer erklären, was es mit den Begriffen "activate", menuitem_response, und "file.open" auf sich hat? Inwieweit ist das was Internes und inwieweit muss ich da was deklarieren/code schreiben. Aus dem englischsprachigen Tutorial [2], woher ich das habe, werde ich nicht schlau.
Statt "activate" muss ich in pascal wohl 'activate' schreiben.
Was ist "file.open"? der compiler will das eigentlich gar nicht sehen, sprich, er erwartet dort die schließende Klammer.
menuitem_response ist, wenn ich recht sehe, ein undefinierter Zeiger. Wenn ich den deklariere, akzepiert der compiler den Code. Nur: Was mach ich da eigentlich?

Grüße, Günther

[1] http://www.pro-linux.de/berichte/fp-gtk ... .html#ToC1" onclick="window.open(this.href);return false;
[2] http://library.gnome.org/devel/gtk-tuto ... NUCREATION" onclick="window.open(this.href);return false;

monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

Beitrag von monta »

Soweit ich das sehe, erstellst du damit direkt ein GTK-Popupmenü bzw. geneuer, du weist scheinbar das Ereignis zu.

Aber, das ganze brauchst du nicht, soweit ich das seh. Sondern, wenn du mit Lazarus arbeitest, kannst du dir ja deine GUI bequem im Formulareditor zusammen stellen. Um eben solche direkten Arbeiten mit GTK zu vermeiden, ganz im gegenteil...Lazarus gestaltet das ganze dann für dich auch noch Plattformunabhängig für verschiedene Widgetsets ;)

//Und herzlich willkommen natürlich.
Johannes

guennid
Beiträge: 59
Registriert: Sa 9. Aug 2008, 10:19

Beitrag von guennid »

Mein TP-Tabellen-Programm hat 46.000 Code-Zeilen. Also, zum Umschreiben muss ich mysql lernen, ich muss die Unterschiede zwischen TP und freepascal lernen (die 100% Kompatibilität ist ein Märchen) und ich muss wenigstens ansatzweise was über Objektorientierung lernen. Ich denke, das reicht. Und deswegen würde ich mir Lazarus gerne erparen und es bei freepascal bewenden lassen.

Es wäre schön, wenn mir jemand ein paar konkrete Erläuterungen zu dem zitierten Code geben könnte.

Grüße, Günther

knight
Beiträge: 802
Registriert: Mi 13. Sep 2006, 22:30

Beitrag von knight »

[1] ist Stand 2003! Die Free Pascal Entwicklung ist seit dem nicht stehen geblieben. Wenn du ein Beispiel hast, wo dein TP Code nicht mit Free Pascal läuft, dann würde ich die Free Pascal Entwickler ansprechen (ggf. über den Bugtracker http://bugs.freepascal.org/main_page.php" onclick="window.open(this.href);return false; ).
Und wie monta schon empfohlen hat, für eine GUI würde ich Lazarus verwenden. Eine Komponente für dBase Tabellen gibts da übrigens auch.

knight

guennid
Beiträge: 59
Registriert: Sa 9. Aug 2008, 10:19

Beitrag von guennid »

knight hat geschrieben:Eine Komponente für dBase Tabellen gibts da übrigens auch.
Ist mir bekannt. Das wäre auch noch eine - wieder völlig andere - Möglichkeit
Es ist schon frustierend, zu erleben, wie die Hürden vor meinem Ziel (Tabellen-Anwendung umschreiben) mit wachsender Beschäftigung mit dem Thema zu- statt abnehmen.

Grüße, Günther

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Ich denk du machst dir da etwas mehr stress als sein muss.
Wenn du eine halbwegs Zeitgenössische Oberfläche drauftun willst musst du sie eh neubaun und dazu bietet sich lazarus einfach an.

Wenn du sowenig Stress wie möglich mit dem portieren haben willst pass die App auf Kommandoziele an den fpc an und numm dein Kommandozieleninterface weiter.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

guennid
Beiträge: 59
Registriert: Sa 9. Aug 2008, 10:19

Beitrag von guennid »

Christian hat geschrieben:pass die App auf Kommandozeile an den fpc an
genau das geht nicht. Essentiell für die Anwendung (dBase-formatierte Tabellen) sind Index-Routinen, die auf bayer-Bäumen mit inline-code (falls hier mit dem Begriff jemand etwas anfangen kann) basieren (die nicht von mir stammen), der nicht freepascal-kompatibel ist. Nun werdet ihr zwar sagen (siehe monta): Schreib 'nen bug-report. Aber das wäre dann die nächste neue Hürde, die aufgerichtet wird. Denn dann müsste ich das wieder lernen und Informatik ist eigentlich nicht meine Profession.

Ich fürchte doch, ich bin hier fehl am Platze. Muss ich halt wieder versuchen, im debian-forum weiterzukommen, obwohl freepascal nicht so deren Ding ist.

Nichts für ungut, Günther

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Die Frage ist was du willst...
Du willst ohne Arbeit ein uralt Programmsystem plötzlich zu nem GUI Programm machen. So kommt mir das vor. Dein DBase kram kannst du mit TDbf ersetzen, oder aber du siehst zu das du dene index routinen aufm fpc zum laufen bekommst ist ja alles open source.
Irgendwo musst du mal abstriche machen.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

bembulak
Beiträge: 370
Registriert: Di 6. Feb 2007, 09:29
OS, Lazarus, FPC: L0.9.29 SVN:24607 FPC 2.4.0-32 bit @ Win XP SP3
CPU-Target: 32bit i386, ARM
Wohnort: Oberösterreich

Beitrag von bembulak »

Hi,

etwas spät, ich weiß.

Code: Alles auswählen

g_signal_connect_swapped (G_OBJECT (open_item), "activate",
                              G_CALLBACK (menuitem_response),
                              (gpointer) "file.open");
Es wäre schön, wenn mir jemand ein paar konkrete Erläuterungen zu dem zitierten Code geben könnte.
Statt "activate" muss ich in pascal wohl 'activate' schreiben.
Was ist "file.open"? der compiler will das eigentlich gar nicht sehen, sprich, er erwartet dort die schließende Klammer.
menuitem_response ist, wenn ich recht sehe, ein undefinierter Zeiger. Wenn ich den deklariere, akzepiert der compiler den Code. Nur: Was mach ich da eigentlich?
IMHO ist es schwieriger, C und GTK (vor allem reines GTK) zu lernen, als mit Lazarus als IDE die Komponenten zusammen zu klicken.

Und das hat auch so rein gar nix mit der Datenbank, den Tabellen oder sonst was zu tun.

Ich verstehe den Unwillen nicht, schnell mal einen Blick auf Lazarus zu werfen, wenn dir die Leute schon sagen, dass du damit sicher besser bedient bist, als auf der Kommandozeile zu versuchen, die GTK-Api zu lernen, denn das ist die Hölle, wirklich.
Schreib 'nen bug-report. Aber das wäre dann die nächste neue Hürde, die aufgerichtet wird. Denn dann müsste ich das wieder lernen
Es ist nicht schwieriger, einen Bugreport zu schreiben, als in einem Forum eine Frage zu stellen.

Der Rat der Leute hier ist wirklich gut gemeint und ich bin mir sicher, du kannst dir viel, viel Tipparbeit sparen, wenn du dein Programm nimmst, die Logik auseinanderplückst und von der Ausgabe trennst und das ganze dann nur noch mit der GUI (die du dir bequem zusammenklicken kannst dank Lazarus) verkettest.

Die Tips der Boardmitglieder sind ehrlich und wirklich gut gemeint. Es ist einen Versuch wert, also nicht gleich eingeschnappt sein.

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 7043
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: freepascal und gtk

Beitrag von af0815 »

guennid hat geschrieben: Kann mir jemand bei der Erklärung dieses Code-Schnipsels weiterhelfen:

Code: Alles auswählen

g_signal_connect_swapped (G_OBJECT (open_item), "activate",
                              G_CALLBACK (menuitem_response),
                              (gpointer) "file.open");
G_OBJECT (open_item) = auf welches Item es angewendet wird
"activate" = Der Name des Signals
G_CALLBACK (menuitem_response) = der Handler auf den das angewendt wird
(gpointer) "file.open") = Normalerweise das erzeugte Menü

Nachdem das ganze, so wie es aussieht C-Code ist und du ja nicht in die absoluten Tiefen der Programmierung einsteigen willst, so wird dein Unterfangen einige Probleme bringen.

MySQL ist eine Serverbasierende DB (Mengenorientiert), dbDase eine Desktopdatenbank (Zeilenorientiert). Du wirst da schon deine Problme mit den Index und Bäumen haben. Indexierung und Sortierungen wird bei ServerDatenbanken von der Datenbank übernommen und der Designer bestimmt nur welche Art und Felder genommen werden. In gewisser weise auch noch welche zugrunde liegende Datenbank genommen wird.
Somit sind die Baumstrukturen unter dBase voraussichtlich obsolet, wenn nicht so ist der Zugrunde liegende Algo der Mengenverarbeitung anzupassen, da ansonsten die typischen Performanceproble auftauchen, die passieren, wenn man einem mengenbasierenden Datenbankserver die Desktopeigenschaften aufzwingt. Wenn man dort den Ansatz nicht ändern will oder kann, am besten auf dBase bleiben.

Die Programmierung der Oberfläche (gui) wird in diesem Forum durch ein RAD-Tool namens Lazarus gemacht. Somit ist auch klar, warum hier der Fokus nicht auf tiefster Widgetsetprogrammierung liegt.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

guennid
Beiträge: 59
Registriert: Sa 9. Aug 2008, 10:19

Beitrag von guennid »

af0815 hat geschrieben:MySQL ist eine serverbasierende DB (mengenorientiert), dbDase eine Desktopdatenbank (zeilenorientiert).
Ist schon klar.
af0815 hat geschrieben:Somit sind die Baumstrukturen unter dBase voraussichtlich obsolet
ist ebenfalls klar. Den Import der Daten halte ich für mein geringstes Problem. (Habe ich testweise schon ausprobiert und funktioniert.)
Ganz unbedarft bin ich nicht :wink: , aber ich habe noch nie objektorientiert und mit/für gui programmiert.
Exkurs
Es handelt sich um ein Büchereiverwaltungsprogramm für eine Schule. Im Grunde möchte ich ja liebend gerne bei meiner gut funktionierenden DOS-Version bleiben, aber in Zeiten des Internets kommen doch immer wieder Schülerfragen, warum man sich nicht zu Hause den Medienbestand anschauen kann, bzw. vorbestellen kann. Und bei diesen Problemen bin ich wohl mit dem dBase-Format ziemlich am Ende. Daher der Plan, das Programm komplett umzustellen. Ich muss auch nicht unbedingt das Rad zum x-ten Male neu erfinden, aber mir ist kein einziges derartiges open-source-Programm bekannt. In deiner Heimat wird "littera" produziert. Das ist das einzige, das ich kenne, aber das ist nicht frei und ist auf windows beschränkt.

Du hast recht, das ist C-Code, aber mit Hilfe der freepascal-Units gtk und glib2 sollte der sich unschwer auf pascal anwenden lassen. (Ich konnte ihn ja mit dem fp-compiler kompilieren). Mein Problem ist eher das gui-Neuland, das ich betrete.
Das Beispiel, an dem ich da herumdoktore, ist wohl ein simples Dateimenü mit drei items (ich rede lieber von Einträgen, darunter kann ich mir mehr vorstellen): öffnen, speichern, beenden.
angeführt habe ich lediglich den Eintrag öffnen.

Ich danke für das konkrete Eingehen auf meine Frage, muss aber gestehen, dass ich auch damit zur Zeit noch nichts anzufangen weiß.

Grüße, Günther

hanibal
Beiträge: 369
Registriert: Sa 3. Mär 2007, 16:03
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Bramsche (Emsland)

Beitrag von hanibal »

aber wozu brauchst du diesen c code überhabt übersetzt, wenn ud lazarus verwendest? den ganzen gui kram erlidigt doch lazarus für dich, da brauchst du im prinzip garnix machen, nur zusammen klicken (mit der maus ;) ). sonst garnix. Also ist nicht die gui dain problem, sonder "nur" die datenbang, und der turbo pascal code. nicht die gui. mit dem ganzen gtk kram brauchst du dich absolut nicht zu beschäftigen.

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 7043
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Beitrag von af0815 »

guennid hat geschrieben:Das Beispiel, an dem ich da herumdoktore, ist wohl ein simples Dateimenü mit drei items (ich rede lieber von Einträgen, darunter kann ich mir mehr vorstellen): öffnen, speichern, beenden.
angeführt habe ich lediglich den Eintrag öffnen.
So würde ich vorschlagen, installiere mal Lazarus, wobei es relativ egal ist, ob unter Windows oder Linux.

Öffne ein leeres (neues) Projekt (Unter Projekt) und ziehe aus dem Bereich Standard ein TMainMenu auf die Form des Projekts. Mittels Doppelklick auf das Icon vom Menü öffnet sich der Editor für die Einträge.

Alles in allen ca. 1 Minute für ein Menü. Ach ja, speichern ist auch eine gute Idee :-)

Etwas Herausforderung ist es, linearen Code in eventgesteuerten Code zu verwandeln. Hier würde ich mal vorschlagen, ca. 1 Woche in das neue Tool (Lazarus - hehe) zu investieren und den Code dann wegzuschmeissen. Dann kannst du wahrscheinlich auch das Projekt neu strukturieren. Das ist sowieso nötig, auch wenn du das ganze nativ mit dem FPC machen willst, denn Gtk ua. laufen sowieso Eventbasierend ab und ist somit ein ganz anders Konzept.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

bembulak
Beiträge: 370
Registriert: Di 6. Feb 2007, 09:29
OS, Lazarus, FPC: L0.9.29 SVN:24607 FPC 2.4.0-32 bit @ Win XP SP3
CPU-Target: 32bit i386, ARM
Wohnort: Oberösterreich

Beitrag von bembulak »

Ich muss auch nicht unbedingt das Rad zum x-ten Male neu erfinden, aber mir ist kein einziges derartiges open-source-Programm bekannt. In deiner Heimat wird "littera" produziert. Das ist das einzige, das ich kenne, aber das ist nicht frei und ist auf windows beschränkt.
http://www.datacrow.net/" onclick="window.open(this.href);return false;

Geschrieben in Java, sollte also überall laufen, wo eine JVM verfügbar ist. OpenSource, versteht sich.

[img]http://www.datacrow.net/images/screensh ... search.png[/img]

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Sowas ist doch in 3h geschrieben.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Antworten