Ok habs rausgefunden... einfach per pinvoke einen CompatibleDC baun, darauf dann ein CompatibleBitmap von dem ursprünglichen mit SelectObject auswählen, auf den zuvor erstellten CompatibleDC zeichnen. Also so wie früher in C++ 😉
Hi 😉
Hab mal ne Frage... ich hol mir von ner Bitmap die Graphics... also Graphics.FromImage(bmp) ... auf dieses graphics objekt zeichne ich nun einen normalen text mit dem TextRenderer (ich muss GDI verwenden, ist ne lange geschichte) schreib - alles ok... wenn ich nen fetten (also Bold) text schreibe, is der voll hässlich, wenn ich den modus auf transparent stelle (mit SetBkMode -> pinvoke)
wieso?
danke
Hi 😉
Ich würde dir empfehlen ein Framework dafür zu verwenden... hab jetzt nicht unbedingt viel Erfahrung damit, aber XNA soll recht gut sein, wenn du mit .Net Sprachen programmieren willst.
[http://msdn.microsoft.com/en-us/xna/default.aspx]MSDN: XNA]()
Ah genau, auf das hab ich gar nicht gedacht danke 😉
Wie funktioniert das? Das wird ja automatisch ausgelesen oder?
Nein, steht doch da, ein string[], also nichts komplexes. wie kann man da drauf ein split loslassen? ist doch im xml...?
post mal dein css bzw versuch mal display:block
Mach doch anstelle des asp:Hyperlinks einen asp:LinkButton
Da kannst dann ein OnClick event zuweisen
Hi 😉
Wie jedem hier bekannt ist, kann man bei Usercontrols natürlich auch Properties deklarieren zb
public string MyProperty { get; set; }
und diese dann im Asp Xml setzen:
<uc1:MyUserCtrl runat="server" ID="aId" MyProperty="hallo" />
gut, ich weiß allerdings nicht, wie das mit einem string[] Property funktioniert 😉
kann mir da jemand helfen? müsste also mein Property
public string MyArrayProp { get; set; }
befüllen 🙂
danke
KenshinX
Schau dir mal AJAX an 😉
ScriptController oder so heißt der und ein UpdatePanel (sind 2 Controls im VS)... wo jetzt genau dein Problem ist, versteh ich zwar nicht so ganz, aber mit AJAX kannst du, ohne dass die ganze Seite neu ladet infos zum Server zurückschicken und dann darauf antworten... aktuallisiert wird alles innerhalb der UpdatePanel(s).
greets
kenshin
Thx hab mich schon zurecht gefunden... hab nen c# wrapper um den SHFolderBrowser gebaut 😉
Hi 😉
danke für deine Antwort! Werd mir das mal anschaun.
Ja auf codeproject hab ich auch schon gesucht, aber nicht viel gefunden.
hi 😉
ich würde gerne beim FolderBrowseDialog einen pfad eingeben... zb. \anyserver\afolder ... ja, aber da is nichts zum eingeben 😉
wenn ihr VS habt geht mal auf Procject Settings -> Reference Paths -> ... (browse for folder) ... so sollte er aussehen (sieht komplett gleich aus, nur halt noch ein input field)
thx!
Kenshin
Danke für die antwort, hat aber leider nichts mit den SpecialFolders zu tun 😉 die drei links betreffen nur file extensions
zb es gibt ja ein icon für die extension .txt... und die SpecialFolder in Environment.SpecialFolder haben ja auch alle eigene icons wie zb. my documents, my music, etc.
und von denen brauch ich das image 😉
Hi 😉
weiß jemand wie man von den Environment.SpecialFolder die images dazu bekommt?
thx
Kenshin
Thx is aber leider nicht das was ich suche 😉
Möchte den PrintDialog von .net verwenden. Andere Applikationen verwenden den ja auch und da ist kein Apply Button zu sehen. Kann man da vielleicht irgendwas mit dem DEVMODE oder so einstellen?
Hi 😉
Da es um ein Form geht, bin ich hier glaub ich richtig.
Und zwar rufe ich folgendermaßen meinen PrintDialog auf:
using (PrintDialog pd=new PrintDialog())
{
pd.ShowDialog();
// ....................
}
Das funktioniert auch gut, nur beim PrintDialog ist ein Apply bzw. Übernehmen Button ... und der gehört normal nicht hier hin... Jemand eine Ahnung wie man den wegbekommt?
Thx!
Ok konnte das Problem endlich loesen... beim PrintPage Event waren die PageUnits nicht auf Pixel gestellt... also sollte jemand auch so ein problem haben unbedingt kontrollieren, ob die PageUnits auf das gesetzt sind, was ihr braucht 😉
hi 😉
Ne Frage... Ich drucke mit Hilfe des PrintDialogs und PrintDocument mit dem Aufruf der Methode Print(). Was gedruckt wird, mach ich in der Methode PrintPage (event was bei Print() augerufen wird).
Meine Frage ist, wie kann ich erkennen, dass der User den Druckauftrag abgebrochen, neu gestartet oder pausiert hat?
Danke!
Hi! Ich drucke mit C# mit dem PrintDocument (rufe die Print() Methode auf und hab als Event beim PrintPage eine Methode gemacht).
Dann hol ich mir vom PrintEventArgs e die Graphics und zwar so:
SimpleDraw(e.Graphics, 1 /*page*/);
Die Simple Draw Methode zeichnet einfach auf das Graphics objekt rauf.
Bei den PrinterSettings wird mir gesagt, dass 600 DPI verwendet werden... dem ist jedoch nicht so... der Output sieht dann dementsprechend aus (das Graphics objekt kann maximal 72 dpi bei dem Output).
Hab als Test eine bmp datei erstellt in der größe einer A4 Seite mit 600dpi... ruf es auch mit der Methode auf und speichere das Bitmap wieder ab... da ist der Output dann richtig!
Wo könnte da der Fehler sein?
Vielen Dank für die Hilfe!!!
edit: 76 dpi -> 72 dpi
edit2: was vielleicht noch anzumerken ist:
Bei Graphics vom Bild: VisibleClipBounds 4961 x 7016
Bei Grahpics vom Printer: VCB: 850 x 1100 (das ist etwas komisch bei 600 dpi)
*g* das macht nichts! Grayscale brauch ich auch, hab grad gemerkt, dass ich ne Out of Memory Exception bekomm wenn ich ein image mit Grayscale hab und die Graphics davon hole... also danke 😜
Ah cool danke 😉
Jetzt dann nur noch eine Frage: von indexed images kann man kein Graphics object holen... gibts die Möglichkeit einfach ein 32bit Image zu machen und das dann in dieses PixelFormat zu konvertieren oder so was?
hi 😉
Ist es möglich ein Image Schwarz Weis (nicht grayscale) zu machen? Gibt es da ein PixelFormat dafür?
Danke!
Ah ok g danke! Werd mir das dann mal anschaun ^^
@s-sharp
danke für den link zum openBook 😉
Wie könnte man hier mit Pinvoke oder so die daten an den drucker senden?
@Xynratron
Ah ok g und was genau sind jetzt plottdateien? ^^
So ganz versteh ich das jetzt nicht mit dem PostScript... das sind ja nur zusatzliche befehle oder?
Dank 😉 habs in der zwischenzeit geschafft das aus dem IntPtr rauszubekommen mit diversen Marshal aufrufen, aber ich würds jetzt doch gern mal mit .net versuchen... aber da hab ich leider gar keine Ahnung wie das Drucken und vor allem wie man PostScript dort reinbekommt.
Hi 😉 In der Suche hab ich leider keine passenden Threads gefunden...
Gibt es unter C# eine Möglichkeit PostScript an den Drucker zu schicken? Ich hab leider gar keine Ahnung wie das mit PostScript funktioniert, aber das sind ja so Befehle, die man dem Drucker gibt zb. welche Papierart zu verwenden ist etc. (wenn es ein PostScript Drucker ist) oder?
Im alten C++ programm (was ich übersetz) wird die Funktion Escape bzw ExtEscape aufgerufen.
Jemand eine Idee?
Ok hat sich erledigt werds wohl eh mit .net machen 😉
Aso, wie sieht es .net denn vor? Hab mit drucken leider noch keine Erfahrung.
Wäre nett, wenn du mir einen Beispielcode posten könntest!
Hi 😉
Eine Frage... kann man mit C# so drucken, dass ich in einer Schleife alle meine Seiten (eine eigene Struktur) durchgeh und dem Drucker dann immer Sag, dass jetzt eine neue Seite beginnt.. mir dann das Graphics object dieser Seite hol, drauf zeichne, dann sag, dass die Seite aus ist, die nächste anforder usw? Ist das mit .net möglich?
Danke, google hab ich schon probiert 😉
Ich brauch die Informationen aber... ich verwende PInvoke, da ich ein 15 Jahre altes Programm portier. Sonst noch jemand nen Vorschlag wie ich an die Infos komme? Hab die Structur DEVNAMES definiert und bekomm da eben die Werte rein, die jeweils das Offset im Pointer speichern... nur auch im unsafe code komm ich da nicht weiter, da meine Structur DEVNAMES Managed ist und somit nicht auf char* gecastet werden.
Ich übergebe die DEVNAMES and PrinterSettings... da bekomm ich dann aber Leider nur den DruckerNamen raus 😕
Hi 😉
Hat jemand eine Ahnung wie ich in C# 3.0 an die den DriverName und an den Port des ausgewählten Druckers komme? Bzw. über die DEVNAMES die ich gesetzt habe?
Danke im Voraus!
Ah danke, aber ich machs eh so g Kenn das IDisposable Interface wohl, wusste nur nicht, dass ich das Graphics objekt auch disposen muss. Trotzdem danke!
Ma super danke!
Auf das wär ich nie gekommen, dass es an dem liegen könnte!
Danke 😉
Hi 😉
Hab ne Frage... wenn ich zb. folgendes mache:
IntPtr ptr=myGraphic.GetHdc();
muss ich danach wieder
myGraphic.ReleaseHdc();
aufrufen.
Wenn ich es umgekehrt mache, also
Graphics myGraph=Graphics.FromHdc(myPtrFromPrinter);
funktioniert es, aber sobald der gleiche call in der Schleife das zweite mal gemacht wird, bekomm ich folgende Exception: OutOfMemoryException
Kann es sein, dass ich das Teil auch irgendwie Releasen muss nachdem ich die operationen damit gemacht hab? Sprich darauf gezeichnet.
Danke für eure Hilfe!
Ja das ist es ja, aber die alten Schriftarten müssen unterstützt werden 😉
Das heißt die Möglichkeit besteht nur über pinvoke?
So nach kurzer Suche hab ich keinen Beitrag gefunden der das behandelt 😉
Und zwar ich lese eine Datei aus und auch die Information welche Schriftart verwendet wird. Es kann auch sein, dass Nicht-TrueType Schriftarten (wie auch immer die heißen) verwendet werden... die kann ich aber in der Klasse Font nicht verwenden. Das brauch ich aber, da ich den Inhalt der Datei auf einen DeviceContext zeichne... dazu verwende ich die in GDI+ definierte Graphics Klasse.
Nur mit einem Objekt der Klasse Graphics muss ich einen Font angeben... ja, aber ich kann leider keinen Nicht-TrueType font erstellen 😮(
Oder ist es über Umwege möglich, dass man zb. die Schriftart convertiert oder sonst was?
Danke für die Hilfe!
Thx fürs verschieben, hab ganz vergessen, dass es diese Kat. auch gibt ^^
Kennt sich vl jemand mit dem VisualStyleRenderer aus?
@herbivore
super danke für deine Antwort 😉 Ich glaub ich werds so machen...
@zommi
auch dir vielen dank für deine Mühe aber ich glaub darunter würd die performance zu sehr leiden 🙂
Gnah ich weiß, sorry aber hier hat einfach niemand mehr was geschrieben... aber anscheinend kennt sich damit leider niemand aus 😦
Hi an alle!
Ich weiß es gibt schon einen Thread der das Thema behandelt (hat anfangs um etwas anderes gehandelt). Ich starte mit Absicht diesen neuen Thread und bitte um Hilfe:
Ich portiere eine Class-Library von C++ nach C# ... in C++ wurde die Methode GetTextMetrics aufgerufen und von einem Font den Ascent und Descent zu bekommen. Ich möchte es vermeiden pinvoke zu benutzen, daher frage ich ob jemand eine Managed variante kennt?
Habs schon mit den Methoden GetCellAscent bzw. GetCellDescent der Klasse FontFamily versucht, jedoch sind die Ergebnisse zu ungenau 😕
Vielen Dank im Voraus!
KenshinX
Jetzt nicht direkt zu deiner Frage, aber
/PS
++i ist nur nen dreher, warum ich das manchmal so tippsle weis ich nicht
Du solltest schon wissen, wann du i und wann i schreibst 😉
bei i++ wird zuerst der aktuelle Wert von i verwendet, dann erhöht
bei ++i wird zuerst erhöht und dann der erhöhte Wert verwendet
Bei deiner for-Schleife ists egal, aber wenn du das zb bei einem Array machst wie
int i=0;
string[] testArray=new string[] { "text1", "text2" };
bekommst du bei
testArray[i++] -> text1
und bei
testArray[++i] -> text2
raus
Hat niemand eine Idee wie man das richtig macht? 😕
Du wirst lachen, aber ich bin schon fast fertig 😉 Sind nur noch so Kleinigkeiten... unter anderem eben die genaue Berechnung des blöden Ascent und Descent (External Leading hab ich schon g) ...
Also wenn jemand einen Vorschlag hat, ich bin für alles offen 😉
Sollte ganz genau sein... also der Font Ascent und Descent
Danke im Voraus!
Danke für das Beispiel 😉
Es geht einfach darum, dass ein 13 Jahre altes Programm nach C# portiert werden soll und der Code an sich nicht verändert... und da werden eigene Strukturen verwendet... es wird eine word datei ausgelesen (aufbau ist wie ein stack) ... und da muss ich das dynamisch aus den fonts generieren, also die abstände (nicht nur für die tables, auch für den normalen text). Das ist der genaue Grund ;o)
Trotzdem danke für die viele Mühe
Nene schau... ich brauch die werte, da ich tables usw alles selbst zeichne
und da brauch ich cellAscent, cellDescent, ExternalLeading ...
ExternalLeading hab ich schon
nur cellAscent und cellDescent sind leider noch zu ungenau beim Ascent ists oft +-1, beim Descent jedoch oft mal bis zu 4 Unterschied... und das haut halt rein bei den Berechnungen.
Also, irgendwelche Vorschläge? 😉