| Autor |
Beitrag |
Atomic
Hält's aus hier
Beiträge: 3
|
Verfasst: Sa 07.11.09 01:45
Hallo an alle
Ich bin neu hier und hoffe das ich im richtigen bereich bin.
Ich habe ine Problem bei dem ich absolut nicht weiterkomme.
Es geht um folgendes...
Ich möchte zur Laufzeit eine Fromular mit einem Memofld erzeugen.
Dies habe ich auch hinbekommen. Nun möchte ich aber auf das OnChange-Ereignis des Memofeldes zugreifen können um die Größe des Fromulars und des Memofeldes dynamisch anzupassn.
Das soll heisen, wenn ich in das Memofeld etwas hineinschreibe soll sich die Größe automatisch and den Text anpassen.
ich hoffe mir kann jemand helfen
|
|
Boldar
      
Beiträge: 1555
Erhaltene Danke: 70
Win7 Enterprise 64bit, Win XP SP2
Turbo Delphi
|
Verfasst: Sa 07.11.09 01:49
Du musst als Methode von deiner Form eine entsprechende Prozedur schreiben (die Parameter findest du unter TMemo onchange in der OH) und dann diese zur Laufzeit zuweisen:
Delphi-Quelltext 1:
| Memo.onchande := TForm1.memoonchange; |
mfg Boldar
Edit: das mit der Größe wird etwas komplizierter, es gab da glaub ich mal sone api funktion, die dir die Länge von einem Text liefert, jaenicke weiss dass bestimmt, der hat mir dass damals glaub ich erzählt.
Dementsprechend musst du dann halt Form.width anpassen und im memo einfach die anchors einstellen.
|
|
Atomic 
Hält's aus hier
Beiträge: 3
|
Verfasst: Sa 07.11.09 01:53
|
|
Boldar
      
Beiträge: 1555
Erhaltene Danke: 70
Win7 Enterprise 64bit, Win XP SP2
Turbo Delphi
|
Verfasst: Sa 07.11.09 02:03
du musst halt
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30:
| procedure TForm1.memokeydown(Sender: TObject; var Key: Word; Shift: TShiftState); begin end;
procedure TForm1.Button1Click(Sender: TObject); begin Testform:=TForm.Create(form1); Testform.Borderstyle:=bstoolWindow; Testform.Top:=0; Testform.Left:=0; Testform.height:=500; Testform.show; Testform.SetFocus; Testform.Font.Size:=5; testform.BorderIcons:=[]; testform.Cursor:=crhandpoint; Text:=TMemo.Create(self); text.parent:=testform; text.ScrollBars:=ssVertical; text.Top:=4; text.Left:=4; text.WordWrap:=true; text.BorderStyle:=bsNone; text.width:=100; text.text:=memo1.text; text.onkeydown := self.memokeydown;
end; |
Aber warum setzt du wordwrap, wenn du doch grade nicht umbrechen willst, sondern die breite anpassen willst? Und warum nimmst du nicht einfach scrollbars?
|
|
Atomic 
Hält's aus hier
Beiträge: 3
|
Verfasst: Sa 07.11.09 02:07
Das mit dem WordWrap ist noch ein rest aus meinen Testversuchen
hab nur schnell mal reinkopiert
Denn das ist mein Testquellcode denn das Programm dazu ist entwickelt aber eben diese funktion fehlt noch
Scrollbars sind ja möglich und das funktioniert auch super, nur gefällt mir das nicht so sonderlich gut.
Es soll sich eben die From mit den Memofeld zusammen vergrößern wenn man den Text im Memofeld ändert.
Ich weis eben nicht wie man die Ereignisse anspricht. Denn zur Entwicklungszeit kann man ja einfach reinklicken und dann seine Code schreiben.
nur zur Laufzeit geht das leider nicht
lg Atomic
|
|
Boldar
      
Beiträge: 1555
Erhaltene Danke: 70
Win7 Enterprise 64bit, Win XP SP2
Turbo Delphi
|
Verfasst: Sa 07.11.09 02:23
|
|
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Sa 07.11.09 08:55
Boldar hat folgendes geschrieben : | | Edit: das mit der Größe wird etwas komplizierter, es gab da glaub ich mal sone api funktion, die dir die Länge von einem Text liefert, jaenicke weiss dass bestimmt, der hat mir dass damals glaub ich erzählt. |
Die API-Funktion gibt es, nennt sich GetTextExtentPoint32. Allerdings funktioniert die nicht mit einem Memo, soweit ich mich entsinne weil dessen Handle keine Schriftart zugeordnet ist. Ob man das mit SelectObject selbst machen kann, habe ich nicht ausprobiert.
Heißt: Man muss ein anderes Canvas (z.B. das des Formulars) nehmen und kann dann auch gleich Canvas.TextWidth nehmen (das diese Funktion wrappt).
Die Schriftart muss man natürlich ggf. vorher an die des Memos angleichen.
|
|
Klabautermann
      

Beiträge: 6366
Erhaltene Danke: 60
Windows 7, Ubuntu
Delphi 7 Prof.
|
Verfasst: Mo 09.11.09 11:08
Hallo und  in der Entwickler-Ecke,
bitte ändere den Titel des Topics, da er wenig über das eigentlich Thema verrät. Hier der entsprechende Absatz aus den Richtlinien:
| 1.2 Beiträge: | | Bitte formuliere den Betreff Deiner Beiträge so, dass andere Mitglieder anhand dieser bereits das eigentliche Thema festmachen können. Beiträge wie etwa "Eine Anfängerfrage" oder "Weiß jemand, wie das geht?" lassen den Leser im Unklaren darüber, was das Thema der Diskussion ist.[...] |
Einfach oben bei Deinem ersten Beitrag auf  oder  klicken und den Titel ändern. Danke Dir!
Viele Grüße,
Klabautermann
|
|