text nur zum teil ausgeben?
text nur zum teil ausgeben?
hallo ich habe mal ne frage...
ich lese in ein editfeld aus einer listbox text ein der so aussieht
dasisteintest - dernichtfunktioniert
procedure TForm1.ListBox6Click(Sender: TObject);
begin
edit5.Text:=ListBox6.GetSelectedText;
end;
da liest er mir den ganzen text ein
nun möchte ich aber nur den ersten teil einlesen bis zum leerzeichen
bei einem stringgrid kann man mit delimeter was machen das weiss ich
z.b.
StringGrid2.Rows[1].Delimiter :=' ';
aber wie funktioniert das wenn ich das in ein editfeld einlesen möchte das der text ab dem leerzeichen abgeschnitten wird?
kann mir da mal jemand helfen?
danke schon mal im vorraus
ich lese in ein editfeld aus einer listbox text ein der so aussieht
dasisteintest - dernichtfunktioniert
procedure TForm1.ListBox6Click(Sender: TObject);
begin
edit5.Text:=ListBox6.GetSelectedText;
end;
da liest er mir den ganzen text ein
nun möchte ich aber nur den ersten teil einlesen bis zum leerzeichen
bei einem stringgrid kann man mit delimeter was machen das weiss ich
z.b.
StringGrid2.Rows[1].Delimiter :=' ';
aber wie funktioniert das wenn ich das in ein editfeld einlesen möchte das der text ab dem leerzeichen abgeschnitten wird?
kann mir da mal jemand helfen?
danke schon mal im vorraus
-
- Lazarusforum e. V.
- Beiträge: 530
- Registriert: So 10. Sep 2006, 23:24
- OS, Lazarus, FPC: Linux Mint 21.3; Lazarus 3.0 FPC 3.2.2; RaspiOS
- CPU-Target: AMD 64, ARM 32
- Wohnort: nr Stuttgart
Re: text nur zum teil ausgeben?
Hallo reiter,
versuche es mal mit der Funktion ExtractDelimited aus der unit StrUtils:
Definition:
angewand an dein Beispiel:
Viel Errfolg.
Gruß, linkat
versuche es mal mit der Funktion ExtractDelimited aus der unit StrUtils:
Definition:
Code: Alles auswählen
function ExtractDelimited(n:Integer;const s:String;const Delims:TSysCharSet):String;
angewand an dein Beispiel:
Code: Alles auswählen
uses StrUtils;
....
edit5.Text:=ExtractDelimited(1,'dasisteintest - dernichtfunktioniert',[' ']);
oder
edit5.Text:=trim(ExtractDelimited(1,'dasisteintest - dernichtfunktioniert',['-'])); //<-- Trim entfernt das Leerzeichen am Ende
Viel Errfolg.
Gruß, linkat
Linux Mint 21; Lazarus 2.2.4 FPC 3.2.2; RaspiOS
Re: text nur zum teil ausgeben?
irgendwie macht er das nicht...und bringt mir einen fehler
StrUtils ist in uses eingetragen
function ExtractDelimited(n:Integer;const s:String;const Delims:TSysCharSet):String;
procedure TForm1.ListBox6Click(Sender: TObject);
begin
edit5.Text:=ExtractDelimited(1,ListBox6.GetSelectedText,[' ']);
end;
unit1.pas(326,17) Fatal: Syntax error, ";" expected but "." found
StrUtils ist in uses eingetragen
function ExtractDelimited(n:Integer;const s:String;const Delims:TSysCharSet):String;
procedure TForm1.ListBox6Click(Sender: TObject);
begin
edit5.Text:=ExtractDelimited(1,ListBox6.GetSelectedText,[' ']);
end;
unit1.pas(326,17) Fatal: Syntax error, ";" expected but "." found
Re: text nur zum teil ausgeben?
Oder nimm doch Pascal-Grundfunktionen:
Wegen des Fehlers 'unit1.pas(326,17) Fatal: Syntax error, ";" expected but "." found': Linkat's Code ist in Ordnung, der Fehler liegt irgendwo anders, aber wo, das kann man nur sagen, wenn man den ganzen Quelltext kennt. Schau dir die Zeile 326 an, dort meckert der Compiler.
Code: Alles auswählen
var
p: Integer;
begin
p := pos(' ', ListBox6.GetSelectedText);
if p > 0 then
Edit5.Text := Copy(Listbox6.GetSelectedText, 1, p-1)
else
Edit5.Text := Listbox6.GetSelectedText;
Wegen des Fehlers 'unit1.pas(326,17) Fatal: Syntax error, ";" expected but "." found': Linkat's Code ist in Ordnung, der Fehler liegt irgendwo anders, aber wo, das kann man nur sagen, wenn man den ganzen Quelltext kennt. Schau dir die Zeile 326 an, dort meckert der Compiler.
Re: text nur zum teil ausgeben?
vielen dank...
ihr seit die besten...
funktioniert nun
ihr seit die besten...
funktioniert nun
-
- Lazarusforum e. V.
- Beiträge: 530
- Registriert: So 10. Sep 2006, 23:24
- OS, Lazarus, FPC: Linux Mint 21.3; Lazarus 3.0 FPC 3.2.2; RaspiOS
- CPU-Target: AMD 64, ARM 32
- Wohnort: nr Stuttgart
Re: text nur zum teil ausgeben?
wahrscheinlich darfst du nur einen String an ExtractDelimited übergeben, also erst:
Code: Alles auswählen
var s:String;
...
s:=ListBox6.GetSelectedText;
edit5.Text:=ExtractDelimited(1,s,[' ']);
Linux Mint 21; Lazarus 2.2.4 FPC 3.2.2; RaspiOS
Re: text nur zum teil ausgeben?
super , danke
darf ich noch ne andere frage hier stellen oder einen neuen thread für auf machen?
wenn das nicht passt bitte ich die admins das zu verschieben
hängt aber damit zusammen
also aus der liste wird das jetzt richtig übergeben wie ich das will an edit5 (danke euch)
jetzt hab ich noch ne funktion auf einen button ausführen gelegt wo das was in edit5 steht verarbeitet wird das funktioniert auch auf form1
jetzt habe ich eine form2 erstellt (eine abfrage ausführen oder abbruch) und die Form2 in die uses auf der form1 eingetragen
der button6 öffnet mir jetzt mit form2.show die form und habe dann auf den button ausführen in der form2 meinen befehl gelegt (der in der form1 funktioniert)
also es wird alles korekt ausgeführt bis ich auf den button ausführen in der form2 klicke
da sagt er mir aber dann als fehler das er das edit5 nicht findet und den befehl für das ausführen auch nicht
hier leitet er auf die form2
procedure TForm1.BitBtn4Click(Sender: TObject);
begin
Form2.show;
end;
unit Unit2;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, Buttons,
StdCtrls;
type
{ TForm2 }
TForm2 = class(TForm)
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
Label1: TLabel;
procedure BitBtn1Click(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
private
public
end;
var
Form2: TForm2;
implementation
{$R *.lfm}
{ TForm2 }
procedure TForm2.BitBtn2Click(Sender: TObject);
begin
Command:= 'opkg remove'+' '+Edit5.Text+ #10;
Memo1.Append('*** Sending ' + Command);
Memo1.Append('*** Begin result****');
Memo1.Append(comm.CommandResult(Command));
Memo1.Append('*** End result****');
Memo1.Append('');
end;
procedure TForm2.BitBtn1Click(Sender: TObject);
begin
close;
end;
end.
fehlermeldung
Projekt kompilieren, Ziel: Enigma2_BoxControl: Exit code 256, Fehler: 10
unit2.pas(38,3) Error: Identifier not found "Command"
unit2.pas(38,31) Error: Identifier not found "Edit5"
unit2.pas(39,3) Error: Identifier not found "Memo1"
unit2.pas(39,33) Error: Identifier not found "Command"
unit2.pas(40,3) Error: Identifier not found "Memo1"
unit2.pas(41,3) Error: Identifier not found "Memo1"
unit2.pas(41,16) Error: Identifier not found "comm"
unit2.pas(41,35) Error: Identifier not found "Command"
unit2.pas(42,3) Error: Identifier not found "Memo1"
unit2.pas(43,3) Error: Identifier not found "Memo1"
darf ich noch ne andere frage hier stellen oder einen neuen thread für auf machen?
wenn das nicht passt bitte ich die admins das zu verschieben
hängt aber damit zusammen
also aus der liste wird das jetzt richtig übergeben wie ich das will an edit5 (danke euch)
jetzt hab ich noch ne funktion auf einen button ausführen gelegt wo das was in edit5 steht verarbeitet wird das funktioniert auch auf form1
jetzt habe ich eine form2 erstellt (eine abfrage ausführen oder abbruch) und die Form2 in die uses auf der form1 eingetragen
der button6 öffnet mir jetzt mit form2.show die form und habe dann auf den button ausführen in der form2 meinen befehl gelegt (der in der form1 funktioniert)
also es wird alles korekt ausgeführt bis ich auf den button ausführen in der form2 klicke
da sagt er mir aber dann als fehler das er das edit5 nicht findet und den befehl für das ausführen auch nicht
hier leitet er auf die form2
procedure TForm1.BitBtn4Click(Sender: TObject);
begin
Form2.show;
end;
unit Unit2;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, Buttons,
StdCtrls;
type
{ TForm2 }
TForm2 = class(TForm)
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
Label1: TLabel;
procedure BitBtn1Click(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
private
public
end;
var
Form2: TForm2;
implementation
{$R *.lfm}
{ TForm2 }
procedure TForm2.BitBtn2Click(Sender: TObject);
begin
Command:= 'opkg remove'+' '+Edit5.Text+ #10;
Memo1.Append('*** Sending ' + Command);
Memo1.Append('*** Begin result****');
Memo1.Append(comm.CommandResult(Command));
Memo1.Append('*** End result****');
Memo1.Append('');
end;
procedure TForm2.BitBtn1Click(Sender: TObject);
begin
close;
end;
end.
fehlermeldung
Projekt kompilieren, Ziel: Enigma2_BoxControl: Exit code 256, Fehler: 10
unit2.pas(38,3) Error: Identifier not found "Command"
unit2.pas(38,31) Error: Identifier not found "Edit5"
unit2.pas(39,3) Error: Identifier not found "Memo1"
unit2.pas(39,33) Error: Identifier not found "Command"
unit2.pas(40,3) Error: Identifier not found "Memo1"
unit2.pas(41,3) Error: Identifier not found "Memo1"
unit2.pas(41,16) Error: Identifier not found "comm"
unit2.pas(41,35) Error: Identifier not found "Command"
unit2.pas(42,3) Error: Identifier not found "Memo1"
unit2.pas(43,3) Error: Identifier not found "Memo1"
Re: text nur zum teil ausgeben?
command soll wahrscheinlich eine lokale Variable von TForm2.BitBtn2Click sein - ist aber nirgendwo deklariert, also:
Edit5 ist auf TForm2 auch nirgendwo vorhanden und wird daher nicht gefunden, genausowenig wie Memo1. Falls diese auf einem anderen Formular vorhanden sind, musst du dessen Namen voranstellen, also
Ist aber meiner Ansicht nach schlechter Programmierstil, weil TForm2 dann nur funktioniert, wenn eine Form1 vorhanden ist. Besser ist z.B. TForm2 ein Property a la
zu definieren, diesem beim Erzeugen von Form2 oder an passender anderer Stelle den Text von Edit5 zuzuweisen. In dieser Konstruktion wäre TForm2 autark und müsste nichts von den anderen Formularen wissen.
Ziel sollte sein, dass die Formulare sich untereinander möglichst wenig kennen, sonst landest zu bei größeren Projekten sehr schnell bei zirklären Unit-Abhänigkeiten.
Wie das mit dem Memo1 zu lösen ist, überlasse ich dir aus "Hausaufgabe".
Code: Alles auswählen
procedure TForm2.BitBtn2Click(Sender: TObject);
var
Command: String;
begin
Command := 'opk remove' + ' ' + Edit5.Text; // warum ist hier #10 angehängt?
Memo1.Append('....');
...
Edit5 ist auf TForm2 auch nirgendwo vorhanden und wird daher nicht gefunden, genausowenig wie Memo1. Falls diese auf einem anderen Formular vorhanden sind, musst du dessen Namen voranstellen, also
Code: Alles auswählen
...
Command := 'opk remove' + ' ' + Form1.Edit5.Text;
...
Ist aber meiner Ansicht nach schlechter Programmierstil, weil TForm2 dann nur funktioniert, wenn eine Form1 vorhanden ist. Besser ist z.B. TForm2 ein Property a la
Code: Alles auswählen
type
TForm2 = class(TForm)
procedure BitBtn2Click(Sender: TObject);
private
FCmdParameter: String;
public
property CmdParameter: String read FCmdParameter write FCmdParameter;
end;
procedure TForm2.BitBtnClick(Sender: TObject);
var
Command: String;
begin
Command := 'opkg remove ' + FCmdParameter;
...
zu definieren, diesem beim Erzeugen von Form2 oder an passender anderer Stelle den Text von Edit5 zuzuweisen. In dieser Konstruktion wäre TForm2 autark und müsste nichts von den anderen Formularen wissen.
Ziel sollte sein, dass die Formulare sich untereinander möglichst wenig kennen, sonst landest zu bei größeren Projekten sehr schnell bei zirklären Unit-Abhänigkeiten.
Wie das mit dem Memo1 zu lösen ist, überlasse ich dir aus "Hausaufgabe".
Re: text nur zum teil ausgeben?
danke,
ja mag schlecht sein... bin ja noch am lernen...
aber schön wenn jemand einem mal paar tips gibt wie es besser geht
danke
ja mag schlecht sein... bin ja noch am lernen...
aber schön wenn jemand einem mal paar tips gibt wie es besser geht
danke
Re: text nur zum teil ausgeben?
bei deiner zeile aus deinem code
Command := 'opkg remove ' + FCmdParameter;
wo wird da denn das edit5.text angesprochen?
er compiliert es zwar durch macht es aber nicht
Command := 'opkg remove ' + FCmdParameter;
wo wird da denn das edit5.text angesprochen?
er compiliert es zwar durch macht es aber nicht
Re: text nur zum teil ausgeben?
reiter hat geschrieben:bei deiner zeile aus deinem code
Command := 'opkg remove ' + FCmdParameter;
wo wird da denn das edit5.text angesprochen?
er compiliert es zwar durch macht es aber nicht
Ich habe nicht alles im Code geschrieben, weil ich nicht weiß wo TForm2 erzeugt wird, und wo Edit5 sich befindet, und entsprechende Annahmen vermeiden wollte. Nun also doch: Angenommen, Edit5 befindet sich auf Form1 (Typ TForm1), und TForm1 hat eine Methode "Form2Aufrufen" (sorry einen besseren Namen habe ich nicht...). Hier wäre ein guter Punkt, wo Form1 dem CmdParameter von Form2 seinen Edit5.Text zuweisen könnte. Auf diese Weise braucht nur Form1 Form2 zu kennen (das ist unvermeidbar, denn Form2 wird ja von Form1 aus angezeigt), aber Form2 muss Form1 NICHT kennen. d.h. die unit mit Form2 kommt ohne ein "uses form1unit" aus, was die Gefahr einer zirkulären Abhängigkeit reduziert:
Code: Alles auswählen
procedure TForm1.Form2Aufrufen;
begin
Form2.CmdParameter := Edit5.Text;
Form2.Show;
end;
Re: text nur zum teil ausgeben?
danke,
mit deiner letzten erklärung kann ich das auch nachvollziehen
supi
nochmal danke...
mit deiner letzten erklärung kann ich das auch nachvollziehen
supi
nochmal danke...
Re: text nur zum teil ausgeben?
Ich hab das probiert form1.edit5.text
Form1 wird nicht erkannt Fehler beim compilieren
Dann mit FCmdParameter probiert , wird durch compiliert aber der Parameter wird nicht aufgerufen
edit: jetzt funktioniert es
hatte die uses unit1; vergessen
danke nochmal für eure hilfe
Form1 wird nicht erkannt Fehler beim compilieren
Dann mit FCmdParameter probiert , wird durch compiliert aber der Parameter wird nicht aufgerufen
edit: jetzt funktioniert es
hatte die uses unit1; vergessen
danke nochmal für eure hilfe