Danke für den sehr guten TippMAC hat geschrieben:Achja, wie du gemerkt hast ist dein Programm bei select all ziemlich langsam. (zumindestens bei mir)
Das liegt daran, da dein Programm folgendes macht:
Eine Zeile Hinzufügen,
Alles Anzeigen
Eine Zeile Hinzufügen,
Alles Anzeigen
Eine Zeile Hinzufügen,
Alles Anzeigen
und das ziemlich oft, eigentlich reicht folgendes genauso:
Eine Zeile Hinzufügen,
Eine Zeile Hinzufügen,
Eine Zeile Hinzufügen,
Alles Anzeigen
Und das lässt sich ziemlich einfach, aber effizient so machen.
Nehmen wir mal an deine Memo heißt Memo1
dann sieht dein code folgendemaßen auß
Wenn du den folgender maßen änderstCode: Alles auswählen
procedure ... var ... begin Memo1.Lines.Add Memo1.Lines.Add ... end;
Wie du siehst, 3 Zeilen mehr Code und wenn das jetzt klappt ist das richtig schnell.Code: Alles auswählen
procedure ... var ... VMemo:TMemo; begin VMemo := TMemo.Create(nil); // erstellt eine VMemo, V für Virtuell ;) heißt aber nur so, ist ne ganz normale memo... VMemo.Lines.Add // füge die Zeichen zu Vmemo hinzu... VMemo.Lines.Add ... Memo1.Text := VMemo.Text; // setzt den Text von Memo1 auf VMemo.text VMemo.Free; // lscht VMemo wieder, wichtig!... end;
im var berecih machst du eben platzt für eine Weitere Memo.
Die wird dann erstmal erstellt.
Alle befehle beziehen sich auf diese Memo, da diese sich aber nirgens (Frage an die die das wissen, wo befindet die sich eigentlich?) befindet, wird diese auch nicht gezeichnet.
Danach wird der gesammte text auf Memo1 geschrieben, 1 mal zeichnen , und danach wird VMemo gelöscht.

durchgeführt und siehe da es ist extrem viel schneller geworden.
Eine Frage dazu nochmal, das habe ich noch nie verstanden. was hat dieses 'nil' zu sagen? ich finde das komisch^^
Das versteh ich noch nicht ganz.MAC hat geschrieben:Es geht übrigens:
Du makierst in Lazarus alle Checkboxen, gehst in den Objektinspektor und setzt OnMouseDown auf Checkbox1MouseDown
Wenn jetzt strg gerückt wird , wird die globale variable "istSTRG" auf True gesetzt, wenns wieder losgelassen wird auf False.
Meinste das in etwa so? Also für jedes Feld abspeichern ob istSTRG true oder false ist und dann am ende die linienart mit ner if abfrage machen?
also meinetwegen if StrgCheckBox1 := true then ... else ___ so in der art und davor wenn man auf den batton klickt ne onklick abfrage if istSTRG := true then StrgCheckBox1 := true else StrgCheckBox1 := false;
Aber achtung , wenn du im MouseDown Checkbox1.Checked := False drückst, dann passiert folgendes:
Checlbox1.Checked wird false gesetzt.
Weil du geklickt hast wird er wieder auf true gesetzt.
Also musst du , das worauf du geklickt hast auf True setzen wenns am ende Auf false sein soll

Wenn das jetzt nen bisschen kompliziert ist, schreib mal
(Sender as TCheckbox).checked := False;
in Checkbox1MouseDown und du siehst was ich meine, anstatt False ist das ding gecheckt...
Code: Alles auswählen
var
istSTRG:boolean = False;
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.CheckBox1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if ssCTRL in Shift then istSTRG := True
else istSTRG :=False;
end;