Frage zu meinem Lazarus Programm

Für Fragen von Einsteigern und Programmieranfängern...
Have a nice Day
Beiträge: 59
Registriert: Fr 2. Nov 2012, 19:44

Frage zu meinem Lazarus Programm

Beitrag von Have a nice Day »

Hey Community,
ich habe folgendes Problem zu meinem Lazarus Programm:

Ich habe für die Schule eine Lösung zu dem Damenproblem geschrieben...
Nun soll ich noch einbauen, das man sich jede Lösung noch einmal angucken kann.
Ich habe die Idee gehabt jede Lösung in eine Textdatei zu schreiben, die das Programm dann auslesen kann.

Bis jetzt habe ich folgendes:
Ich habe eine Scrollbox erstellt.. in der 92 Label sind. Jedes Label hat die Caption seiner Lösung ... also z.B. "Lösung 1".
dann habe ich gesagt das wenn man auf das Label klickt, das er eine procedure öffnen soll.

Meine Frage ist jetzt.

Wie kann ich die Textdateien öffnen,auslesen und bearbeiten?


Wie kann ich der procedure sagen welches Label aus der Scrollbox angeklickt wurde.
Dazu habe ich die den Ansatz das jedes Label einen Hint bekommen hat.
Aus einem Programm das mir mal jm. als hilfe geschrieben hat .. hab ich noch das gefunden: (sender as TImage).Hint

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

Re: Frage zu meinem Lazarus Programm

Beitrag von theo »

Have a nice Day hat geschrieben: Bis jetzt habe ich folgendes:
Ich habe eine Scrollbox erstellt.. in der 92 Label sind. Jedes Label hat die Caption seiner Lösung ... also z.B. "Lösung 1".
Wieso das denn?
Dafür gibt es doch z.B. TCombobox. Da hat dann auch jedes Item seinen Index.

Textdateien liest du am einfachsten mit TStringList.

Have a nice Day
Beiträge: 59
Registriert: Fr 2. Nov 2012, 19:44

Re: Frage zu meinem Lazarus Programm

Beitrag von Have a nice Day »

Ich hatte zur Verschönerung noch hinter jedes Label ein Hintergrundbild gelegt.
Da das in der TComboBox nicht geht habe ich das mit der ScrollBox gemacht.
Es ist so ähnlich wie die Bilderliste die ich einmal gemacht hab.

Soner
Beiträge: 726
Registriert: Do 27. Sep 2012, 00:07
OS, Lazarus, FPC: Win10Pro-64Bit, Immer letzte Lazarus Release mit SVN-Fixes
CPU-Target: x86_64-win64
Wohnort: Hamburg

Re: Frage zu meinem Lazarus Programm

Beitrag von Soner »

Have a nice Day hat geschrieben:...
Ich habe eine Scrollbox erstellt.. in der 92 Label sind. Jedes Label hat die Caption seiner Lösung ... also z.B. "Lösung 1".
dann habe ich gesagt das wenn man auf das Label klickt, das er eine procedure öffnen soll.
...
Have a nice Day hat geschrieben:Ich hatte zur Verschönerung noch hinter jedes Label ein Hintergrundbild gelegt.
Da das in der TComboBox nicht geht habe ich das mit der ScrollBox gemacht.
Es ist so ähnlich wie die Bilderliste die ich einmal gemacht hab.
Aus ähnlichen Gründen arbeiten Programme genauso langsam wie vor 20 Jahren obwohl die Rechenleistung mindestens 100 mal gestiegen ist. Und Internet langsam ist obwohl man DSL-Anschluß hat.
Mann sollte Programmierer und Internetseitendesigner/programmierer mit lowend Maschienen ihre Programme und Seiten machen lassen. :lol:
------------------
Übrigens für so etwas kannst du auch Listbox (Ownerdraw) und Stringgrid (selbstzeichnen benutzen). Auch mit Hintergrundbild.
Du kannst auch die Tag-Eigenschaft von Komponenten verwenden. Labels druchnumerieren und bei allen OnClick-Ergeignis mit eine Methode behandeln z.b.:

Code: Alles auswählen

 
procedure TForm1.LabelsClick(Sender: TObject);
begin
  Stringlist.Loadfromfile('xxxx\lösung'+IntToStr(Sender(TComponent).Tag)+'.txt'); 
end;    
 

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

Re: Frage zu meinem Lazarus Programm

Beitrag von theo »

Have a nice Day hat geschrieben:Ich hatte zur Verschönerung noch hinter jedes Label ein Hintergrundbild gelegt.
Bitte nicht Software "verschönern" und auch keine Screenshot davon hochladen. Ich kriege schon fast Augenkrebs, wenn ich mir das nur vorstelle. :wink:
Have a nice Day hat geschrieben:IDa das in der TComboBox nicht geht habe ich das mit der ScrollBox gemacht.
Ginge schon, man sollte aber nicht.

Have a nice Day
Beiträge: 59
Registriert: Fr 2. Nov 2012, 19:44

Re: Frage zu meinem Lazarus Programm

Beitrag von Have a nice Day »

@Soner:
Ich arbeite nun seit ca. einem 3/4 Jahr mit Lazarus .. und hab nie eine gute Einführung bekommen...
Ich glaube es ist nicht so schlimm wenn man da nicht alle Programm gleich optimiert geschrieben hat ;)

@Theo:
Was hast du gegen ein schönes Programm?
Ich mag halt Design !

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

Re: Frage zu meinem Lazarus Programm

Beitrag von theo »

Have a nice Day hat geschrieben: @Theo:
Was hast du gegen ein schönes Programm?
Ich mag halt Design !
Ich mag auch "Design", aber das machen bereits die Themes mit den Widgets für einen einheitlichen und professionellen Look.
Wenn das Programmiererchen sein Elaborat nach seinem Geschmack "verschönern" möchte, geht der Schuss zu 95% nach hinten raus.
Der Benutzer der Software muss dann darunter leiden, selbst wenn es dem Programmierer gefällt.

Have a nice Day
Beiträge: 59
Registriert: Fr 2. Nov 2012, 19:44

Re: Frage zu meinem Lazarus Programm

Beitrag von Have a nice Day »

Willst du damit sagen Programmierer können kein allgemein als schön anerkanntes Design erstellen...
Besstes Gegenbeispiel Apple...

Das Design von Lazarus wurde auch von Programmieren entworfen ;)
Zuletzt geändert von Have a nice Day am Sa 19. Jan 2013, 20:37, insgesamt 1-mal geändert.

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

Re: Frage zu meinem Lazarus Programm

Beitrag von theo »

Have a nice Day hat geschrieben:Willst du damit sagen Programmierer können allgemein als schön anerkanntes Design erstellen...
Den Satz verstehe ich nicht.

Have a nice Day hat geschrieben: Das Design von Lazarus wurde auch von Programmieren entworfen ;)
Lazarus hat kein graphisches Design, mit Ausnahme des Splash Screen und der ist sehr unprofessionell.
Die Themes und Widgets haben ein Design, und die sind nicht von Programmierern entworfen.

Have a nice Day
Beiträge: 59
Registriert: Fr 2. Nov 2012, 19:44

Re: Frage zu meinem Lazarus Programm

Beitrag von Have a nice Day »

ach egal...

wo kann ich den die Stringlist finden?

Have a nice Day
Beiträge: 59
Registriert: Fr 2. Nov 2012, 19:44

Re: Frage zu meinem Lazarus Programm

Beitrag von Have a nice Day »

Wenn ich in einer Funktion eine andere Funktion aufrufe ... wartet die erste Funktion dann bist die aufgerufene durchlaufen ist?

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

Re: Frage zu meinem Lazarus Programm

Beitrag von theo »

Have a nice Day hat geschrieben: wo kann ich den die Stringlist finden?
http://lmddgtfy.net/?q=TStringList%20freepascal

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

Re: Frage zu meinem Lazarus Programm

Beitrag von theo »

Have a nice Day hat geschrieben:Wenn ich in einer Funktion eine andere Funktion aufrufe ... wartet die erste Funktion dann bist die aufgerufene durchlaufen ist?
Ja.

Have a nice Day
Beiträge: 59
Registriert: Fr 2. Nov 2012, 19:44

Re: Frage zu meinem Lazarus Programm

Beitrag von Have a nice Day »

theo hat geschrieben:
Have a nice Day hat geschrieben: wo kann ich den die Stringlist finden?
http://lmddgtfy.net/?q=TStringList%20freepascal
ich dich auch <3
ich hab alles durchsucht bei den Komponenten und deswegen hab ich gefragt...

Code: Alles auswählen

procedure TForm1.Listbox(s:string);
var
  py:integer;
  NewPanel:TPanel;
  NewImage:TImage;
  NewLabel:TLabel;
begin
  py := 0;
  if Scrollbox1.ComponentCount < strtoint(Stringgrid2.Cells[1,0]) then
  begin
    py := strtoint(Label3.caption);
    NewPanel:=TPanel.Create(ScrollBox1);
    NewPanel.Parent:=ScrollBox1;
    NewPanel.Left:=0;
    NewPanel.Top:=py;
    NewImage:=TImage.Create(NewPanel);
    NewImage.Picture.LoadFromFile('./source/other/Leiste.jpg');
    NewImage.Width := 160;
    NewImage.Height := 27;
    NewImage.Parent:=NewPanel;
    NewImage.Left:=1;
    NewImage.Top:=0;
    NewImage.Hint:= s;
    NewImage.Cursor:=crHandPoint;
    NewImage.ShowHint:=False;
    NewImage.OnClick:=@ImageClick;
      NewLabel:=TLabel.Create(NewPanel);
      NewLabel.Parent:=NewPanel;
      NewLabel.OnClick:=@ImageClick;
      NewLabel.Cursor:=crHandPoint;
      NewLabel.Hint:= s;
      NewLabel.AutoSize:=False;
      NewLabel.Caption:= 'Lösung ' + Stringgrid2.Cells[1,0];
      NewLabel.Left:=4;
      NewLabel.Top:= 1;
      NewLabel.Width:=NewImage.Width;
      NewLabel.Font.size := 12;
      NewLabel.Height:=24;
    NewPanel.BorderStyle := bsNone;
    NewPanel.Width:=152;
    NewPanel.Height:=27;
    py:=py+NewPanel.Height;
    Label3.caption := inttostr(py);
  end;
end;     
1. Ich habe nun im Label.Hint einen String gespeichert...
nun will ich wenn @ImageClick ausgelöst wird ... diesen Hint and ImageClick übermitteln ... wie machen ich das?

2. Wenn ich einen String habe... kann ich dann irgendwie jedes einzelne Zeichen durchgehen lassen...
Wie nie for i := x to y schleife... blos halt durch die Zeichen durch ... for i := Zeichen1 to ZeichenLast

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

Re: Frage zu meinem Lazarus Programm

Beitrag von theo »

Have a nice Day hat geschrieben: ich dich auch <3
ich hab alles durchsucht bei den Komponenten und deswegen hab ich gefragt...
Und ich habe dir nur gezeigt, wie du diese Information finden kannst.
TStringList ist keine Komponente und deshalb auch nicht in der Palette sichtbar.

Have a nice Day hat geschrieben: 1. Ich habe nun im Label.Hint einen String gespeichert...
nun will ich wenn @ImageClick ausgelöst wird ... diesen Hint and ImageClick übermitteln ... wie machen ich das?

Bei deinem Eventhandler ImageClick bekommst du einen Parameter "Sender" mit. Dieser "enthält" das Objekt, welches das Ereignis ausgelöst hat. Durch Typecasting kannst du darauf zugreifen.

z.B. TImage(Sender).Hint enthält den geuschten String.
Have a nice Day hat geschrieben: 2. Wenn ich einen String habe... kann ich dann irgendwie jedes einzelne Zeichen durchgehen lassen...
Wie nie for i := x to y schleife... blos halt durch die Zeichen durch ... for i := Zeichen1 to ZeichenLast
Das gehört eigentlich in die Schule unter "Pascal Grundlagen".
Kurz gesagt, enthält MeinString den "Buchstaben" (Char) an der Position i.
Die Länge des Strings erhältst du mit Length(MeinString). Der erste Buchstaben ist bei 1.

Antworten