• 27.04.2024, 13:20
  • Registrieren
  • Anmelden
  • Sie sind nicht angemeldet.

 

Lieber Besucher, herzlich willkommen bei: Aqua Computer Forum. Falls dies Ihr erster Besuch auf dieser Seite ist, lesen Sie sich bitte die Hilfe durch. Dort wird Ihnen die Bedienung dieser Seite näher erläutert. Darüber hinaus sollten Sie sich registrieren, um alle Funktionen dieser Seite nutzen zu können. Benutzen Sie das Registrierungsformular, um sich zu registrieren oder informieren Sie sich ausführlich über den Registrierungsvorgang. Falls Sie sich bereits zu einem früheren Zeitpunkt registriert haben, können Sie sich hier anmelden.

delphi: wie fensterteilbereich sperren?

Donnerstag, 7. August 2003, 07:26

also ich wollt mir da so ein programm machen.

In dem kann man nen paar einstellungen machen und wenn man fertig ist kann man nen bestimmten knopf drücken. Dann werden die entsprechenden sachen nach den entsprechenden einstellungen kopiert, was eine weile dauert.

Wärend dieser zeit soll niemand mehr die einstellungen verändern können, die man auf der restlichen arbeitsfläche des programms machen kann, damit nich die eine hälfte der dateien so und die andere SO kopiert ist.


TEdit teile kann ich ja jetzt auch grau machen aber wie ist das mit anderen teilen und buttons? und muß ich jede komponente einzeln dann sperren oder kann ich auch anders sagen, daß nur in einem bestimmten arbeitsbereich des formulares befehle und mausklicks angenommen werden sollen?


update:

joa..! die enabled eigenschaft scheints ja wohl bei jeder komponente zu geben.

Aber gibts trotzdem noch ne möglichkeit, mehrere komponenten auf einmal zu blockieren, also jetzt so alle auf einmal, als die, die ich brauche?
Dieses Youtube-Video ist aufgrund von Urheberrechtsbeschränkungen in deinem Land nicht verfügbar.

Re: delphi: wie fensterteilbereich sperren?

Donnerstag, 7. August 2003, 13:18

Die Antwort: Form1.enabled := false;

Und für jedes Panel das du verwendest das selbe. Oder auch nur einzelne TPanels oder VCL-Komponenten, je nachdem was du haben willst -> enabled:=false bei TPanels und TForms überträgt sich auf die darin enthaltenen VCL-Komponenten (Außer auf TPanel)

Und nicht vergessen alles wieder auf true zurück zu setzen... am besten mit:

Quellcode

1
2
3
4
5
6
try
     Form1.enabled := false;
     //do what you want to do...
finally
     Form1.enabled := true;
end;


gruß, Texx
We'll never stop living this way!

Re: delphi: wie fensterteilbereich sperren?

Donnerstag, 7. August 2003, 15:34

ok danke.

Komisch. ich habe das mit dem enabled:=false mal bei einer groupbox gemacht, aber die darin enthaltenen komponenten bleiben dann trotzdem eingeschaltet. oder geht das nur bei einem reinen TPanel?

Das ist aber letztendlich egal. ich werde dann die buttons einzeln ausschalten. ist auch kein weiteres problem.


---


Ich hab aber noch nen problem:

Ich wollte in mein programm ein logfenster einbauen. Man soll in das fenster nicht von außen reinschreiben können.
Es müssen bei bedarf überlange meldungen trotzdem dargestellt können, wenn es geht. Benutzen wollte ich dafür die TMemo komponente.

Außerdem, ganz wichtig muß ich irgendwie einen zeilenumbruch erzeugen können.

Und wichtig ist noch, daß einzelne log-zeilen an den bestehenden inhalt angefügt werden können, ohne daß der dafür der fensterinhalt komplett neu einkopiert werden muß.

Gut wäre auch, wenn man in dem fenster beispielsweise einzelne meldungen z.B. rot hervorheben könnte.

Das problem ist aber:
Wie kann ich bei der TMemo komponente einen zeilenumbruch veranlassen oder wie kriege ich eine einzelne zeile angefügt?

Eignet sich für meine sache überhaupt gut die TMemo komponente, oder gibts da ne andere komponente, die man dafür wesentlich besser benutzen kann?
Dieses Youtube-Video ist aufgrund von Urheberrechtsbeschränkungen in deinem Land nicht verfügbar.

Re: delphi: wie fensterteilbereich sperren?

Donnerstag, 7. August 2003, 15:43

problem 1 erledigt mit:

Memo1.Lines[0]:='Hallo1';
Memo1.Lines[1]:='Hallo2';


jetzt fehlen noch die farben..


Update:
Es fehlen nicht nur die farben. Die farben scheinen ein ernsthaftes problem zu sein.

Wie kriege ich den text trotzdem schwarz statt grau hin, wenn das teil auf enabled:=false steht.

Und wie kriege ich rote farbe hin.

Mal gucken. hoffentlich geht die rote farbe. sonst sollte ich was anderes als tmemo benutzen oder mich ohne farbe zufrieden geben.

Update:
http://spotlight.de/zforen/cpp/m/cpp-1056453722-27755.html

also dann halt TRichEdit..
Dieses Youtube-Video ist aufgrund von Urheberrechtsbeschränkungen in deinem Land nicht verfügbar.

Re: delphi: wie fensterteilbereich sperren?

Donnerstag, 7. August 2003, 16:04

Das TMemo kannst du auf "ReadOnly" schalten.

Und Zeilen würd ich per Memo1.Lines.Add('BlaBla'); hinzufügen

PS: Die Farbe kannst du nur im Ganzen ändern.
Für einzelne Wörter oder Zeilen brauchst du ein TRichEdit.

Re: delphi: wie fensterteilbereich sperren?

Donnerstag, 7. August 2003, 16:10

Hach, wie gemein!

bei TMemo kann man die Zeilen einfach mit
Line[1]..
Line[2].. einfach so adden.

Bei Richedit muß man mit Lines.Add() arbeiten..


wie gemein..

Da wäre ich jetzt nie von alleine drauf gekommen, daß das ohne Lines.Add nicht geht.

Danke für den kommentar.

Das kam jetzt im richtigen Moment.

Da hätte ich sonst noch ewig nach gesucht, warum das mit den Lines nicht einfach soo geht.

Hab ich letztlich schon benutzt, das mit dem Add, aber ich hätte nicht gedacht, daß das bei RichEdit auch so ist.
Dieses Youtube-Video ist aufgrund von Urheberrechtsbeschränkungen in deinem Land nicht verfügbar.

Re: delphi: wie fensterteilbereich sperren?

Donnerstag, 7. August 2003, 16:59

Ich habe noch ein problem:

Und zwar habe ich rausgefunden, daß ich in richedit die farbe mit

Richedit1.SelAttributes.Color:=clRed;

für eine zeile ändern kann.

Das problem ist jetzt aber, wenn ich einen ganzen text in rot darstellen will.

Ich muß dann doch nicht etwa jedesmal die farbe neu setzen lassen oder?

Das gibts doch bestimmt auch ne funktion um die farbe dauerhaft ändern zu lassen oder ?
Dieses Youtube-Video ist aufgrund von Urheberrechtsbeschränkungen in deinem Land nicht verfügbar.

Re: delphi: wie fensterteilbereich sperren?

Donnerstag, 7. August 2003, 17:10

Also das Ändern der Farbe für den _gesamten_ Text geht auch beim TMemo (Eigenschaft "Font")

Re: delphi: wie fensterteilbereich sperren?

Donnerstag, 7. August 2003, 17:19

nein, so meine ich nicht.

sagen wir, ich will zeile 1-50 und 100-150 in schwarz,
aber zeile 50-100 speziell will ich in rot.

Aber dann müßte ich ja 50 mal davor die rot-funktion aufrufen.

Gibts nicht was, was die funktion nur einmal aufruft und sie danach einfach nicht mehr von selbst auf schwarz zurücksetzt?



---


Und dann hab ich noch ein problem:
Der soll mir die dateien kopieren und gleichzeitig immer in dem log-fenster hinschreiben, wie weit er gerade gekommen ist.

Das problem ist aber:
Man merkt, daß er das richedit feld am füllen ist, die schrift ist aber wegen der system-auslastung erst am ende zu sehen, wenn er alle dateien fertig kopiert hat.

Was soll ich in so einem fall machen?
Dieses Youtube-Video ist aufgrund von Urheberrechtsbeschränkungen in deinem Land nicht verfügbar.

Re: delphi: wie fensterteilbereich sperren?

Donnerstag, 7. August 2003, 17:26

Eieieieiei...

TRichEdit...

Das "Untier"...

Naja, das mit SelAttributes ist schon ziemlich gut gefunden. Allerdings scheint dir nicht ganz klar, wofür das ganze da ist.

Darum meine Erklärung:

SelAttributes stellt die Eigenschaften des Selektierten Textes dar. Wenn du also einen Teilbereich deines Textes ändern willst, dann musst du SelStart und SelLength richtig einstellen. Wenn du nur die nächste Zeile ändern willst, dann reicht es, wenn der "select" an letzter Stelle ist. Also

Quellcode

1
2
RichEdit1.SelStart := length(RichEdit1.lines.text);
RichEdit1.SelLength := 0;


War das verständlich? Ist etwas kompliziert, wenn man das das erste mal hört...

gruß, Texx

PS: Interessant, das man bei D7 mit Memo1.lines[0] := 'Bla'; Zeilen... <Quelltext bei D4 eingeb -> compilier -> ausführ> Hey, das funktioniert ja sogar bei mir! * :D Cool, jetzt hab ich sogar mal was dazu gelernt!

------------------ avoid Doppelpost ------------------

Oder du guckst dir mal SynEdit an und schreibst dir einen eigenen Highlighter. (Ist aber etwas aufwendiger für den Anfang)
We'll never stop living this way!

Re: delphi: wie fensterteilbereich sperren?

Donnerstag, 7. August 2003, 17:32

Kopierlösung:

Entweder Form1.repaint;

oder, und das ist eleganter, weil du dann auch noch das Fenster verschieben kannst:

Application.ProcessMessages;

(und eventuell zusätzlich Form1.repaint;)

gruß, Texx
We'll never stop living this way!

Re: delphi: wie fensterteilbereich sperren?

Donnerstag, 7. August 2003, 17:51

ok danke.

geht jetzt mit
Application.ProcessMessages;


Das problem ist jetzt noch:
Wenn ich das Application.ProcessMessages; nur nach jeder datei mache, kann ich nur alle 1,5 Sek das fenster verschieben.

Wenn ich das Application.ProcessMessages; in die Kopierfunktion einbaue, wird sie merklich langsamer.

so ca 20-40 %.

Gibts da noch eine besonders saubere methode, dafür zu sorgen, daß er die prozedur doch nicht sooft aufruft?

Also ich kann ja nen integer hochzählen lassen, aber ist das sauber? Braucht der intern viele instruktionen, bis er sich von intern auf die speicherstelle vom integer umgeschaltet hat, oder gibts da auch nen saubereren weg, sich zu merken, wie oft er wärend der kopierfunktion das Appication.ProcessMessages; aufrufen soll?


Dann gibts da noch das problem, daß er mir den richedit auf die letzte zeile automatisch scrollen soll, damit ich auch sehe, was er zuletzt gerade gemacht hat.

update:

das mit dem schrollen hat sich erledigt mit:
SendMessage(RichEdit1.Handle, EM_LINESCROLL , 0, 1);



Dieses Youtube-Video ist aufgrund von Urheberrechtsbeschränkungen in deinem Land nicht verfügbar.

Re: delphi: wie fensterteilbereich sperren?

Donnerstag, 7. August 2003, 18:23

Hmmm also außer:

Quellcode

1
2
inc(counter,1);
if((counter mod 10) = 0)then Application.ProcessMessages;

fällt mir in der Hinsicht auch nicht viel besseres ein, was nicht nach "Mit Kanonen auf Spatzen schießen" aussieht. Ist aber auch nicht so schlimm, denn alle derzeit verfügbaren Rechner sollten eigentlich genug Rechenleistung haben, um das ohne merkbaren Performanceverlust zu schaffen... ;)

Alternativ wäre es denkbar, das du deinen Kopieralgorythmus in einen eigenen thread auslagerst. Das wäre zwar die sauberste Methode, ist aber auch die "Königsklasse", denn mit Threads kann man schon so einiges gegen dem Baum fahren lassen. (Glaub mir, damit bekommt man die wüstesten Fehlermeldungen und die wildesten Fehlerursachen hin)

gruß, Texx
We'll never stop living this way!

Re: delphi: wie fensterteilbereich sperren?

Donnerstag, 7. August 2003, 18:59

ok dann laß ich den mist einfach so nach den derzeitigen kenntnissen. Sind ja auch nur mp3s. Soviel länger kanns wohl auch nicht dauern, wenn ichs nur in die speicherkarte kopiere, die sowieso langsam arbeitet.


Aber da gibts noch nen problem:
Wenn ich auf eingebaute komponenten wie TEdit rechtsklicks mache, kommt da das feld, wo man einfügen und kopieren und sowas auswählen kann.

Das kommt aber scheinbar nicht bei der TRichEdit Komponente. Auch nicht wenn ich ReadOnly auslasse und alles so lasse wie es ist. Mit der Strg+C kann man allerdings noch immer markierten Text kopieren. Aber ist irgendwie blöd, so einheitlich. Besser wäre, wenn man da auch mit der rechten Maustaste das pulldown fenster aktivieren könnte.

Ist das normal? Kann ich sowas noch einschalten? Oder müßte man bei der richedit das zusätzlich einbinden wenn man da sowas auch haben würden wollen?
Dieses Youtube-Video ist aufgrund von Urheberrechtsbeschränkungen in deinem Land nicht verfügbar.

Re: delphi: wie fensterteilbereich sperren?

Donnerstag, 7. August 2003, 19:19

Selbst ist der Mann... *grinz*

Wieso willst du denn in deinem Log-Fenster was reinkopieren?

gruß, Texx
We'll never stop living this way!

Re: delphi: wie fensterteilbereich sperren?

Donnerstag, 7. August 2003, 21:57

Könntest dir ein Popupmenu schnappen, dort die benötigten Einträge reinpacken (praktisch wär auch was wie "Log speichern unter" oder "Log löschen")

Das Popupmenu kannst du dann im RichEdit in der Eigenschaft "PopupMenu" auswählen.

Re: delphi: wie fensterteilbereich sperren?

Freitag, 8. August 2003, 07:09

hm.. ach das muß man erst einschalten..?


Ne.. reinschreiben will ich auch gar nix.. :)

Das war nur ein beispiel. Ich will nur, daß man den log rauskopieren und abspeichern kann.

Der Log braucht auch nicht gelöscht werden können. Das soll der automatisch bei jedem neuen kopiervorgang machen, weil ich gemerkt hab, daß wenn das immer manuell vorher löschen muß, das sehr behinderlich beim arbeiten ist.

Log speichern braucht man auch nicht können, weils dazu keinen grund gibt. Wenn jemand ihn wider erwarten doch mal abgespeichert haben will, soll er ihn sich gerfälligt rauskopieren.


Aber schon komisch, daß dieses rechte-Maustaste-Menü (wie nennt man diese rechte maustaste menüs eigentlich?) bei dem TEdit, wo ich es absolut nicht brauche, kommt, und gerade bei dem richedit, wo ich es brauche, genau nicht..

Also man kann es einschalten..?! ?

OK ich guck mal ob man das tatsächlich wo auswählen kann. Aber gefunden hab ich bis jetzt noch nix. :)

Aber wenn ich weiß, daß man es einschalten kann versuch ich wenigstens nix vergebens. Dann weiß ich wenigstens, daß ich nach was suche, was es auch gibt.. :)


Update:

..PopupMenu..

stimmt, da stehts wirklich.. :)

Popupmenü heißen die dinger also. Gut zu wissen. Denn vielleicht werden sie ja auch Pulldown Menüs oder Mausklick Menüs oder "arschkacke"-menüs genannt.

Deshalb mußte ich fragen.. Den rest finde ich glaubeich auch von alleine.. :)
Dieses Youtube-Video ist aufgrund von Urheberrechtsbeschränkungen in deinem Land nicht verfügbar.

Re: delphi: wie fensterteilbereich sperren?

Freitag, 8. August 2003, 08:37

update2:
schön und gut das ganze jetzt aber fakt ist:

Wenn ich ein TEdit einbaue und rechte maustaste draufmache, kommt da ganz von alleine ein vollautomatisches PopupMenü mit einträgen, die überall in allen Programmen im Windows gleich sind, denn:

Wenn ich in tausend anderen programmen im windows auch rechte maustaste drücke, werde ich genau das selbe menü erhalten.

Aber der witz ist, wenn ich TRichEdit reinmache, egal ob ich jetzt als logfenster verwende oder nicht - es könnte ja auch sein, daß ich es als fenster für eine komplizierte textverarbeitung benutzen will - kommt nicht dieses vollautomatische PopupMenü.

Ich kann für TRichEdit selbst ein eigenes PopupFenster definieren und einbinden.

Der witz ist aber, es wird niemals das standard popupfenster vom windows sein. Wenn ich das programm dann an einem computer mit einem englischen windows aufrufe, wird das Popup vom TEdit in englisch statt in deutsch da erscheinen aber mein selbstgebautes PopupMenü vom TRichEdit wird immer noch in deutsch da erscheinen, auch wenn ich es noch so echt nachmache..


Und zweiter witz ist:
Im TEdit erscheint das PopupMenü von ganz alleine, ohne daß dort in der eigenschaft "PopupMenu" irgendwas eingetragen ist, wobei sich dann natürlich auch die frage stellt, wo man es denn dann beim TEdit ausschalten kann.

Und deshalb:
Frage1:
Wie kann ich ein schon vorhandenes PopupMenü im TEdit oder ähnlichen komponenten abschalten?

und wie kann ich, wenn ich im TRichEdit ein PopupMenu einschalte, dafür sorgen, daß ich das windows-eigene stanard popup menü vom windows kriege, was ich auch in TEdit bekomme?
Dieses Youtube-Video ist aufgrund von Urheberrechtsbeschränkungen in deinem Land nicht verfügbar.

Re: delphi: wie fensterteilbereich sperren?

Freitag, 8. August 2003, 12:48

Du hast PAB falsch verstanden. Man kann TRichEdit nicht durch eine Property dazu überreden das standart Windows PopupMenü zu benutzen. PAB meint, das du dir dein eigenes PopupMenü bauen mußt und dies dann in der PopupMenu-Property von TRichEdit einbinden muß.

Da du das aber anscheinend nicht willst, bleibt dir nur die Möglichkeit, bei einem Rechtsklick auf das TRichEdit den entsprechenden Windowscall auszuführen.

gruß, Texx
We'll never stop living this way!

Re: delphi: wie fensterteilbereich sperren?

Freitag, 8. August 2003, 13:59

ok. ist also nen windowscall..

hm.. wie kommt ich jetzt an diesen windows-call?..

naja mal gucken.

Sonst mach ich halt bei dem TEdit das menü der einheitlichkeit wegen ganz weg, das verursacht da ehe nur mist, wenn ich versuche, in dem auf zahlen begrenzten TEdit buchstabeninhalte hereinzukopieren.

und bei dem log stell ichs dann auf nur kopieren mit nem eigenen menü.

Aber wäre schon praktisch, wenn man das fehlende menü auf so eine windows-funktion umleiten könnte.

Aber ich guck mal. vielleicht finde ichs ja heraus.
Dieses Youtube-Video ist aufgrund von Urheberrechtsbeschränkungen in deinem Land nicht verfügbar.