Adresse eines Eingabefeldes in einem menu finden..

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.
Antworten
richhein9
Beiträge: 4
Registriert: Do 30. Mai 2019, 23:02

Adresse eines Eingabefeldes in einem menu finden..

Beitrag von richhein9 »

Hallo,
mein Versuch die Adresse eines Eingabefeldes in einem Menu
---------------
procedure TForm1.Button2Click(Sender: TObject);
{$T-}

type
mstr = string[120];
pmstrt = ^mstr;

var
pmstr : array[1..6,2..18] of pmstrt;

begin
Form1.KdNr_Kd.Text := ''; // Eingabefeld leeren
pmstr[1,2] := @Form1.KdNr_Kd.Text; // Adresse finden?
pmstr[1,2]^ := 'Hallo!'; // Erfolgstesttest
{$T+}
end;
----------------

zu finden, wird mit einer Fehlermeldung belohnt bzw. der Compiler streikt.
was mache ich falsch bzw. weiß jemand eine Lösung?

Benutzeravatar
theo
Beiträge: 10467
Registriert: Mo 11. Sep 2006, 19:01

Re: Adresse eines Eingabefeldes in einem menu finden..

Beitrag von theo »

Text ist ein Property. Das ist nicht direkt ein String, sondern dahinter kann eine Funktion (Methode) sein, welche dir einen String liefert.
So geht das afaik nicht.

Was willst du denn erreichen?

richhein9
Beiträge: 4
Registriert: Do 30. Mai 2019, 23:02

Re: Adresse eines Eingabefeldes in einem menu finden..

Beitrag von richhein9 »

... ich möchte die Textfelder des ganzen Menü's "automatisch" d.h. in einer For-Schleife mit Text bestücken... Wenn sich hinter der Property eine Procedur verbirgt, dann muss die doch auch letztlich auf ein Textfeld zugreifen und dann wäre dessen Adresse die Lösung - oder? Aber wie da dran kommen?
Aber erstmal Danke! für die Antwort.

Benutzeravatar
theo
Beiträge: 10467
Registriert: Mo 11. Sep 2006, 19:01

Re: Adresse eines Eingabefeldes in einem menu finden..

Beitrag von theo »

Du musst unterscheiden zwischen dem TextFeld (TEdit?) und dessen Eigenschaft Text.
Explizite Pointer brauchst du zu diesem Zweck aber nicht.

Ich verstehe schon nicht ganz, was für dich "Textfelder des Menüs" sind.

Meinst du die Einträge eines TMainMenu, also TMenuItems?

richhein9
Beiträge: 4
Registriert: Do 30. Mai 2019, 23:02

Re: Adresse eines Eingabefeldes in einem menu finden..

Beitrag von richhein9 »

Naja, ich meine einen der "kleinen weißen Kästen" , in die ich z.B. den Kundennamen eintragen kann und der dann in einer Datenbank abgespeichert werden soll. Also wahrscheinlich verständigen wir uns richtig, wenn ich sage, dass das eigentlich kein "Menu-Item" ist? Unter Menü verstehe ich etwas, das aus einer Bar aufpoppt bzw. nach unten ausgerollt wird und verschiedene Programm-Aktivitäten bzw. Funktionen anbietet. Also, ich denke, worum es sich hier dreht, ist mit "ein Textfeld der Eingabemaske" besser beschrieben. Von diesen Textfeldern gibt es mehrere in dieser "Eingabemaske" auf dem Bildschirm. Sie werden alle mit irgendwelchen(Text-)Informationen gefüllt, die dann ebenfalls in der DB gespreichert werden (sollen). Aber wenn ich sie (später) aus der DB als eine Row einer Colum wieder auslese, dann wäre es praktisch, sie "in einem Rutsch" (also mittels einer For-Schleife) alle nacheinander in die jeweiligen Textfelder "transportieren" zu können - aber dazu brauche ich die in einem Array vorliegenden bekannten Adressen der "Textfelder" - sonst muss ich jedes Textfeld einzeln explizit adressieren und füllen - und das ist bei mehreren Menüs ein ziemlicher Aufwand.

Das ist also der Hintergrund meiner Frage - und ist mit dieser Erläuterung Deine Frage befriedigend beantwortet?

Benutzeravatar
theo
Beiträge: 10467
Registriert: Mo 11. Sep 2006, 19:01

Re: Adresse eines Eingabefeldes in einem menu finden..

Beitrag von theo »

Willst du nicht lieber ein TDBEdit nehmen?
Damit brauchst du dich um das füllen nicht zu kümmern.
https://wiki.lazarus.freepascal.org/TDBEdit

charlytango
Beiträge: 843
Registriert: Sa 12. Sep 2015, 12:10
OS, Lazarus, FPC: Laz stable (2.2.6, 3.x)
CPU-Target: Win 32/64, Linux64
Wohnort: Wien

Re: Adresse eines Eingabefeldes in einem menu finden..

Beitrag von charlytango »

ich denke du zäumst das Pferd vom falschen Ende aus auf. Du versuchst gerade das Rad neu zu erfinden. dabei steht ein nagelneuer Ferrari bereits vor der Türe bei dem du auf Knopfdruck alle Funktionen auswählen kannst.

Lazarus ist eine RAD (Rapid Application Development) GUI.
Also eine graphische Oberfläche mit der man ziemlich schnell Ergebnisse erzielt.

Das was du da skizzierst (also die gesamte Funktion der Eingabe in Feldern die mit einer Datenbank verbunden sind) schafft Lazarus mit einigen Mausklicks.

Wenn du irgendetwas mit einer Datenbank machen willst, dann ist die Auswahl der Datenbank der erste Job,
Und der zweite Job ist es eine grobe Funktionsübersicht zusammen zu tragen.
Danach kann man die Komponenten wählen die den Job erledigen.

Für eine einfache Datenbank zu Beginn kann ich dir SQLite empfehlen. Wesentlich brauchbarer als die abgenutzten DBF Dateien und wenns mal größer wird kann man das alles leicht auf andere Systeme skalieren.

Vielleicht etwas zu sehen und Lesen:
https://wiki.freepascal.org/SQLdb_Tutorial1 als Ausgangspunkt.
mittlerweile geht das alles deutlich besser und schneller aber als Einstieg ausreichend.

https://www.youtube.com/watch?v=gubifV6h9C4
https://www.youtube.com/results?search_ ... rus+sqlite

charlytango
Beiträge: 843
Registriert: Sa 12. Sep 2015, 12:10
OS, Lazarus, FPC: Laz stable (2.2.6, 3.x)
CPU-Target: Win 32/64, Linux64
Wohnort: Wien

Re: Adresse eines Eingabefeldes in einem menu finden..

Beitrag von charlytango »

und weil bald Weihnachten ist noch ein kleines Geschenk;

In ein eigenes Unterverzeichnis auspacken, und das Projekt (mit einem aktuellen Lazarus 2.2.4) im Verzeichnis project_Example öffnen (Ctrl+F11).

Compilieren und starten (F9).

Unter Windows sollte die Applikation starten, eine Datenbank anlegen, diese mit Demodaten befüllen und eine Kundenliste samt einfacher Navigation anzeigen.
Alle aufpoppenden Fenster einfach bestätigen.

Unter Linux müsstest du die SQLite Zugriffskomponenten installieren (sudo apt-get install sqlite3 libsqlite3-dev) und dann sollte das auch alles klappen. (ungetestet)

Bin gespannt ;-)
Dateianhänge
project_example.zip
(855.47 KiB) 47-mal heruntergeladen

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1430
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: Adresse eines Eingabefeldes in einem menu finden..

Beitrag von fliegermichl »

charlytango hat geschrieben:
Mi 7. Dez 2022, 01:11
und weil bald Weihnachten ist noch ein kleines Geschenk;

Bin gespannt ;-)
Hab mir einfach mal erlaubt, das Geschenk auszupacken. Mit 32 Bit funktioniert es auf Anhieb einwandfrei. Bei 64 Bit geht's nicht weil die Bittigkeit der dll nicht passt. Ich bin in Windows 10.

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6198
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: Adresse eines Eingabefeldes in einem menu finden..

Beitrag von af0815 »

@richhein9, kommst du von TurboPascal oder TurboVision ? Weil der Aufbau des Code sieht mir ganz danach aus.

Zum Beispiel verwendet man in Lazarus den Kompilerschalter $T normalerweise nicht im Code
{$typedAddress} or {$T} determines, if the address operator @ results in a typed or untyped pointer

und es wird auch nicht mehr der ShortString mit Längendefinition verwendet. Vor allen wird versucht alles Typensicher zu machen und nicht über untypisierte Pointer zu spielen. Ist das vielleicht ein steinaltes Projekt, was in neuen Code gegossen werden soll, die Welten aber nicht zusammenpassen ?

Ausserdem würde die genaue Fehlermeldung des Compiler helfen, weil so ist das ein Raten vor der trüben Glaskugel.

Zusätzlich in einem Ereignishandler von TForm1 nicht auf die Instanzvariable Form1 zugreifen. Die muss nicht mit diesen Namen vorhanden sein. Das ist ganz Fehlerträchtig und liefert gerne ungültige Objekte. Genaugenommen brauchst du Form1 nicht, weil das Objekt auf der aktuelle Form ja vorhanden sein muss.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

richhein9
Beiträge: 4
Registriert: Do 30. Mai 2019, 23:02

Re: Adresse eines Eingabefeldes in einem menu finden..

Beitrag von richhein9 »

vielen Dank Euch allen und
@charlytango : Das example habe ich ohne Mühe unter win11 gestartet und läuft - aber ich versuche so weit wie möglich tiefer zu verstehen, was ich programmieren möchte. Fertige Programme gibt es wie Sand am Meer - auch wunderbare! Aber wo ich selbst denke(n möchte)... sollte ich die eigenen Ideen auch umsetzen und wenn mir dazu Vorwissen fehlt, frage ich halt dort, wo ich dies Wissen vermute...

mit guten Wünschen für Euch alle (auch wegen eurer Hilfsbereitschaft)

charlytango
Beiträge: 843
Registriert: Sa 12. Sep 2015, 12:10
OS, Lazarus, FPC: Laz stable (2.2.6, 3.x)
CPU-Target: Win 32/64, Linux64
Wohnort: Wien

Re: Adresse eines Eingabefeldes in einem menu finden..

Beitrag von charlytango »

richhein9 hat geschrieben:
Mi 7. Dez 2022, 16:04
- aber ich versuche so weit wie möglich tiefer zu verstehen, was ich programmieren möchte. Fertige Programme gibt es wie Sand am Meer - auch wunderbare!
Dann hast du meinen Zugang völlig falsch verstanden.

Das was ich dir eingepackt habe ist keineswegs ein fertiges Programm.
Es ist im Wesentlichen ein Datenmodul das ich in hoffentlich absehbarer Zeit zur Verfügung stellen möchte um einerseits Erstellern von Beispielprogrammen und andererseits Anfängern eine bequeme Möglichkeit zu geben sich um den Datenzugriff erstmal nicht kümmern zu müssen.

Zudem habe ich dir einen Grid und ein paar Eingabefelder auf ein Formular geklebt um dir das Konzept von Lazarus nahe zu bringen. Du sollst dir das Programm nicht begeistert ansehen sondern checken wie ich den Datenzugriff gemacht habe. Die Datenbankanbindung steckt im Datenmodul und um die bräuchtest du dich erstmal nicht kümmern.

Scheinbar kommst du aus einer anderen Programmierwelt und möchtest mit dem Wissen von damals wieder einsteigen. Alles ok, aber die Welt hat sich weiter gedreht. Lazarus ist ähnlich aber doch anders.

Vielleicht erzählst du uns etwas über deinen EDV-Hintergrund, dann kann man auch gezielter helfen

Aber... it's all up to you
Zuletzt geändert von charlytango am Mi 7. Dez 2022, 16:55, insgesamt 1-mal geändert.

charlytango
Beiträge: 843
Registriert: Sa 12. Sep 2015, 12:10
OS, Lazarus, FPC: Laz stable (2.2.6, 3.x)
CPU-Target: Win 32/64, Linux64
Wohnort: Wien

Re: Adresse eines Eingabefeldes in einem menu finden..

Beitrag von charlytango »

fliegermichl hat geschrieben:
Mi 7. Dez 2022, 06:04
Hab mir einfach mal erlaubt, das Geschenk auszupacken. Mit 32 Bit funktioniert es auf Anhieb einwandfrei. Bei 64 Bit geht's nicht weil die Bittigkeit der dll nicht passt. Ich bin in Windows 10.
Danke fürs Testen.
Die dll hab ich ihm in dieses zip einfach mal auf Verdacht rein gepackt, die wäre normalerweise nicht dabei.

Ich bastle noch an einem bequemen Einstellungswerkzeug und der Möglichkeit zwischen unterschiedlichen Datenbanken zu switchen.
Dann werde ich nochmal um ausgiebigen Test ersuchen und die Teile veröffentlichen.

Benutzeravatar
theo
Beiträge: 10467
Registriert: Mo 11. Sep 2006, 19:01

Re: Adresse eines Eingabefeldes in einem menu finden..

Beitrag von theo »

richhein9 hat geschrieben:
Mi 7. Dez 2022, 16:04
vielen Dank Euch allen und
@charlytango : Das example habe ich ohne Mühe unter win11 gestartet und läuft - aber ich versuche so weit wie möglich tiefer zu verstehen, was ich programmieren möchte. Fertige Programme gibt es wie Sand am Meer - auch wunderbare! Aber wo ich selbst denke(n möchte)... sollte ich die eigenen Ideen auch umsetzen und wenn mir dazu Vorwissen fehlt, frage ich halt dort, wo ich dies Wissen vermute...
Die Frage ist halt immer: Wo willst du anfangen?
Wenn du aus Holz eine Hundehütte baust, willst du dann zuerst den Baum für das Holz in deinem Garten wachsen lassen?
Willst du für die Nägel das Eisenerz selber anschleppen und in deinen Haus-Hochofen werfen?
Irgendwie ist das beste Prinzip doch meistens, wenn man dankbar das nimmt was schon da ist und darauf aufbaut.
Mann muss auch nicht unbedingt 100%ig verstehen, was vorher damit gemacht wurde.
Stichwort: Das Rad nicht neu erfinden! :wink:

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1430
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: Adresse eines Eingabefeldes in einem menu finden..

Beitrag von fliegermichl »

Genau. Nicht das Rad neu erfinden, sondern das bereits erfundene Rad finden. Manchmal ist letzteres aber sogar aufwändiger.

Antworten